]> git.saurik.com Git - wxWidgets.git/commitdiff
Merged modifications from the 2.6 branch
authorRobin Dunn <robin@alldunn.com>
Fri, 30 Dec 2005 23:02:03 +0000 (23:02 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 30 Dec 2005 23:02:03 +0000 (23:02 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

104 files changed:
wxPython/config.py
wxPython/demo/BitmapButton.py
wxPython/demo/FileBrowseButton.py
wxPython/demo/FoldPanelBar.py
wxPython/demo/GLCanvas.py
wxPython/demo/HyperLinkCtrl.py
wxPython/demo/LayoutConstraints.py
wxPython/demo/MDIWindows.py
wxPython/demo/Main.py
wxPython/demo/Process.py
wxPython/demo/StyledTextCtrl_2.py
wxPython/demo/TablePrint.py
wxPython/demo/Throbber.py
wxPython/demo/XmlResourceHandler.py
wxPython/demo/data/proclamation.txt [new file with mode: 0644]
wxPython/distrib/mac/wxPythonOSX/build
wxPython/distrib/make_installer_inno4.py
wxPython/distrib/makedemo
wxPython/distrib/makedocs
wxPython/distrib/viewdocs.py
wxPython/distrib/wxPythonFull.spec.in
wxPython/docs/CHANGES.txt
wxPython/docs/xml/wxPython-metadata.xml [deleted file]
wxPython/include/wx/wxPython/wxPython_int.h
wxPython/samples/ide/activegrid/tool/AboutDialog.py
wxPython/samples/ide/activegrid/tool/AbstractEditor.py
wxPython/samples/ide/activegrid/tool/CodeEditor.py
wxPython/samples/ide/activegrid/tool/DebuggerService.py
wxPython/samples/ide/activegrid/tool/ExtensionService.py
wxPython/samples/ide/activegrid/tool/FindInDirService.py
wxPython/samples/ide/activegrid/tool/FindService.py
wxPython/samples/ide/activegrid/tool/HtmlEditor.py
wxPython/samples/ide/activegrid/tool/IDE.py
wxPython/samples/ide/activegrid/tool/ImageEditor.py
wxPython/samples/ide/activegrid/tool/MessageService.py
wxPython/samples/ide/activegrid/tool/OutlineService.py
wxPython/samples/ide/activegrid/tool/PHPEditor.py
wxPython/samples/ide/activegrid/tool/PerlEditor.py
wxPython/samples/ide/activegrid/tool/ProjectEditor.py
wxPython/samples/ide/activegrid/tool/PythonEditor.py
wxPython/samples/ide/activegrid/tool/STCTextEditor.py
wxPython/samples/ide/activegrid/tool/SVNService.py
wxPython/samples/ide/activegrid/tool/Service.py
wxPython/samples/ide/activegrid/tool/UICommon.py
wxPython/samples/ide/activegrid/tool/Wizard.py
wxPython/samples/ide/activegrid/tool/XmlEditor.py
wxPython/samples/ide/activegrid/tool/project.py [new file with mode: 0644]
wxPython/samples/ide/activegrid/util/__init__.py
wxPython/samples/ide/activegrid/util/aglogging.py
wxPython/samples/ide/activegrid/util/appdirs.py [new file with mode: 0644]
wxPython/samples/ide/activegrid/util/fileutils.py [new file with mode: 0644]
wxPython/samples/ide/activegrid/util/lang.py
wxPython/samples/ide/activegrid/util/objutils.py
wxPython/samples/ide/activegrid/util/strutils.py [new file with mode: 0644]
wxPython/samples/ide/activegrid/util/sysutils.py [new file with mode: 0644]
wxPython/samples/ide/activegrid/util/xmlmarshaller.py
wxPython/samples/ide/activegrid/util/xmlprettyprinter.py
wxPython/samples/ide/activegrid/util/xmlutils.py
wxPython/samples/pydocview/PyDocViewDemo.py
wxPython/setup.py
wxPython/src/__core_rename.i
wxPython/src/_bitmap.i
wxPython/src/_choice.i
wxPython/src/_clipbrd.i
wxPython/src/_combobox.i
wxPython/src/_core_api.i
wxPython/src/_dataobj.i
wxPython/src/_datetime.i
wxPython/src/_defs.i
wxPython/src/_event.i
wxPython/src/_font.i
wxPython/src/_functions.i
wxPython/src/_image.i
wxPython/src/_listctrl.i
wxPython/src/_sizers.i
wxPython/src/_statctrls.i
wxPython/src/_window.i
wxPython/src/_xmlres.i
wxPython/src/helpers.cpp
wxPython/src/media.i
wxPython/wx/lib/calendar.py
wxPython/wx/lib/docview.py
wxPython/wx/lib/filebrowsebutton.py
wxPython/wx/lib/foldpanelbar.py
wxPython/wx/lib/hyperlink.py
wxPython/wx/lib/masked/maskededit.py
wxPython/wx/lib/masked/numctrl.py
wxPython/wx/lib/mixins/grid.py
wxPython/wx/lib/ogl/_basic.py
wxPython/wx/lib/printout.py
wxPython/wx/lib/pydocview.py
wxPython/wx/lib/throbber.py
wxPython/wx/py/CHANGES.txt
wxPython/wx/py/PyCrust.py
wxPython/wx/py/PyShell.py
wxPython/wx/py/crust.py
wxPython/wx/py/editor.py
wxPython/wx/py/editwindow.py
wxPython/wx/py/filling.py
wxPython/wx/py/frame.py
wxPython/wx/py/interpreter.py
wxPython/wx/py/shell.py
wxPython/wx/py/version.py
wxPython/wxPython/_core.py

index 27ce149bf6990c53863cc0a74f4779c7c9d29c0d..aaa18d4928af8fee7364c3952b96df43330ca149 100644 (file)
@@ -147,6 +147,15 @@ WX_CONFIG = None   # Usually you shouldn't need to touch this, but you can set
                    # version, port, etc. and it will be looked for on the
                    # default $PATH.
 
+SYS_WX_CONFIG = None # When installing an in tree build, setup.py uses wx-config
+                     # for two different purposes.  First, to determine the prefix
+                    # where files will be installed, and secondly, to initialise
+                    # build_options.py with the correct options for it.
+                    # WX_CONFIG is used for the first task.  SYS_WX_CONFIG may
+                    # be set independently, to the value that should appear in
+                    # build_options.py, if it is different to that.  The default
+                    # is to use the value of WX_CONFIG.
+
 WXPORT = 'gtk2'    # On Linux/Unix there are several ports of wxWidgets available.
                    # Setting this value lets you select which will be used for
                    # the wxPython build.  Possibilites are 'gtk', 'gtk2' and
@@ -255,8 +264,8 @@ for flag in [ 'BUILD_ACTIVEX', 'BUILD_ANIMATE', 'BUILD_DLLWIDGET',
                 sys.argv[x] = ''
 
 # String options
-for option in ['WX_CONFIG', 'WXDLLVER', 'BUILD_BASE', 'WXPORT', 'SWIG',
-               'CONTRIBS_INC', 'WXPY_SRC', 'FLAVOUR', 
+for option in ['WX_CONFIG', 'SYS_WX_CONFIG', 'WXDLLVER', 'BUILD_BASE',
+               'WXPORT', 'SWIG', 'CONTRIBS_INC', 'WXPY_SRC', 'FLAVOUR', 
                ]:
     for x in range(len(sys.argv)):
         if sys.argv[x].find(option) == 0:
@@ -272,6 +281,9 @@ sys.argv = filter(None, sys.argv)
 # build options file
 #----------------------------------------------------------------------
 
+if SYS_WX_CONFIG is None:
+    SYS_WX_CONFIG = WX_CONFIG
+
 build_options_template = """
 UNICODE=%d
 UNDEF_NDEBUG=%d
@@ -284,7 +296,7 @@ MONOLITHIC=%d
 FINAL=%d
 HYBRID=%d
 """ % (UNICODE, UNDEF_NDEBUG, INSTALL_MULTIVERSION, FLAVOUR, EP_ADD_OPTS,
-       WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID)
+       SYS_WX_CONFIG, WXPORT, MONOLITHIC, FINAL, HYBRID)
 
 try: 
     from build_options import *
index 8edea6b5ee10d6e805a223be493db3826ced27cc..f1d526fbc8982518140eed7d12fdaa0924d50926 100644 (file)
@@ -29,10 +29,16 @@ class TestPanel(wx.Panel):
             mask = wx.Mask(bmp, wx.BLUE)
 
         bmp.SetMask(mask)
-        b = wx.BitmapButton(self, 30, bmp, (20, 20),
+        b = wx.BitmapButton(self, -1, bmp, (20, 20),
                        (bmp.GetWidth()+10, bmp.GetHeight()+10))
         b.SetToolTipString("This is a bitmap button.")
         self.Bind(wx.EVT_BUTTON, self.OnClick, b)
+
+        b = wx.BitmapButton(self, -1, bmp, (20, 120),
+                       (bmp.GetWidth()+10, bmp.GetHeight()+10),
+                        style = wx.NO_BORDER)
+        b.SetToolTipString("This is a bitmap button with \nwx.NO_BORDER style.")
+        self.Bind(wx.EVT_BUTTON, self.OnClick, b)
         
 
     def OnClick(self, event):
index 369c245769672edbff9eddf47afdbefa329dfeb9..2af110a9f8eb81d9b63fd429f0acf1c64cc43d07 100644 (file)
@@ -27,7 +27,8 @@ class TestPanel(wx.Panel):
             self, -1, size=(450, -1), changeCallback = self.dbbCallback
             )
 
-        self.fbbh.SetHistory(['You', 'can', 'put', 'some', 'filenames', 'here'])
+        self.fbbh.callCallback = False
+        self.fbbh.SetHistory(['You', 'can', 'put', 'some', 'filenames', 'here'], 4)
 
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(self.fbb, 0, wx.ALL, 5)
@@ -45,6 +46,8 @@ class TestPanel(wx.Panel):
     def fbbhCallback(self, evt):
         if hasattr(self, 'fbbh'):
             value = evt.GetString()
+            if not value:
+                return
             self.log.write('FileBrowseButtonWithHistory: %s\n' % value)
             history = self.fbbh.GetHistory()
             if value not in history:
index 9664b06084ecda7d6384ab1ebad1d239ddfe3086..cb4725d650c4e8e55f024405ab9098a896486885 100644 (file)
@@ -344,6 +344,10 @@ class Extended(wx.Frame):
         # or normal
         
         if event.IsChecked():
+            self.GetMenuBar().Check(self._singlestyle, False)
+            self.GetMenuBar().Check(self._exclusivestyle, False)
+            self._flags = self._flags & ~fpb.FPB_SINGLE_FOLD
+            self._flags = self._flags & ~fpb.FPB_EXCLUSIVE_FOLD
             self._flags = self._flags | fpb.FPB_COLLAPSE_TO_BOTTOM
         else:
             self._flags = self._flags & ~fpb.FPB_COLLAPSE_TO_BOTTOM
@@ -352,13 +356,15 @@ class Extended(wx.Frame):
 
 
     def OnCreateNormalStyle(self, event):
-
+        
         # recreate with style where only one panel at the time is
         # allowed to be opened
-        
-        # TODO: Not yet implemented even in the C++ class!!!!
 
         if event.IsChecked():
+            self.GetMenuBar().Check(self._bottomstyle, False)
+            self.GetMenuBar().Check(self._exclusivestyle, False)
+            self._flags = self._flags & ~fpb.FPB_EXCLUSIVE_FOLD
+            self._flags = self._flags & ~fpb.FPB_COLLAPSE_TO_BOTTOM
             self._flags = self._flags | fpb.FPB_SINGLE_FOLD
         else:
             self._flags = self._flags & ~fpb.FPB_SINGLE_FOLD
@@ -366,6 +372,23 @@ class Extended(wx.Frame):
         self.ReCreateFoldPanel(self._flags)
 
 
+    def OnCreateExclusiveStyle(self, event):
+
+        # recreate with style where only one panel at the time is
+        # allowed to be opened and the others are collapsed to bottom
+
+        if event.IsChecked():
+            self.GetMenuBar().Check(self._singlestyle, False)
+            self.GetMenuBar().Check(self._bottomstyle, False)
+            self._flags = self._flags & ~fpb.FPB_SINGLE_FOLD
+            self._flags = self._flags & ~fpb.FPB_COLLAPSE_TO_BOTTOM
+            self._flags = self._flags | fpb.FPB_EXCLUSIVE_FOLD
+        else:
+            self._flags = self._flags & ~fpb.FPB_EXCLUSIVE_FOLD
+
+        self.ReCreateFoldPanel(self._flags)
+        
+
     def OnCollapseMe(self, event):
 
         for i in range(0, self._pnl.GetCount()):
@@ -487,8 +510,9 @@ class Extended(wx.Frame):
 
         FPBTEST_QUIT = wx.NewId()
         FPBTEST_REFRESH = wx.NewId()
-        FPB_BOTTOM_STICK = wx.NewId()
+        FPB_BOTTOM_FOLD = wx.NewId()
         FPB_SINGLE_FOLD = wx.NewId()
+        FPB_EXCLUSIVE_FOLD = wx.NewId()
         FPBTEST_TOGGLE_WINDOW = wx.NewId()
         FPBTEST_ABOUT = wx.NewId()
         
@@ -504,10 +528,13 @@ class Extended(wx.Frame):
         # make fold panel menu
         
         fpb_menu = wx.Menu()
-        fpb_menu.AppendCheckItem(FPB_BOTTOM_STICK, "Create with &fpb.FPB_COLLAPSE_TO_BOTTOM")
+        fpb_menu.AppendCheckItem(FPB_BOTTOM_FOLD, "Create with &fpb.FPB_COLLAPSE_TO_BOTTOM")
         
-        # Not Yet Implemented In The C++ class!!!
-        # fpb_menu.AppendCheckItem(FPB_SINGLE_FOLD, _T("Create with &FPB_SINGLE_FOLD"))
+        # Now Implemented!
+        fpb_menu.AppendCheckItem(FPB_SINGLE_FOLD, "Create with &fpb.FPB_SINGLE_FOLD")
+
+        # Now Implemented!
+        fpb_menu.AppendCheckItem(FPB_EXCLUSIVE_FOLD, "Create with &fpb.FPB_EXCLUSIVE_FOLD")        
 
         fpb_menu.AppendSeparator()
         fpb_menu.Append(FPBTEST_TOGGLE_WINDOW, "&Toggle FoldPanelBar")
@@ -528,8 +555,13 @@ class Extended(wx.Frame):
         self.Bind(wx.EVT_MENU, self.OnAbout, id=FPBTEST_ABOUT)
         self.Bind(wx.EVT_MENU, self.OnQuit, id=FPBTEST_QUIT)
         self.Bind(wx.EVT_MENU, self.OnToggleWindow, id=FPBTEST_TOGGLE_WINDOW)
-        self.Bind(wx.EVT_MENU, self.OnCreateBottomStyle, id=FPB_BOTTOM_STICK)
+        self.Bind(wx.EVT_MENU, self.OnCreateBottomStyle, id=FPB_BOTTOM_FOLD)
         self.Bind(wx.EVT_MENU, self.OnCreateNormalStyle, id=FPB_SINGLE_FOLD)
+        self.Bind(wx.EVT_MENU, self.OnCreateExclusiveStyle, id=FPB_EXCLUSIVE_FOLD)
+
+        self._bottomstyle = FPB_BOTTOM_FOLD
+        self._singlestyle = FPB_SINGLE_FOLD
+        self._exclusivestyle = FPB_EXCLUSIVE_FOLD
 
         return menu_bar
 
index 5601305da895b36c9931ef5343a157f967ed1d0c..89b984df694b15fa93532faa945fed7bda6cd672 100644 (file)
@@ -80,6 +80,7 @@ class MyCanvasBase(glcanvas.GLCanvas):
         # initial mouse position
         self.lastx = self.x = 30
         self.lasty = self.y = 30
+        self.size = None
         self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
         self.Bind(wx.EVT_SIZE, self.OnSize)
         self.Bind(wx.EVT_PAINT, self.OnPaint)
@@ -93,7 +94,7 @@ class MyCanvasBase(glcanvas.GLCanvas):
 
 
     def OnSize(self, event):
-        size = self.GetClientSize()
+        size = self.size = self.GetClientSize()
         if self.GetContext():
             self.SetCurrent()
             glViewport(0, 0, size.width, size.height)
@@ -111,6 +112,7 @@ class MyCanvasBase(glcanvas.GLCanvas):
 
     def OnMouseDown(self, evt):
         self.CaptureMouse()
+        self.x, self.y = self.lastx, self.lasty = evt.GetPosition()
 
 
     def OnMouseUp(self, evt):
@@ -119,7 +121,7 @@ class MyCanvasBase(glcanvas.GLCanvas):
 
     def OnMouseMotion(self, evt):
         if evt.Dragging() and evt.LeftIsDown():
-            self.x, self.y = self.lastx, self.lasty
+            self.lastx, self.lasty = self.x, self.y
             self.x, self.y = evt.GetPosition()
             self.Refresh(False)
 
@@ -129,25 +131,25 @@ class MyCanvasBase(glcanvas.GLCanvas):
 class CubeCanvas(MyCanvasBase):
     def InitGL(self):
         # set viewing projection
-        glMatrixMode(GL_PROJECTION);
-        glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0);
+        glMatrixMode(GL_PROJECTION)
+        glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)
 
         # position viewer
-        glMatrixMode(GL_MODELVIEW);
-        glTranslatef(0.0, 0.0, -2.0);
+        glMatrixMode(GL_MODELVIEW)
+        glTranslatef(0.0, 0.0, -2.0)
 
         # position object
-        glRotatef(self.y, 1.0, 0.0, 0.0);
-        glRotatef(self.x, 0.0, 1.0, 0.0);
+        glRotatef(self.y, 1.0, 0.0, 0.0)
+        glRotatef(self.x, 0.0, 1.0, 0.0)
 
-        glEnable(GL_DEPTH_TEST);
-        glEnable(GL_LIGHTING);
-        glEnable(GL_LIGHT0);
+        glEnable(GL_DEPTH_TEST)
+        glEnable(GL_LIGHTING)
+        glEnable(GL_LIGHT0)
 
 
     def OnDraw(self):
         # clear color and depth buffers
-        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
 
         # draw six faces of a cube
         glBegin(GL_QUADS)
@@ -188,8 +190,15 @@ class CubeCanvas(MyCanvasBase):
         glVertex3f(-0.5, 0.5,-0.5)
         glEnd()
 
-        glRotatef((self.lasty - self.y)/100., 1.0, 0.0, 0.0);
-        glRotatef((self.lastx - self.x)/100., 0.0, 1.0, 0.0);
+        if self.size is None:
+            self.size = self.GetClientSize()
+        w, h = self.size
+        w = max(w, 1.0)
+        h = max(h, 1.0)
+        xScale = 180.0 / w
+        yScale = 180.0 / h
+        glRotatef((self.y - self.lasty) * yScale, 1.0, 0.0, 0.0);
+        glRotatef((self.x - self.lastx) * xScale, 0.0, 1.0, 0.0);
 
         self.SwapBuffers()
 
@@ -199,9 +208,9 @@ class CubeCanvas(MyCanvasBase):
 
 class ConeCanvas(MyCanvasBase):
     def InitGL( self ):
-        glMatrixMode(GL_PROJECTION);
+        glMatrixMode(GL_PROJECTION)
         # camera frustrum setup
-        glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0);
+        glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)
         glMaterial(GL_FRONT, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0])
         glMaterial(GL_FRONT, GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0])
         glMaterial(GL_FRONT, GL_SPECULAR, [1.0, 0.0, 1.0, 1.0])
@@ -209,7 +218,7 @@ class ConeCanvas(MyCanvasBase):
         glLight(GL_LIGHT0, GL_AMBIENT, [0.0, 1.0, 0.0, 1.0])
         glLight(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0])
         glLight(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0])
-        glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0]);
+        glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0])
         glLightModel(GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0])
         glEnable(GL_LIGHTING)
         glEnable(GL_LIGHT0)
@@ -217,25 +226,28 @@ class ConeCanvas(MyCanvasBase):
         glEnable(GL_DEPTH_TEST)
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
         # position viewer
-        glMatrixMode(GL_MODELVIEW);
+        glMatrixMode(GL_MODELVIEW)
+        # position viewer
+        glTranslatef(0.0, 0.0, -2.0);
+
 
 
     def OnDraw(self):
         # clear color and depth buffers
-        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
         # use a fresh transformation matrix
         glPushMatrix()
         # position object
-        glTranslate(0.0, 0.0, -2.0);
-        glRotate(30.0, 1.0, 0.0, 0.0);
-        glRotate(30.0, 0.0, 1.0, 0.0);
+        #glTranslate(0.0, 0.0, -2.0)
+        glRotate(30.0, 1.0, 0.0, 0.0)
+        glRotate(30.0, 0.0, 1.0, 0.0)
 
         glTranslate(0, -1, 0)
         glRotate(250, 1, 0, 0)
         glutSolidCone(0.5, 1, 30, 5)
         glPopMatrix()
-        glRotatef((self.lasty - self.y)/100., 0.0, 0.0, 1.0);
-        glRotatef(0.0, (self.lastx - self.x)/100., 1.0, 0.0);
+        glRotatef((self.y - self.lasty), 0.0, 0.0, 1.0);
+        glRotatef((self.x - self.lastx), 1.0, 0.0, 0.0);
         # push into visible buffer
         self.SwapBuffers()
 
index 39866209608582971e829a326d6a5300650410cb..601409eaf34ae0db18add9da477dd46679e5ec1a 100644 (file)
@@ -89,7 +89,7 @@ class TestPanel(wx.Panel):
         
         
     def OnRightLink(self, event):
-        pos = event.GetPosition()
+        pos = self._hyper3.GetPosition() + event.GetPosition()
         menuPopUp = wx.Menu("Having a nice day?")
         ID_MENU_YES = wx.NewId()
         ID_MENU_NO  = wx.NewId()
index abd5e1a8b2c624e471576095059cfe6110d51caa..3484fe5dc7e9ebfbd588ee383bd4174f66113ddc 100644 (file)
@@ -56,7 +56,7 @@ class TestLayoutConstraints(wx.Panel):
         lc.centreY.SameAs   (self.panelA, wx.CentreY)
         lc.height.AsIs      ()
         lc.width.PercentOf  (self.panelA, wx.Width, 50)
-        b.SetConstraints(lc);
+        b.SetConstraints(lc)
 
         b = wx.Button(self.panelB, 100, ' Panel B ')
         lc = wx.LayoutConstraints()
@@ -64,7 +64,7 @@ class TestLayoutConstraints(wx.Panel):
         lc.right.SameAs     (self.panelB, wx.Right, 4)
         lc.height.AsIs      ()
         lc.width.AsIs       ()
-        b.SetConstraints(lc);
+        b.SetConstraints(lc)
 
         self.panelD = wx.Window(self.panelC, -1, style=wx.SIMPLE_BORDER)
         self.panelD.SetBackgroundColour(wx.GREEN)
@@ -78,14 +78,14 @@ class TestLayoutConstraints(wx.Panel):
         lc.left.RightOf     (self.panelD)
         lc.height.AsIs      ()
         lc.width.AsIs       ()
-        b.SetConstraints(lc);
+        b.SetConstraints(lc)
 
         lc = wx.LayoutConstraints()
         lc.bottom.PercentOf (self.panelC, wx.Height, 50)
         lc.right.PercentOf  (self.panelC, wx.Width, 50)
         lc.height.SameAs    (b, wx.Height)
         lc.width.SameAs     (b, wx.Width)
-        self.panelD.SetConstraints(lc);
+        self.panelD.SetConstraints(lc)
 
 
     def OnButton(self, event):
index 8e47f24c02b8b4d93d6f38f79504ab4a1d6a1b3a..521c14cc66551322a683f6c43385eb3adf78c199 100644 (file)
@@ -1,8 +1,7 @@
 
 import  wx
-
-import  MDIDemo
-import  MDISashDemo
+import os
+import sys
 
 #----------------------------------------------------------------------
 
@@ -25,14 +24,14 @@ class TestPanel(wx.Panel):
         self.SetSizer(box)
 
 
+    # These are spawned as new processes because on Mac there can be
+    # some problems related to having regular frames and MDI frames in
+    # the same app.
     def ShowMDIDemo(self, evt):
-        frame = MDIDemo.MyParentFrame()
-        frame.Show()
+        os.spawnl(os.P_NOWAIT, sys.executable, sys.executable, "MDIDemo.py")
 
     def ShowMDISashDemo(self, evt):
-        frame = MDISashDemo.MyParentFrame()
-        frame.Show()
-
+        os.spawnl(os.P_NOWAIT, sys.executable, sys.executable, "MDISashDemo.py")
 
 
 #----------------------------------------------------------------------
index 152a858a44646e4edd3231332691fc6c0aeb285a..6e7e0f3cb3267e16ec7bd477a481c01c4d2ea10c 100644 (file)
@@ -51,6 +51,7 @@ _treeList = [
         'GIFAnimationCtrl',
         'HyperLinkCtrl',
         'MultiSplitterWindow',
+        'Throbber',
         ]),
 
     # managed windows == things with a (optional) caption you can close
@@ -803,7 +804,8 @@ class DemoModules:
     def LoadDict(self, modID):
         if self.name != __name__:
             source = self.modules[modID][1]
-            description = self.modules[modID][3]
+            #description = self.modules[modID][3]
+            description = self.modules[modID][2]
 
             try:
                 self.modules[modID][0] = {}
@@ -1211,6 +1213,7 @@ class wxPythonDemo(wx.Frame):
         self.SetMenuBar(self.mainmenu)
 
         self.finddata = wx.FindReplaceData()
+        self.finddata.SetFlags(wx.FR_DOWN)
 
         if 0:
             # This is another way to set Accelerators, in addition to
@@ -1528,9 +1531,7 @@ class wxPythonDemo(wx.Frame):
         
         self.nb.SetSelection(1)
         self.finddlg = wx.FindReplaceDialog(self, self.finddata, "Find",
-                        wx.FR_NOUPDOWN |
-                        wx.FR_NOMATCHCASE |
-                        wx.FR_NOWHOLEWORD)
+                        wx.FR_NOMATCHCASE | wx.FR_NOWHOLEWORD)
         self.finddlg.Show(True)
 
 
@@ -1543,13 +1544,22 @@ class wxPythonDemo(wx.Frame):
         self.nb.SetSelection(1)
         end = editor.GetLastPosition()
         textstring = editor.GetRange(0, end).lower()
-        start = editor.GetSelection()[1]
         findstring = self.finddata.GetFindString().lower()
-        loc = textstring.find(findstring, start)
+        backward = not (self.finddata.GetFlags() & wx.FR_DOWN)
+        if backward:
+            start = editor.GetSelection()[0]
+            loc = textstring.rfind(findstring, 0, start)
+        else:
+            start = editor.GetSelection()[1]
+            loc = textstring.find(findstring, start)
         if loc == -1 and start != 0:
             # string not found, start at beginning
-            start = 0
-            loc = textstring.find(findstring, start)
+            if backward:
+                start = end
+                loc = textstring.rfind(findstring, 0, start)
+            else:
+                start = 0
+                loc = textstring.find(findstring, start)
         if loc == -1:
             dlg = wx.MessageDialog(self, 'Find String Not Found',
                           'Find String Not Found in Demo File',
index beea93893c614e54e0bbfbeba75169d793ec59e8..ad6827cc3163d4c1bf62d5143a576b184dffc7b3 100644 (file)
@@ -22,7 +22,8 @@ class TestPanel(wx.Panel):
         self.cmd = wx.TextCtrl(self, -1, 'python -u data/echo.py')
         self.exBtn = wx.Button(self, -1, 'Execute')
 
-        self.out = wx.TextCtrl(self, -1, '', style=wx.TE_MULTILINE|wx.TE_READONLY)
+        self.out = wx.TextCtrl(self, -1, '',
+                               style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH2)
 
         self.inp = wx.TextCtrl(self, -1, '', style=wx.TE_PROCESS_ENTER)
         self.sndBtn = wx.Button(self, -1, 'Send')
index 589407b7ccc4a71b6df0d7cbd62db14d60991328..788f815a3456ce0f7d4581b9b85b3a16982a82c2 100644 (file)
@@ -75,33 +75,33 @@ class PythonSTC(stc.StyledTextCtrl):
 
         if self.fold_symbols == 0:
             # Arrow pointing right for contracted folders, arrow pointing down for expanded
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_ARROWDOWN, "black", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_ARROW, "black", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_EMPTY, "black", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_EMPTY, "black", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_EMPTY,     "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY,     "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY,     "white", "black");
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_ARROWDOWN, "black", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_ARROW, "black", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_EMPTY, "black", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_EMPTY, "black", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_EMPTY,     "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY,     "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY,     "white", "black")
             
         elif self.fold_symbols == 1:
             # Plus for contracted folders, minus for expanded
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_MINUS, "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_PLUS,  "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_EMPTY, "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_EMPTY, "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_EMPTY, "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY, "white", "black");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY, "white", "black");
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_MINUS, "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_PLUS,  "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_EMPTY, "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_EMPTY, "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_EMPTY, "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY, "white", "black")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY, "white", "black")
 
         elif self.fold_symbols == 2:
             # Like a flattened tree control using circular headers and curved joins
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_CIRCLEMINUS,          "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_CIRCLEPLUS,           "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_VLINE,                "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_LCORNERCURVE,         "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_CIRCLEPLUSCONNECTED,  "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_CIRCLEMINUSCONNECTED, "white", "#404040");
-            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_TCORNERCURVE,         "white", "#404040");
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_CIRCLEMINUS,          "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_CIRCLEPLUS,           "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_VLINE,                "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_LCORNERCURVE,         "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_CIRCLEPLUSCONNECTED,  "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_CIRCLEMINUSCONNECTED, "white", "#404040")
+            self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_TCORNERCURVE,         "white", "#404040")
 
         elif self.fold_symbols == 3:
             # Like a flattened tree control using square headers
@@ -286,7 +286,7 @@ class PythonSTC(stc.StyledTextCtrl):
         for lineNum in range(lineCount):
             if self.GetFoldLevel(lineNum) & stc.STC_FOLDLEVELHEADERFLAG:
                 expanding = not self.GetFoldExpanded(lineNum)
-                break;
+                break
 
         lineNum = 0
 
@@ -342,7 +342,7 @@ class PythonSTC(stc.StyledTextCtrl):
                     else:
                         line = self.Expand(line, False, force, visLevels-1)
             else:
-                line = line + 1;
+                line = line + 1
 
         return line
 
index ce40f69a51e3d37eb81c5a7a5e87187c6ff917b8..73818dda8a170186d384ac4b13e352df453a399a 100644 (file)
@@ -1,6 +1,5 @@
 
 import  os
-
 import  wx
 import  wx.lib.printout as  printout
 
@@ -9,6 +8,7 @@ import  wx.lib.printout as  printout
 buttonDefs = {
     814 : ('PreviewWide',      'Preview print of a wide table'),
     815 : ('PreviewNarrow',   'Preview print of a narrow table with color highlights'),
+    816 : ('PreviewText',    'Preview print of a text file'),
     818 : ('OnPreviewMatrix',   'Preview print of a narrow column grid without a table header'),
     817 : ('PreviewLine',   'Preview print to demonstrate the use of line breaks'),
     819 : ('PrintWide', 'Direct print (no preview) of a wide table'),
@@ -150,6 +150,17 @@ class TablePanel(wx.Panel):
         prt.SetFooter()
         prt.Preview()
 
+    def PreviewText(self):
+        prt = printout.PrintTable(self.frame)
+        prt.SetHeader("PROCLAMATION")
+        file = open('data/proclamation.txt')
+        data = []
+        for txt in file:
+            data.append(txt.strip())
+        file.close()
+        prt.data = data
+        prt.Preview()
+
     def PrintWide(self):
         self.ReadData()
         prt = printout.PrintTable(self.frame)
index 10b91c667ebee4ddde86d16cb870e4bf063e54e5..45fa4a3638a2e7dd0479b87b45a876e728886cff 100644 (file)
@@ -69,6 +69,13 @@ class TestPanel(wx.Panel):
             pointSize = 8, family = wx.DEFAULT, style = wx.NORMAL, weight = wx.BOLD
             ))
 
+        self.customThrobber = \
+            throb.Throbber(self, -1, images, size=(36, 36),
+                           frameDelay = 0.1,
+                           rest = 4,
+                           sequence = [ 1, 5, 2, 7, 3, 6, 4, 4, 4, 4, 7, 2, 2, 0 ]
+                           )
+                                                
         box = wx.BoxSizer(wx.VERTICAL)
         sizer = wx.GridBagSizer()
         box.Add(sizer, 1, wx.EXPAND|wx.ALL, 5)
@@ -90,6 +97,18 @@ class TestPanel(wx.Panel):
 
             row += 1
 
+        # Add custom throbber to sizer.
+        row += 2
+        sizer.Add(
+            self.customThrobber, (row, 0), (1, 1), 
+            flag = wx.ALIGN_CENTER|wx.ALL, border=2
+            )
+
+        sizer.Add(
+            wx.StaticText(self, -1, 'with custom & manual sequences'), 
+            (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT
+            )
+
         # start and stop buttons
         startButton = wx.Button(self, -1, "Start")
         self.Bind(wx.EVT_BUTTON, self.OnStartAnimation, startButton)
@@ -104,9 +123,54 @@ class TestPanel(wx.Panel):
             ])
 
         sizer.Add(
-            buttonBox, (len(self.throbbers) + 3, 0), (1, 3), flag = wx.ALIGN_CENTER
+            buttonBox, (len(self.throbbers) + 2, 0), (1, 3), flag = wx.ALIGN_CENTER
             )
 
+        # Buttoms for the custom throbber.
+        nextButton = wx.Button(self, -1, "Next")
+        self.Bind(wx.EVT_BUTTON, self.OnNext, nextButton)
+
+        prevButton = wx.Button(self, -1, "Previous")
+        self.Bind(wx.EVT_BUTTON, self.OnPrevious, prevButton)
+
+        incButton = wx.Button(self, -1, "Increment")
+        self.Bind(wx.EVT_BUTTON, self.OnIncrement, incButton)
+
+        decButton = wx.Button(self, -1, "Decrement")
+        self.Bind(wx.EVT_BUTTON, self.OnDecrement, decButton)
+
+        revButton = wx.Button(self, -1, "Reverse")
+        self.Bind(wx.EVT_BUTTON, self.OnReverse, revButton)
+
+        restButton = wx.Button(self, -1, "Rest")
+        self.Bind(wx.EVT_BUTTON, self.OnRest, restButton)
+
+        startButton = wx.Button(self, -1, "Start")
+        self.Bind(wx.EVT_BUTTON, self.OnStart, startButton)
+
+        stopButton = wx.Button(self, -1, "Stop")
+        self.Bind(wx.EVT_BUTTON, self.OnStop, stopButton)
+
+        customBox1 = wx.BoxSizer(wx.HORIZONTAL)
+        customBox1.AddMany([
+            (nextButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (prevButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (incButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (decButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (revButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            ])
+
+        customBox2 = wx.BoxSizer(wx.HORIZONTAL)
+        customBox2.AddMany([
+            (restButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (startButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            (stopButton, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5),
+            ])
+
+        sizer.Add( customBox1, (len(self.throbbers) + 5, 0), (1, 3), flag = wx.ALIGN_CENTER )
+        sizer.Add( customBox2, (len(self.throbbers) + 6, 0), (1, 3), flag = wx.ALIGN_CENTER )
+
+        # Layout.
         self.SetSizer(box)
         self.SetAutoLayout(True)
         self.Layout()
@@ -130,6 +194,30 @@ class TestPanel(wx.Panel):
         for t in self.throbbers.keys():
             self.throbbers[t]['throbber'].Rest()
 
+    def OnNext(self, event):
+        self.customThrobber.Next()
+
+    def OnPrevious(self, event):
+        self.customThrobber.Previous()
+
+    def OnIncrement(self, event):
+        self.customThrobber.Increment()
+
+    def OnDecrement(self, event):
+        self.customThrobber.Decrement()
+
+    def OnReverse(self, event):
+        self.customThrobber.Reverse()
+
+    def OnRest(self, event):
+        self.customThrobber.Rest()
+
+    def OnStart(self, event):
+        self.customThrobber.Start()
+
+    def OnStop(self, event):
+        self.customThrobber.Stop()
+
     def ShutdownDemo(self):
         for t in self.throbbers.keys():
             self.throbbers[t]['throbber'].Rest()
index 201d06d85096d65eb1ddbbcfd99553d313124e76..15770de475fe29612775675047092e895e118bd8 100644 (file)
@@ -71,11 +71,11 @@ class MyCustomPanelXmlHandler(xrc.XmlResourceHandler):
     def __init__(self):
         xrc.XmlResourceHandler.__init__(self)
         # Specify the styles recognized by objects of this type
-        self.AddStyle("wxNO_3D", wx.NO_3D);
-        self.AddStyle("wxTAB_TRAVERSAL", wx.TAB_TRAVERSAL);
-        self.AddStyle("wxWS_EX_VALIDATE_RECURSIVELY", wx.WS_EX_VALIDATE_RECURSIVELY);
-        self.AddStyle("wxCLIP_CHILDREN", wx.CLIP_CHILDREN);
-        self.AddWindowStyles();
+        self.AddStyle("wxNO_3D", wx.NO_3D)
+        self.AddStyle("wxTAB_TRAVERSAL", wx.TAB_TRAVERSAL)
+        self.AddStyle("wxWS_EX_VALIDATE_RECURSIVELY", wx.WS_EX_VALIDATE_RECURSIVELY)
+        self.AddStyle("wxCLIP_CHILDREN", wx.CLIP_CHILDREN)
+        self.AddWindowStyles()
 
     # This method and the next one are required for XmlResourceHandlers
     def CanHandle(self, node):
diff --git a/wxPython/demo/data/proclamation.txt b/wxPython/demo/data/proclamation.txt
new file mode 100644 (file)
index 0000000..5d305e4
--- /dev/null
@@ -0,0 +1,115 @@
+EMANCIPATION PROCLAMATION:
+By the President of the United States of America:
+A PROCLAMATION
+
+  Whereas on the 22nd day of September, A.D. 1862, a proclamation 
+was issued by the President of the United States, containing, 
+among other things, the following, to wit:
+
+  "That on the 1st day of January, A.D. 1863, all persons held as 
+slaves within any State or designated part of a State the people 
+whereof shall then be in rebellion against the United States shall 
+be then, thenceforward, and forever free; and the executive 
+government of the United States, including the military and naval 
+authority thereof, will recognize and maintain the freedom of such 
+persons and will do no act or acts to repress such persons, or any 
+of them, in any efforts they may make for their actual freedom.
+
+  "That the executive will on the 1st day of January aforesaid, 
+by proclamation, designate the States and parts of States, if any, 
+in which the people thereof, respectively, shall then be in 
+rebellion against the United States; and the fact that any State 
+or the people thereof shall on that day be in good faith 
+represented in the Congress of the United States by members 
+chosen thereto at elections wherein a majority of the qualified 
+voters of such States shall have participated shall, in the 
+absence of strong countervailing testimony, be deemed conclusive 
+evidence that such State and the people thereof are not then 
+in rebellion against the United States."
+
+  Now, therefore, I, Abraham Lincoln, President of the United 
+States, by virtue of the power in me vested as Commander-In-Chief 
+of the Army and Navy of the United States in time of actual armed 
+rebellion against the authority and government of the United States, 
+and as a fit and necessary war measure for supressing said 
+rebellion, do, on this 1st day of January, A.D. 1863, and in 
+accordance with my purpose so to do, publicly proclaimed for the 
+full period of one hundred days from the first day above mentioned, 
+order and designate as the States and parts of States wherein the 
+people thereof, respectively, are this day in rebellion against 
+the United States the following, to wit:
+
+  Arkansas, Texas, Louisiana (except the parishes of St. Bernard, 
+Palquemines, Jefferson, St. John, St. Charles, St. James, Ascension, 
+Assumption, Terrebone, Lafourche, St. Mary, St. Martin, and Orleans, 
+including the city of New Orleans), Mississippi, Alabama, Florida, 
+Georgia, South Carolina, North Carolina, and Virginia (except the 
+forty-eight counties designated as West Virginia, and also the 
+counties of Berkeley, Accomac, Morthhampton, Elizabeth City, York, 
+Princess Anne, and Norfolk, including the cities of Norfolk and 
+Portsmouth), and which excepted parts are for the present left 
+precisely as if this proclamation were not issued.
+
+  And by virtue of the power and for the purpose aforesaid, I do 
+order and declare that all persons held as slaves within said 
+designated States and parts of States are, and henceforward shall 
+be, free; and that the Executive Government of the United States, 
+including the military and naval authorities thereof, will 
+recognize and maintain the freedom of said persons.
+
+  And I hereby enjoin upon the people so declared to be free to 
+abstain from all violence, unless in necessary self-defence; and 
+I recommend to them that, in all case when allowed, they labor 
+faithfully for reasonable wages.
+
+  And I further declare and make known that such persons of 
+suitable condition will be received into the armed service of 
+the United States to garrison forts, positions, stations, and 
+other places, and to man vessels of all sorts in said service.
+
+  And upon this act, sincerely believed to be an act of justice, 
+warranted by the Constitution upon military necessity, I invoke 
+the considerate judgment of mankind and the gracious favor 
+of Almighty God.
+
+(signed)
+ABRAHAM LINCOLN
+-------------------------------------
+
+On Jan. 1, 1863, U.S. President Abraham Lincoln declared free 
+all slaves residing in territory in rebellion against the federal 
+government. This Emancipation Proclamation actually freed few 
+people. It did not apply to slaves in border states fighting on 
+the Union side; nor did it affect slaves in southern areas already 
+under Union control. Naturally, the states in rebellion did not 
+act on Lincoln's order. But the proclamation did show Americans--
+and the world--that the civil war was now being fought to end slavery.
+
+Lincoln had been reluctant to come to this position. A believer 
+in white supremacy, he initially viewed the war only in terms of 
+preserving the Union. As pressure for abolition mounted in 
+Congress and the country, however, Lincoln became more sympathetic 
+to the idea. On Sept. 22, 1862, he issued a preliminary proclamation 
+announcing that emancipation would become effective on Jan. 1, 1863, 
+in those states still in rebellion. Although the Emancipation 
+Proclamation did not end slavery in America--this was achieved 
+by the passage of the 13TH Amendment to the Constitution on Dec. 
+18, 1865--it did make that accomplishment a basic war goal and 
+a virtual certainty. 
+
+DOUGLAS T. MILLER
+
+Bibliography: Commager, Henry Steele, The Great Proclamation 
+(1960); Donovan, Frank, Mr. Lincoln's Proclamation (1964); 
+Franklin, John Hope, ed., The Emancipation Proclamation (1964). 
+
+-------------------------------------
+
+Prepared by Gerald Murphy (The Cleveland Free-Net - aa300)
+Distributed by the Cybercasting Services Division of the
+  National Public Telecomputing Network (NPTN).
+
+Permission is hereby granted to download, reprint, and/or otherwise
+  redistribute this file, provided appropriate point of origin
+  credit is given to the preparer(s) and the National Public
+  Telecomputing Network.
index 0d7a8153a5e5edca88ff4007947fdb97abf7cb6e..9f715731710d1fd0e9c2f3b7dc1794b26a69b868 100755 (executable)
@@ -419,7 +419,7 @@ EOF
        $INSTALLROOT \
        $RESOURCEDIR
 
-    mv $PKGNAME.pkg $DMGROOT
+    mv $PKGNAME.pkg $DMGROOT/$PKGNAME.pkg
 
     rm $RESOURCEDIR/postflight
     rm $RESOURCEDIR/preflight
@@ -569,7 +569,7 @@ EOF
     if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
        cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
 
-The wxPython-demo tarball was not found when building this disk image!
+The wxPython-$VERSION-demo tarball was not found when building this disk image!
 
 EOF
        cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
index 2b9cc7b2c4349c2592d887f2353b558dae666da0..1078b3331c1cf9c0f91fae52072e52adc6b8c9ac 100755 (executable)
@@ -23,17 +23,11 @@ will be created.
 import sys, os, time
 
 KEEP_TEMPS = 1
-ISCC = r"%s\InnoSetup2Ex\ISCC.exe %s"
+# default InnoSetup installer location
+ISCC = r"C:\progra~1\innose~1\ISCC.exe %s"
 
-# see if we can find Inno Setup 4 and use that if so
-USING_INNO4=False
-try:
-    import _winreg as wreg
-    key = wreg.OpenKey(wreg.HKEY_CURRENT_USER, "Software\Bjornar Henden\ISTool4\Prefs")
-    INNO_FOLDER = wreg.QueryValueEx(key,'InnoFolder')[0] 
-    USING_INNO4=True
-except:
-    pass               
+if os.environ.has_key("INNO4"):
+    ISCC = os.environ["INNO4"]
 
 
 #----------------------------------------------------------------------
@@ -403,7 +397,7 @@ Source: "demo\data\*.mpg";                  DestDir: "{app}\demo\data";
 ;;Source: "demo\dllwidget\makefile.*";        DestDir: "{app}\demo\dllwidget"; 
 
 Source: "licence\*.txt";                    DestDir: "{app}\docs\licence"; 
-Source: "%(WXDIR)s\docs\htmlhelp\wx.chm";   DestDir: "{app}\docs"; 
+;;Source: "%(WXDIR)s\docs\htmlhelp\wx.chm";   DestDir: "{app}\docs"; 
 ;;Source: "%(WXDIR)s\docs\htmlhelp\ogl.chm";  DestDir: "{app}\docs"; 
 Source: "docs\README.txt";                  DestDir: "{app}\docs";  Flags: isreadme; 
 Source: "docs\*.txt";                       DestDir: "{app}\docs"; 
@@ -628,8 +622,7 @@ def main():
     ISSDEMOFILE     = "__wxPythonDemo.iss"
     IFSFILE         = "__wxPython.ifs"
     IFSFILEREF         = "CodeFile = " + IFSFILE
-    if USING_INNO4:
-        IFSFILEREF = ""
+    IFSFILEREF = ""
     UNINSTALL_BATCH = get_batch_files()
     PKGDIR          = open('src/wx.pth').read()
     LOCALE          = build_locale_string(PKGDIR)
@@ -669,18 +662,12 @@ def main():
     global IFS_Template
     global ISS_DocDemo_Template
 
-    if USING_INNO4:
-        ISS_Template = ISS_Template + "\n[Code]\n" + IFS_Template
+    ISS_Template = ISS_Template + "\n[Code]\n" + IFS_Template
 
     f = open(ISSFILE, "w")
     f.write(ISS_Template % vars())
     f.close()
 
-    if not USING_INNO4:
-        f = open(IFSFILE, "w")
-        f.write(IFS_Template % vars())
-        f.close()
-
     f = open(ISSDEMOFILE, "w")
     f.write(ISS_DocDemo_Template % vars())
     f.close()
@@ -688,16 +675,9 @@ def main():
     TOOLS = os.environ['TOOLS']
     if TOOLS.startswith('/cygdrive'):
         TOOLS = r"c:\TOOLS"  # temporary hack until I convert everything over to bash
-    if USING_INNO4:
-        print "Hello world!"
-        ISCC = os.path.join(INNO_FOLDER, "iscc.exe")
-        ISCC = r'"' + ISCC + '" %s'
-        os.system(ISCC % (ISSFILE))
-        #os.system(ISCC % (ISSDEMOFILE))
-    else:
-        print "not found..."
-        os.system(ISCC % (TOOLS, ISSFILE))
-        os.system(ISCC % (TOOLS, ISSDEMOFILE))
+        
+    os.system(ISCC % (ISSFILE))
+    os.system(ISCC % (ISSDEMOFILE))
     
     if not KEEP_TEMPS:
         time.sleep(1)
index 54eb2f85c9fa813be74b039fde8629a02bf749c3..a5c42a978b89cf5d700315e9640d17aee8f02b61 100755 (executable)
@@ -29,7 +29,7 @@ rm -f `find  _distrib_tgz/wxPython-$VERSION -name ".#*"`
 cd _distrib_tgz
 
 tar cvf ../dist/wxPython-demo-$VERSION.tar wxPython-$VERSION
-gzip -9 ../dist/wxPython-demo-$VERSION.tar
+gzip -9 -f ../dist/wxPython-demo-$VERSION.tar
 
 cd ..
 rm -r _distrib_tgz
index fd4d12007b605b04c4889220cdfc59837dfcf934..aee2526c712c80ba68e409d1d67f7bd406e6dd40 100755 (executable)
@@ -9,7 +9,7 @@ fi
 
 
 VERSION=`python -c "import setup;print setup.VERSION"`
-CONTRIBS="ogl gizmos"
+CONTRIBS="gizmos"
 DEST=wxPython-$VERSION/docs
 
 
@@ -57,7 +57,7 @@ done
 popd
 cp ../distrib/viewdocs.py $DEST
 cp ../distrib/README.viewdocs.txt $DEST/README.txt
-cp ../docs/xml/wxPython-metadata.xml $DEST
+##cp ../docs/xml/wxPython-metadata.xml $DEST
 
 rm -f ../dist/wxPython-docs-$VERSION.tar.gz
 tar cvf ../dist/wxPython-docs-$VERSION.tar $DEST
index f909d18af69015da296daff79ee05411f3b7ecc4..01151c1902d1519b94fbca58c9f0687a8b37a8de 100755 (executable)
@@ -22,7 +22,6 @@ if os.access(basePath, os.W_OK):
     args = ['',
         '--cache='+basePath,
         os.path.join(basePath, 'wx.zip'),
-        os.path.join(basePath, 'ogl.zip'),
         ]
 
     # add any other .zip files found
index 898695b763eadc4e55ce3666f29599296b6b80e1..a4566be93e1606a14f4f382049ead5690a23958d 100644 (file)
@@ -118,7 +118,7 @@ Provides:  wxPython
 
 %description -n %{pkgname}%{ver2}-%{port}-%{chartype}
 wxPython is a GUI toolkit for the Python programming language. It
- allows Python programmers to create programs with a robust, highly
+allows Python programmers to create programs with a robust, highly
 functional graphical user interface, simply and easily. It is
 implemented as a Python extension module (native code) that wraps the
 popular wxWidgets cross platform GUI library, which is written in C++.
index c1ea536d53df01da3b482bf03f65c06c51f1584a..4a28c329a95a0a036e23718269ce921c2e4d82d7 100644 (file)
@@ -18,26 +18,28 @@ The following deprecated items have been removed:
 
     * wx.PrintDialogData SetSetupDialog and GetSetupDialog methods
 
+    * wx.FontMapper SetConfig method
 
 
 
 
-2.6.1.1
+
+2.6.2.1
 -------
 
 wxMSW: Fix for bug #1211907, popup menu indenting inconsistent with
-bitmaps. 
+bitmaps.
 
 wxMac: Don't send an event for wx.RadioButton deselections, just the
 selections.  This was done to make it consistent with the other
-platforms. 
+platforms.
 
 wxMSW: Always set flat toolbar style, even under XP with themes: this
 is necessary or separators aren't shown at all.
 
-Fixes for bug #1217872, pydocview.DocService not correctly initialized
+Fixes for bug #1217872, pydocview.DocService not correctly initialized.
 
-Fix for bug #1217874, Error in parameter name in DocManager.CreateView
+Fix for bug #1217874, Error in parameter name in DocManager.CreateView.
 
 Added wrappers for the wx.RendererNative class.
 
@@ -46,7 +48,7 @@ MultiSplitterWindow class.  This class is much like the standard
 wx.SplitterWindow class, except it allows more than one split, so it
 can manage more than two child windows.
 
-Docview and IDE patch from Morag Hua with fix for bug #1217890
+Docview and IDE patch from Morgan Hua with fix for bug #1217890
 "Closing view crashes Python" plus some new features::
 
     New feature added to the IDE is 'Extensions'.  Under
@@ -57,6 +59,173 @@ Docview and IDE patch from Morag Hua with fix for bug #1217890
 
 Some fixes to XRCed to make encoding errors a bit more user friendly.
 
+XRCed changes from Roman Rolinsky:
+
+    * Added new controls (Choicebook, Listbook, StatusBar,
+      DatePicker), and completed style flags. Test window is opened
+      for an available parent control if no specific view
+      defined. Better handling of exceptions (highlighting does not
+      'stick' anymore).
+
+    * Use system clipboard for Copy/Paste.
+
+    * Improved some dialogs (window styles, growable cols). Changed
+      the range for wxSpinCtrl min/max to all integers (default 0/100
+      is not always good).
+
+Updates for wx.lib.foldpanelbar and wx.lib.hyperlink from Andrea
+Gavana.
+
+Fix for Bug #1283496: wxPython TheClipboard class causes problems for
+pychecker.  Ensure the app has been created before initializing
+wx.TheClipboard.
+
+Fix for Bug #1352602: FileBrowseButtonWithHistory can't type in Value.
+
+wxHTML: Added space after list item number.
+
+wx.lib.printout:  Applied patch #1384440.
+
+wxMSW:  Fix for Bug #1293225 Window_FromHWND crashes if parent is
+None.
+
+Fix for Bug #1261669, use a wx.TE_RICH2 style for the Process demo so
+it doesn't fill up too soon.
+
+Applied Patch #1354389: wxPython MenuItem SetBitmaps fix.
+
+Applied Patch #1239456: wxPython wx.DataObject.GetAllFormats fix.
+
+Applied Patch # #1230107 which allows image handlers to be written in
+Python by deriving from wx.PyImageHandler.
+
+Applied patch #1072210: generalize printout.py to allow text printing.
+
+Applied patch #1243907: Give Throbber much more flexibility by
+allowing the user to set the rest image, the direction, the current
+index, custom sequence.  Allows user to manually step through the
+sequence with Next(), Previous(), Increment(), Decrement() &
+SetCurrent(). Very handy if you have multiple throbbers that you want
+to synchronize with a single timer.
+
+Fix for bug #1336711: wx.lib.calendar.CalenDlg can yield incorrect
+result.
+
+Applied patch from Morgan Hua for updates to ActiveGrid code
+(pydocview, ActiveGrid IDE, etc.)
+
+Applied patch #1326241: Supporting "setup.py install --install-headers=path"
+
+Applied patch from Morgan Hua to fix bug #1219423: CommandManager
+should not repeat old commands after a branch.
+
+Applied patch #1238825 adding search backward capabilities to the
+demo.  Modified to use the up/down options in the wx.FindReplaceDialog
+instead of a separate menu item.
+
+Fix for bug #1266745 and #1387725 in the wx.FindReplaceDialog on MSW.
+Actually check we are using MSLU before doing the hack designed to
+workaround a bug in MSLU!
+
+wxMSW: wx.lib.iewin.IEHtmlWindow now properly handles tabbing, return
+and other special keys properly.
+
+Lots of PyCrust enhancments started by Franz Steinaeusler, Adi Sieker,
+and Sebastian Haase, and which in turn were further enhanced, fixed
+tweaked and finished up by me.  The changes include the following:
+
+    * The Autocomplete and Calltip windows can now be opened manually
+      with Ctrl-Space and Ctrl-Shift-Space.
+
+    * In the stand alone PyCrust app the various option settings,
+      window size and position, and etc. are saved and restored at the
+      next run.
+
+    * Added a help dialog bound to the F1 key that shows the key
+      bindings.
+
+    * Added a new text completion function that suggests words from
+      the history.  Bound to Shift-Return.
+
+    * F11 will toggle the maximized state of the frame.
+
+    * switched to Bind() from wx.EVT_*().
+
+    * Display of line numbers can be toggled.
+
+    * F12 toggles a "free edit" mode of the shell buffer.  This mode
+      is useful, for example, if you would like to remove some output
+      or errors or etc. from the buffer before doing a copy/paste.
+      The free edit mode is designated by the use of a red,
+      non-flashing caret.
+
+    * Ctrl-H will fold/unfold (hide/show) the selected lines.
+
+    * General code cleanup and fixes.
+
+    * Use wx.StandardPaths to determine the location of the config
+      files.
+
+    * Use wx.SP_LIVE_UPDATE on crust and filling windows.
+
+    * Extended the saving of the config info and other new features to
+      the PyShell app too.  Additionally, other apps that embed a
+      PyCrust or a PyShell can pass their own wx.Config object and
+      have the Py code save/restore its settings to/from there.
+
+    * All of the classes with config info get an opportunity to
+      save/load their own settings instead of putting all the
+      save/load code in one place that then has to reach all over the
+      place to do anything.
+
+    * Enable editing of the startup python code, which will either be
+      the file pointed to by PYTHONSTARTUP or a file in the config dir
+      if PYTHONSTARTUP is not set in the environment.
+
+    * Added an option to skip the running of the startup code when
+      PyShell or PyCrust starts.
+
+    * PyCrust adds a pp(item) function to the shell's namespace that
+      pretty prints the item in the Display tab of the notebook.
+      Added code to raise that tab when pp() is called.
+
+    * Added an option for whether to insert text for function
+      parameters when popping up the call tip.
+
+    * Added Find and Find-Next functions that use the
+      wx.FindReplaceDialog.
+
+
+Applied patches from Will Sadkin for wx.lib.masked modules:
+
+    * Now ignores kill focus events when being destroyed.
+
+    * Added missing call to set insertion point on changing fields.
+
+    * Modified SetKeyHandler() to accept None as means of removing
+      one.
+
+    * Fixed keyhandler processing for group and decimal character
+      changes.
+
+    * Fixed a problem that prevented input into the integer digit of a
+      integerwidth=1 numctrl, if the current value was 0.
+
+    * Fixed logic involving processing of "_signOk" flag, to remove
+      default sign key handlers if false, so that
+      SetAllowNegative(False) in the NumCtrl works properly.
+
+    * Fixed selection logic for numeric controls so that if
+      selectOnFieldEntry is true, and the integer portion of an
+      integer format control is selected and the sign position is
+      selected, the sign keys will always result in a negative value,
+      rather than toggling the previous sign.
+
+wx.FontMapper.SetConfig is deprecated.  You should instead just set an
+application-wide config object with wx.Config.Set, which wx.FontMapper
+will use by default.
+
+
 
 
 
@@ -92,7 +261,7 @@ wx.TopLevelWindow.ShowFullScreen.
 Applied patch #1213066 correct device names for Joystick in Linux.
 
 wxGTK: Applied patch #1207162 wx.TextCtrl.SetStyle fix for overlapping
-calls. 
+calls.
 
 wx.FileConfig: fixed DeleteEntry to set the dirty flag properly so the
 change will get written at the next flush.
@@ -107,7 +276,7 @@ change will get written at the next flush.
 
 Added wx.BrushFromBitmap to create a stippled brush in a single step.
 Also added missing brysh style flags: wx.STIPPLE_MASK
-wx.STIPPLE_MASK_OPAQUE. 
+wx.STIPPLE_MASK_OPAQUE.
 
 wxMSW: Fix for default control colours when the system text fg colour
 is not black.
@@ -116,7 +285,7 @@ wxGTK: Patch #1171754, It is now possible to have a menu item that
 both has an icon and is a submenu.
 
 wxMSW: Patch #1197009, better refreshes when windows are moved and
-resized. 
+resized.
 
 wxMSW: Patch #1197468.  Keeps track of pending size/position changes
 in case there is more than one adjustment for a window in a single
@@ -177,7 +346,7 @@ wxMSW:  Fix for wrong sash colour of wx.SplitterWindow in the silver
 theme on XP.
 
 Added a wx.xrc.XmlResourceHandler for the Ticker class.  See
-wx/lib/ticker_xrc.py 
+wx/lib/ticker_xrc.py
 
 wxSTC: Fixed CmdKeyAssign key bindings for Ctrl-Backspace.
 
@@ -200,7 +369,7 @@ XP themes.
 
 More updates to the docview library modules and sample apps from the
 ActiveGrid folks.  Their sample IDE is now able to integrate with
-Subversion. 
+Subversion.
 
 wx.grid.Grid:  Ensure that the grid gets the focus when it is
 left-clicked.  Note that if you have custom widgets that handle the
@@ -218,7 +387,7 @@ window itself, not the borders, scrollbars, etc.  (Bug #1204069)
 
 Print framework:  Add more paper sizes and code to fallback to an
 explicit paper size if a known paper size is not found for the
-printer. 
+printer.
 
 wxMac: Applied patch for bug #1206181 Option-key decodes are wrong,
 also applied patch for bug #1205691 Modified Fn keys don't work.
@@ -236,7 +405,7 @@ The default DoGetBestSize is updated to not always return the current
 size if the window has no sizer, children, or minsize set.  Instead
 the current size is set as the minsize.  This solves the occasional
 problem where a sizer may cause a childless panel to grow but never
-shrink. 
+shrink.
 
 wxMSW: When converting a wx.Icon to a bitmap check if the icon has an
 alpha channel and set the bitmap to use it.
@@ -309,7 +478,7 @@ EVT_KEY_UP and EVT_TEXT events from its embedded text control.
 wxMac: Corrected refresh bugs in wxGrid.
 
 XRCed: Updated to version 0.1.5.
-    * Added wxWizard, wxWizardPageSimple (only from pull-down menu). 
+    * Added wxWizard, wxWizardPageSimple (only from pull-down menu).
     * Hide command for test window.
     * Replacing classes works better.
     * Added Locate tool.
@@ -317,7 +486,7 @@ XRCed: Updated to version 0.1.5.
 
 
 
-2.5.5.1    
+2.5.5.1
 -------
 * 8-Apr-2005
 
diff --git a/wxPython/docs/xml/wxPython-metadata.xml b/wxPython/docs/xml/wxPython-metadata.xml
deleted file mode 100644 (file)
index eb25717..0000000
+++ /dev/null
@@ -1,41655 +0,0 @@
-<?xml version="1.0"?>
-<wxPython-metadata>
-  <module name="_core">
-    <pythoncode>
-#// Give a reference to the dictionary of this module to the C++ extension
-#// code.
-_core_._wxPySetDictionary(vars())
-
-#// A little trick to make 'wx' be a reference to this module so wx.Names can
-#// be used here.
-import sys as _sys
-wx = _sys.modules[__name__]
-
-</pythoncode>
-    <pythoncode>
-#----------------------------------------------------------------------------
-
-def _deprecated(callable, msg=None):
-    """
-    Create a wrapper function that will raise a DeprecationWarning
-    before calling the callable.
-    """
-    if msg is None:
-        msg = "%s is deprecated" % callable
-    def deprecatedWrapper(*args, **kwargs):
-        import warnings
-        warnings.warn(msg, DeprecationWarning, stacklevel=2)
-        return callable(*args, **kwargs)
-    deprecatedWrapper.__doc__ = msg
-    return deprecatedWrapper
-    
-                   
-#----------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Object" oldname="wxObject" module="_core">
-      <docstring>The base class for most wx objects, although in wxPython not
-much functionality is needed nor exposed.</docstring>
-      <method name="GetClassName" type="String" overloaded="no">
-        <autodoc>GetClassName(self) -&gt; String</autodoc>
-        <docstring>Returns the class name of the C++ class using wxRTTI.</docstring>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Size" oldname="wxSize" module="_core">
-      <docstring>wx.Size is a useful data structure used to represent the size of
-something.  It simply contians integer width and height proprtites.
-In most places in wxPython where a wx.Size is expected a
-(width,height) tuple can be used instead.</docstring>
-      <constructor name="Size" overloaded="no">
-        <autodoc>__init__(self, int w=0, int h=0) -&gt; Size</autodoc>
-        <docstring>Creates a size object.</docstring>
-        <paramlist>
-          <param name="w" type="int" default="0"/>
-          <param name="h" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxSize" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <property name="width" type="int" readonly="no"/>
-      <property name="height" type="int" readonly="no"/>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Size sz) -&gt; bool</autodoc>
-        <docstring>Test for equality of wx.Size objects.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Size sz) -&gt; bool</autodoc>
-        <docstring>Test for inequality.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="Size" overloaded="no">
-        <autodoc>__add__(self, Size sz) -&gt; Size</autodoc>
-        <docstring>Add sz's proprties to this and return the result.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="Size" overloaded="no">
-        <autodoc>__sub__(self, Size sz) -&gt; Size</autodoc>
-        <docstring>Subtract sz's properties from this and return the result.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="IncTo" type="" overloaded="no">
-        <autodoc>IncTo(self, Size sz)</autodoc>
-        <docstring>Increments this object so that both of its dimensions are not less
-than the corresponding dimensions of the size.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="DecTo" type="" overloaded="no">
-        <autodoc>DecTo(self, Size sz)</autodoc>
-        <docstring>Decrements this object so that both of its dimensions are not greater
-than the corresponding dimensions of the size.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int w, int h)</autodoc>
-        <docstring>Set both width and height.</docstring>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHeight" type="" overloaded="no">
-        <autodoc>SetHeight(self, int h)</autodoc>
-        <paramlist>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsFullySpecified" type="bool" overloaded="no">
-        <autodoc>IsFullySpecified(self) -&gt; bool</autodoc>
-        <docstring>Returns True if both components of the size are non-default values.</docstring>
-      </method>
-      <method name="SetDefaults" type="" overloaded="no">
-        <autodoc>SetDefaults(self, Size size)</autodoc>
-        <docstring>Combine this size with the other one replacing the default components
-of this object (i.e. equal to -1) with those of the other.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (width,height)</autodoc>
-        <docstring>Returns the width and height properties as a tuple.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="RealPoint" oldname="wxRealPoint" module="_core">
-      <docstring>A data structure for representing a point or position with floating
-point x and y properties.  In wxPython most places that expect a
-wx.RealPoint can also accept a (x,y) tuple.</docstring>
-      <constructor name="RealPoint" overloaded="no">
-        <autodoc>__init__(self, double x=0.0, double y=0.0) -&gt; RealPoint</autodoc>
-        <docstring>Create a wx.RealPoint object</docstring>
-        <paramlist>
-          <param name="x" type="double" default="0.0"/>
-          <param name="y" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxRealPoint" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <property name="x" type="double" readonly="no"/>
-      <property name="y" type="double" readonly="no"/>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, RealPoint pt) -&gt; bool</autodoc>
-        <docstring>Test for equality of wx.RealPoint objects.</docstring>
-        <paramlist>
-          <param name="pt" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, RealPoint pt) -&gt; bool</autodoc>
-        <docstring>Test for inequality of wx.RealPoint objects.</docstring>
-        <paramlist>
-          <param name="pt" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="RealPoint" overloaded="no">
-        <autodoc>__add__(self, RealPoint pt) -&gt; RealPoint</autodoc>
-        <docstring>Add pt's proprties to this and return the result.</docstring>
-        <paramlist>
-          <param name="pt" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="RealPoint" overloaded="no">
-        <autodoc>__sub__(self, RealPoint pt) -&gt; RealPoint</autodoc>
-        <docstring>Subtract pt's proprties from this and return the result</docstring>
-        <paramlist>
-          <param name="pt" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, double x, double y)</autodoc>
-        <docstring>Set both the x and y properties</docstring>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (x,y)</autodoc>
-        <docstring>Return the x and y properties as a tuple. </docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Point" oldname="wxPoint" module="_core">
-      <docstring>A data structure for representing a point or position with integer x
-and y properties.  Most places in wxPython that expect a wx.Point can
-also accept a (x,y) tuple.</docstring>
-      <constructor name="Point" overloaded="no">
-        <autodoc>__init__(self, int x=0, int y=0) -&gt; Point</autodoc>
-        <docstring>Create a wx.Point object</docstring>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPoint" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <property name="x" type="int" readonly="no"/>
-      <property name="y" type="int" readonly="no"/>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Point pt) -&gt; bool</autodoc>
-        <docstring>Test for equality of wx.Point objects.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Point pt) -&gt; bool</autodoc>
-        <docstring>Test for inequality of wx.Point objects.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="Point" overloaded="no">
-        <autodoc>__add__(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Add pt's proprties to this and return the result.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="Point" overloaded="no">
-        <autodoc>__sub__(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Subtract pt's proprties from this and return the result</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="__iadd__" type="Point" overloaded="no">
-        <autodoc>__iadd__(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Add pt to this object.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="Point" overloaded="no">
-        <autodoc>__isub__(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Subtract pt from this object.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, long x, long y)</autodoc>
-        <docstring>Set both the x and y properties</docstring>
-        <paramlist>
-          <param name="x" type="long" default=""/>
-          <param name="y" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (x,y)</autodoc>
-        <docstring>Return the x and y properties as a tuple. </docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Rect" oldname="wxRect" module="_core">
-      <docstring>A class for representing and manipulating rectangles.  It has x, y,
-width and height properties.  In wxPython most palces that expect a
-wx.Rect can also accept a (x,y,width,height) tuple.</docstring>
-      <constructor name="Rect" overloaded="no">
-        <autodoc>__init__(self, int x=0, int y=0, int width=0, int height=0) -&gt; Rect</autodoc>
-        <docstring>Create a new Rect object.</docstring>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="RectPP" overloaded="no">
-        <autodoc>RectPP(Point topLeft, Point bottomRight) -&gt; Rect</autodoc>
-        <docstring>Create a new Rect object from Points representing two corners.</docstring>
-        <paramlist>
-          <param name="topLeft" type="Point" default=""/>
-          <param name="bottomRight" type="Point" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="RectPS" overloaded="no">
-        <autodoc>RectPS(Point pos, Size size) -&gt; Rect</autodoc>
-        <docstring>Create a new Rect from a position and size.</docstring>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxRect" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetX" type="" overloaded="no">
-        <autodoc>SetX(self, int x)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetY" type="" overloaded="no">
-        <autodoc>SetY(self, int y)</autodoc>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetHeight" type="" overloaded="no">
-        <autodoc>SetHeight(self, int h)</autodoc>
-        <paramlist>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, Point p)</autodoc>
-        <paramlist>
-          <param name="p" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size s)</autodoc>
-        <paramlist>
-          <param name="s" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTopLeft" type="Point" overloaded="no">
-        <autodoc>GetTopLeft(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetTopLeft" type="" overloaded="no">
-        <autodoc>SetTopLeft(self, Point p)</autodoc>
-        <paramlist>
-          <param name="p" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBottomRight" type="Point" overloaded="no">
-        <autodoc>GetBottomRight(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetBottomRight" type="" overloaded="no">
-        <autodoc>SetBottomRight(self, Point p)</autodoc>
-        <paramlist>
-          <param name="p" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLeft" type="int" overloaded="no">
-        <autodoc>GetLeft(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetTop" type="int" overloaded="no">
-        <autodoc>GetTop(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetBottom" type="int" overloaded="no">
-        <autodoc>GetBottom(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRight" type="int" overloaded="no">
-        <autodoc>GetRight(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetLeft" type="" overloaded="no">
-        <autodoc>SetLeft(self, int left)</autodoc>
-        <paramlist>
-          <param name="left" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRight" type="" overloaded="no">
-        <autodoc>SetRight(self, int right)</autodoc>
-        <paramlist>
-          <param name="right" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTop" type="" overloaded="no">
-        <autodoc>SetTop(self, int top)</autodoc>
-        <paramlist>
-          <param name="top" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBottom" type="" overloaded="no">
-        <autodoc>SetBottom(self, int bottom)</autodoc>
-        <paramlist>
-          <param name="bottom" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Inflate" type="Rect" overloaded="no">
-        <autodoc>Inflate(self, int dx, int dy) -&gt; Rect</autodoc>
-        <docstring>Increase the rectangle size by dx in x direction and dy in y
-direction. Both or one of) parameters may be negative to decrease the
-rectangle size.</docstring>
-        <paramlist>
-          <param name="dx" type="int" default=""/>
-          <param name="dy" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Deflate" type="Rect" overloaded="no">
-        <autodoc>Deflate(self, int dx, int dy) -&gt; Rect</autodoc>
-        <docstring>Decrease the rectangle size by dx in x direction and dy in y
-direction. Both or one of) parameters may be negative to increase the
-rectngle size. This method is the opposite of Inflate.</docstring>
-        <paramlist>
-          <param name="dx" type="int" default=""/>
-          <param name="dy" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="OffsetXY" type="" overloaded="no">
-        <autodoc>OffsetXY(self, int dx, int dy)</autodoc>
-        <docstring>Moves the rectangle by the specified offset. If dx is positive, the
-rectangle is moved to the right, if dy is positive, it is moved to the
-bottom, otherwise it is moved to the left or top respectively.</docstring>
-        <paramlist>
-          <param name="dx" type="int" default=""/>
-          <param name="dy" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Offset" type="" overloaded="no">
-        <autodoc>Offset(self, Point pt)</autodoc>
-        <docstring>Same as OffsetXY but uses dx,dy from Point</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="Intersect" type="Rect" overloaded="no">
-        <autodoc>Intersect(self, Rect rect) -&gt; Rect</autodoc>
-        <docstring>Return the intersectsion of this rectangle and rect.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="Rect" overloaded="no">
-        <autodoc>__add__(self, Rect rect) -&gt; Rect</autodoc>
-        <docstring>Add the properties of rect to this rectangle and return the result.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="__iadd__" type="Rect" overloaded="no">
-        <autodoc>__iadd__(self, Rect rect) -&gt; Rect</autodoc>
-        <docstring>Add the properties of rect to this rectangle, updating this rectangle.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Rect rect) -&gt; bool</autodoc>
-        <docstring>Test for equality.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Rect rect) -&gt; bool</autodoc>
-        <docstring>Test for inequality.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsideXY" type="bool" overloaded="no">
-        <autodoc>InsideXY(self, int x, int y) -&gt; bool</autodoc>
-        <docstring>Return True if the point is (not strcitly) inside the rect.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Inside" type="bool" overloaded="no">
-        <autodoc>Inside(self, Point pt) -&gt; bool</autodoc>
-        <docstring>Return True if the point is (not strcitly) inside the rect.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="Intersects" type="bool" overloaded="no">
-        <autodoc>Intersects(self, Rect rect) -&gt; bool</autodoc>
-        <docstring>Returns True if the rectangles have a non empty intersection.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <property name="x" type="int" readonly="no"/>
-      <property name="y" type="int" readonly="no"/>
-      <property name="width" type="int" readonly="no"/>
-      <property name="height" type="int" readonly="no"/>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int x=0, int y=0, int width=0, int height=0)</autodoc>
-        <docstring>Set all rectangle properties.</docstring>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (x,y,width,height)</autodoc>
-        <docstring>Return the rectangle properties as a tuple.</docstring>
-      </method>
-    </class>
-    <method name="IntersectRect" oldname="wxIntersectRect" type="PyObject" overloaded="no">
-      <autodoc>IntersectRect(Rect r1, Rect r2) -&gt; Rect</autodoc>
-      <docstring>Calculate and return the intersection of r1 and r2.</docstring>
-      <paramlist>
-        <param name="r1" type="Rect" default=""/>
-        <param name="r2" type="Rect" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Point2D" oldname="wxPoint2D" module="_core">
-      <docstring>wx.Point2Ds represent a point or a vector in a 2d coordinate system
-with floating point values.</docstring>
-      <constructor name="Point2D" overloaded="no">
-        <autodoc>__init__(self, double x=0.0, double y=0.0) -&gt; Point2D</autodoc>
-        <docstring>Create a w.Point2D object.</docstring>
-        <paramlist>
-          <param name="x" type="double" default="0.0"/>
-          <param name="y" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="Point2DCopy" overloaded="no">
-        <autodoc>Point2DCopy(Point2D pt) -&gt; Point2D</autodoc>
-        <docstring>Create a w.Point2D object.</docstring>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="Point2DFromPoint" overloaded="no">
-        <autodoc>Point2DFromPoint(Point pt) -&gt; Point2D</autodoc>
-        <docstring>Create a w.Point2D object.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetFloor" type="" overloaded="no">
-        <autodoc>GetFloor() -&gt; (x,y)</autodoc>
-        <docstring>Convert to integer</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRounded" type="" overloaded="no">
-        <autodoc>GetRounded() -&gt; (x,y)</autodoc>
-        <docstring>Convert to integer</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetVectorLength" type="double" overloaded="no">
-        <autodoc>GetVectorLength(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetVectorAngle" type="double" overloaded="no">
-        <autodoc>GetVectorAngle(self) -&gt; double</autodoc>
-      </method>
-      <method name="SetVectorLength" type="" overloaded="no">
-        <autodoc>SetVectorLength(self, double length)</autodoc>
-        <paramlist>
-          <param name="length" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVectorAngle" type="" overloaded="no">
-        <autodoc>SetVectorAngle(self, double degrees)</autodoc>
-        <paramlist>
-          <param name="degrees" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDistance" type="double" overloaded="no">
-        <autodoc>GetDistance(self, Point2D pt) -&gt; double</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDistanceSquare" type="double" overloaded="no">
-        <autodoc>GetDistanceSquare(self, Point2D pt) -&gt; double</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDotProduct" type="double" overloaded="no">
-        <autodoc>GetDotProduct(self, Point2D vec) -&gt; double</autodoc>
-        <paramlist>
-          <param name="vec" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCrossProduct" type="double" overloaded="no">
-        <autodoc>GetCrossProduct(self, Point2D vec) -&gt; double</autodoc>
-        <paramlist>
-          <param name="vec" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__neg__" type="Point2D" overloaded="no">
-        <autodoc>__neg__(self) -&gt; Point2D</autodoc>
-        <docstring>the reflection of this point</docstring>
-      </method>
-      <method name="__iadd__" type="Point2D" overloaded="no">
-        <autodoc>__iadd__(self, Point2D pt) -&gt; Point2D</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="Point2D" overloaded="no">
-        <autodoc>__isub__(self, Point2D pt) -&gt; Point2D</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__imul__" type="Point2D" overloaded="no">
-        <autodoc>__imul__(self, Point2D pt) -&gt; Point2D</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__idiv__" type="Point2D" overloaded="no">
-        <autodoc>__idiv__(self, Point2D pt) -&gt; Point2D</autodoc>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Point2D pt) -&gt; bool</autodoc>
-        <docstring>Test for equality</docstring>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Point2D pt) -&gt; bool</autodoc>
-        <docstring>Test for inequality</docstring>
-        <paramlist>
-          <param name="pt" type="Point2D" default=""/>
-        </paramlist>
-      </method>
-      <property name="x" type="double" readonly="no"/>
-      <property name="y" type="double" readonly="no"/>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, double x=0, double y=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default="0"/>
-          <param name="y" type="double" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (x,y)</autodoc>
-        <docstring>Return x and y properties as a tuple.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="InputStream" oldname="wxPyInputStream" module="_core">
-      <constructor name="wxPyInputStream" overloaded="no">
-        <autodoc>__init__(self, PyObject p) -&gt; InputStream</autodoc>
-        <paramlist>
-          <param name="p" type="PyObject" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="close" type="" overloaded="no">
-        <autodoc>close(self)</autodoc>
-      </method>
-      <method name="flush" type="" overloaded="no">
-        <autodoc>flush(self)</autodoc>
-      </method>
-      <method name="eof" type="bool" overloaded="no">
-        <autodoc>eof(self) -&gt; bool</autodoc>
-      </method>
-      <method name="read" type="PyObject" overloaded="no">
-        <autodoc>read(self, int size=-1) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="readline" type="PyObject" overloaded="no">
-        <autodoc>readline(self, int size=-1) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="readlines" type="PyObject" overloaded="no">
-        <autodoc>readlines(self, int sizehint=-1) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="sizehint" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="seek" type="" overloaded="no">
-        <autodoc>seek(self, int offset, int whence=0)</autodoc>
-        <paramlist>
-          <param name="offset" type="int" default=""/>
-          <param name="whence" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="tell" type="int" overloaded="no">
-        <autodoc>tell(self) -&gt; int</autodoc>
-      </method>
-      <method name="Peek" type="char" overloaded="no">
-        <autodoc>Peek(self) -&gt; char</autodoc>
-      </method>
-      <method name="GetC" type="char" overloaded="no">
-        <autodoc>GetC(self) -&gt; char</autodoc>
-      </method>
-      <method name="LastRead" type="size_t" overloaded="no">
-        <autodoc>LastRead(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="CanRead" type="bool" overloaded="no">
-        <autodoc>CanRead(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Eof" type="bool" overloaded="no">
-        <autodoc>Eof(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Ungetch" type="bool" overloaded="no">
-        <autodoc>Ungetch(self, char c) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="c" type="char" default=""/>
-        </paramlist>
-      </method>
-      <method name="SeekI" type="long" overloaded="no">
-        <autodoc>SeekI(self, long pos, int mode=FromStart) -&gt; long</autodoc>
-        <paramlist>
-          <param name="pos" type="long" default=""/>
-          <param name="mode" type="wxSeekMode" default="wxFromStart"/>
-        </paramlist>
-      </method>
-      <method name="TellI" type="long" overloaded="no">
-        <autodoc>TellI(self) -&gt; long</autodoc>
-      </method>
-    </class>
-    <class name="OutputStream" oldname="wxOutputStream" module="_core">
-      <method name="write" type="" overloaded="no">
-        <autodoc>write(self, PyObject obj)</autodoc>
-        <paramlist>
-          <param name="obj" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FSFile" oldname="wxFSFile" module="_core">
-      <baseclass name="Object"/>
-      <constructor name="FSFile" overloaded="no">
-        <autodoc>__init__(self, InputStream stream, String loc, String mimetype, String anchor, 
-    DateTime modif) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="loc" type="String" default=""/>
-          <param name="mimetype" type="String" default=""/>
-          <param name="anchor" type="String" default=""/>
-          <param name="modif" type="wxDateTime" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFSFile" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetStream" type="wxInputStream" overloaded="no">
-        <autodoc>GetStream(self) -&gt; InputStream</autodoc>
-      </method>
-      <method name="GetMimeType" type="String" overloaded="no">
-        <autodoc>GetMimeType(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetLocation" type="String" overloaded="no">
-        <autodoc>GetLocation(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetAnchor" type="String" overloaded="no">
-        <autodoc>GetAnchor(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetModificationTime" type="wxDateTime" overloaded="no">
-        <autodoc>GetModificationTime(self) -&gt; DateTime</autodoc>
-      </method>
-    </class>
-    <class name="CPPFileSystemHandler" oldname="wxFileSystemHandler" module="_core"/>
-    <class name="FileSystemHandler" oldname="wxPyFileSystemHandler" module="_core">
-      <baseclass name="CPPFileSystemHandler"/>
-      <constructor name="wxPyFileSystemHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; FileSystemHandler</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanOpen" type="bool" overloaded="no">
-        <autodoc>CanOpen(self, String location) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="OpenFile" type="FSFile" overloaded="no">
-        <autodoc>OpenFile(self, FileSystem fs, String location) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="fs" type="wxFileSystem" default=""/>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindFirst" type="String" overloaded="no">
-        <autodoc>FindFirst(self, String spec, int flags=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="spec" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FindNext" type="String" overloaded="no">
-        <autodoc>FindNext(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetProtocol" type="String" overloaded="no">
-        <autodoc>GetProtocol(self, String location) -&gt; String</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLeftLocation" type="String" overloaded="no">
-        <autodoc>GetLeftLocation(self, String location) -&gt; String</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAnchor" type="String" overloaded="no">
-        <autodoc>GetAnchor(self, String location) -&gt; String</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRightLocation" type="String" overloaded="no">
-        <autodoc>GetRightLocation(self, String location) -&gt; String</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMimeTypeFromExt" type="String" overloaded="no">
-        <autodoc>GetMimeTypeFromExt(self, String location) -&gt; String</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FileSystem" oldname="wxFileSystem" module="_core">
-      <baseclass name="Object"/>
-      <constructor name="FileSystem" overloaded="no">
-        <autodoc>__init__(self) -&gt; FileSystem</autodoc>
-      </constructor>
-      <destructor name="~wxFileSystem" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="ChangePathTo" type="" overloaded="no">
-        <autodoc>ChangePathTo(self, String location, bool is_dir=False)</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-          <param name="is_dir" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetPath" type="String" overloaded="no">
-        <autodoc>GetPath(self) -&gt; String</autodoc>
-      </method>
-      <method name="OpenFile" type="FSFile" overloaded="no">
-        <autodoc>OpenFile(self, String location) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindFirst" type="String" overloaded="no">
-        <autodoc>FindFirst(self, String spec, int flags=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="spec" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FindNext" type="String" overloaded="no">
-        <autodoc>FindNext(self) -&gt; String</autodoc>
-      </method>
-      <staticmethod name="AddHandler" type="" overloaded="no">
-        <autodoc>AddHandler(CPPFileSystemHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="CPPFileSystemHandler" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="CleanUpHandlers" type="" overloaded="no">
-        <autodoc>CleanUpHandlers()</autodoc>
-      </staticmethod>
-      <staticmethod name="FileNameToURL" type="String" overloaded="no">
-        <autodoc>FileNameToURL(String filename) -&gt; String</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <method name="FileSystem_URLToFileName" oldname="wxFileSystem_URLToFileName" type="String" overloaded="no">
-      <autodoc>FileSystem_URLToFileName(String url) -&gt; String</autodoc>
-      <paramlist>
-        <param name="url" type="String" default=""/>
-      </paramlist>
-    </method>
-    <class name="InternetFSHandler" oldname="wxInternetFSHandler" module="_core">
-      <baseclass name="CPPFileSystemHandler"/>
-      <constructor name="InternetFSHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; InternetFSHandler</autodoc>
-      </constructor>
-      <method name="CanOpen" type="bool" overloaded="no">
-        <autodoc>CanOpen(self, String location) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="OpenFile" type="FSFile" overloaded="no">
-        <autodoc>OpenFile(self, FileSystem fs, String location) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="fs" type="FileSystem" default=""/>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ZipFSHandler" oldname="wxZipFSHandler" module="_core">
-      <baseclass name="CPPFileSystemHandler"/>
-      <constructor name="ZipFSHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; ZipFSHandler</autodoc>
-      </constructor>
-      <method name="CanOpen" type="bool" overloaded="no">
-        <autodoc>CanOpen(self, String location) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="OpenFile" type="FSFile" overloaded="no">
-        <autodoc>OpenFile(self, FileSystem fs, String location) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="fs" type="FileSystem" default=""/>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindFirst" type="String" overloaded="no">
-        <autodoc>FindFirst(self, String spec, int flags=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="spec" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FindNext" type="String" overloaded="no">
-        <autodoc>FindNext(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <method name="__wxMemoryFSHandler_AddFile_wxImage" oldname="__wxMemoryFSHandler_AddFile_wxImage" type="" overloaded="no">
-      <autodoc>__wxMemoryFSHandler_AddFile_wxImage(String filename, Image image, long type)</autodoc>
-      <paramlist>
-        <param name="filename" type="String" default=""/>
-        <param name="image" type="wxImage" default=""/>
-        <param name="type" type="long" default=""/>
-      </paramlist>
-    </method>
-    <method name="__wxMemoryFSHandler_AddFile_wxBitmap" oldname="__wxMemoryFSHandler_AddFile_wxBitmap" type="" overloaded="no">
-      <autodoc>__wxMemoryFSHandler_AddFile_wxBitmap(String filename, Bitmap bitmap, long type)</autodoc>
-      <paramlist>
-        <param name="filename" type="String" default=""/>
-        <param name="bitmap" type="wxBitmap" default=""/>
-        <param name="type" type="long" default=""/>
-      </paramlist>
-    </method>
-    <method name="__wxMemoryFSHandler_AddFile_Data" oldname="__wxMemoryFSHandler_AddFile_Data" type="" overloaded="no">
-      <autodoc>__wxMemoryFSHandler_AddFile_Data(String filename, PyObject data)</autodoc>
-      <paramlist>
-        <param name="filename" type="String" default=""/>
-        <param name="data" type="PyObject" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-def MemoryFSHandler_AddFile(filename, a, b=''):
-    if isinstance(a, wx.Image):
-        __wxMemoryFSHandler_AddFile_wxImage(filename, a, b)
-    elif isinstance(a, wx.Bitmap):
-        __wxMemoryFSHandler_AddFile_wxBitmap(filename, a, b)
-    elif type(a) == str:
-        __wxMemoryFSHandler_AddFile_Data(filename, a)
-    else: raise TypeError, 'wx.Image, wx.Bitmap or string expected'
-</pythoncode>
-    <class name="MemoryFSHandler" oldname="wxMemoryFSHandler" module="_core">
-      <baseclass name="CPPFileSystemHandler"/>
-      <constructor name="MemoryFSHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; MemoryFSHandler</autodoc>
-      </constructor>
-      <staticmethod name="RemoveFile" type="" overloaded="no">
-        <autodoc>RemoveFile(String filename)</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="CanOpen" type="bool" overloaded="no">
-        <autodoc>CanOpen(self, String location) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="OpenFile" type="FSFile" overloaded="no">
-        <autodoc>OpenFile(self, FileSystem fs, String location) -&gt; FSFile</autodoc>
-        <paramlist>
-          <param name="fs" type="FileSystem" default=""/>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindFirst" type="String" overloaded="no">
-        <autodoc>FindFirst(self, String spec, int flags=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="spec" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FindNext" type="String" overloaded="no">
-        <autodoc>FindNext(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ImageHandler" oldname="wxImageHandler" module="_core">
-      <baseclass name="Object"/>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetExtension" type="String" overloaded="no">
-        <autodoc>GetExtension(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetType" type="long" overloaded="no">
-        <autodoc>GetType(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetMimeType" type="String" overloaded="no">
-        <autodoc>GetMimeType(self) -&gt; String</autodoc>
-      </method>
-      <method name="CanRead" type="bool" overloaded="no">
-        <autodoc>CanRead(self, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetName" type="" overloaded="no">
-        <autodoc>SetName(self, String name)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetExtension" type="" overloaded="no">
-        <autodoc>SetExtension(self, String extension)</autodoc>
-        <paramlist>
-          <param name="extension" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetType" type="" overloaded="no">
-        <autodoc>SetType(self, long type)</autodoc>
-        <paramlist>
-          <param name="type" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMimeType" type="" overloaded="no">
-        <autodoc>SetMimeType(self, String mimetype)</autodoc>
-        <paramlist>
-          <param name="mimetype" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ImageHistogram" oldname="wxImageHistogram" module="_core">
-      <constructor name="ImageHistogram" overloaded="no">
-        <autodoc>__init__(self) -&gt; ImageHistogram</autodoc>
-      </constructor>
-      <staticmethod name="MakeKey" type="unsigned long" overloaded="no">
-        <autodoc>MakeKey(unsigned char r, unsigned char g, unsigned char b) -&gt; unsigned long</autodoc>
-        <docstring>Get the key in the histogram for the given RGB values</docstring>
-        <paramlist>
-          <param name="r" type="unsigned char" default=""/>
-          <param name="g" type="unsigned char" default=""/>
-          <param name="b" type="unsigned char" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="FindFirstUnusedColour" type="bool" overloaded="no">
-        <autodoc>FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -&gt; (success, r, g, b)</autodoc>
-        <docstring>Find first colour that is not used in the image and has higher RGB
-values than startR, startG, startB.  Returns a tuple consisting of a
-success flag and rgb values.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="unsigned char" default=""/>
-          <param name="OUTPUT" type="unsigned char" default=""/>
-          <param name="OUTPUT" type="unsigned char" default=""/>
-          <param name="startR" type="unsigned char" default="1"/>
-          <param name="startG" type="unsigned char" default="0"/>
-          <param name="startB" type="unsigned char" default="0"/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="Image" oldname="wxImage" module="_core">
-      <baseclass name="Object"/>
-      <constructor name="Image" overloaded="no">
-        <autodoc>__init__(self, String name, long type=BITMAP_TYPE_ANY, int index=-1) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="long" default="wxBITMAP_TYPE_ANY"/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="ImageFromMime" overloaded="no">
-        <autodoc>ImageFromMime(String name, String mimetype, int index=-1) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="mimetype" type="String" default=""/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="ImageFromStream" overloaded="no">
-        <autodoc>ImageFromStream(InputStream stream, long type=BITMAP_TYPE_ANY, int index=-1) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="type" type="long" default="wxBITMAP_TYPE_ANY"/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="ImageFromStreamMime" overloaded="no">
-        <autodoc>ImageFromStreamMime(InputStream stream, String mimetype, int index=-1) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="mimetype" type="String" default=""/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="EmptyImage" overloaded="no">
-        <autodoc>EmptyImage(int width=0, int height=0, bool clear=True) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-          <param name="clear" type="bool" default="True"/>
-        </paramlist>
-      </constructor>
-      <constructor name="ImageFromBitmap" overloaded="no">
-        <autodoc>ImageFromBitmap(Bitmap bitmap) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="bitmap" type="wxBitmap" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="ImageFromData" overloaded="no">
-        <autodoc>ImageFromData(int width, int height, unsigned char data) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="data" type="unsigned char" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxImage" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Create" type="" overloaded="no">
-        <autodoc>Create(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-      </method>
-      <method name="Scale" type="Image" overloaded="no">
-        <autodoc>Scale(self, int width, int height) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShrinkBy" type="Image" overloaded="no">
-        <autodoc>ShrinkBy(self, int xFactor, int yFactor) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="xFactor" type="int" default=""/>
-          <param name="yFactor" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Rescale" type="Image" overloaded="no">
-        <autodoc>Rescale(self, int width, int height) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRGB" type="" overloaded="no">
-        <autodoc>SetRGB(self, int x, int y, unsigned char r, unsigned char g, unsigned char b)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="r" type="unsigned char" default=""/>
-          <param name="g" type="unsigned char" default=""/>
-          <param name="b" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRed" type="unsigned char" overloaded="no">
-        <autodoc>GetRed(self, int x, int y) -&gt; unsigned char</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetGreen" type="unsigned char" overloaded="no">
-        <autodoc>GetGreen(self, int x, int y) -&gt; unsigned char</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBlue" type="unsigned char" overloaded="no">
-        <autodoc>GetBlue(self, int x, int y) -&gt; unsigned char</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlpha" type="" overloaded="no">
-        <autodoc>SetAlpha(self, int x, int y, unsigned char alpha)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="alpha" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlpha" type="unsigned char" overloaded="no">
-        <autodoc>GetAlpha(self, int x, int y) -&gt; unsigned char</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasAlpha" type="bool" overloaded="no">
-        <autodoc>HasAlpha(self) -&gt; bool</autodoc>
-      </method>
-      <method name="FindFirstUnusedColour" type="bool" overloaded="no">
-        <autodoc>FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -&gt; (success, r, g, b)</autodoc>
-        <docstring>Find first colour that is not used in the image and has higher RGB
-values than startR, startG, startB.  Returns a tuple consisting of a
-success flag and rgb values.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="byte" default=""/>
-          <param name="OUTPUT" type="byte" default=""/>
-          <param name="OUTPUT" type="byte" default=""/>
-          <param name="startR" type="byte" default="0"/>
-          <param name="startG" type="byte" default="0"/>
-          <param name="startB" type="byte" default="0"/>
-        </paramlist>
-      </method>
-      <method name="ConvertAlphaToMask" type="bool" overloaded="no">
-        <autodoc>ConvertAlphaToMask(self, byte threshold=128) -&gt; bool</autodoc>
-        <docstring>If the image has alpha channel, this method converts it to mask. All pixels
-with alpha value less than ``threshold`` are replaced with mask colour and the
-alpha channel is removed. Mask colour is chosen automatically using
-`FindFirstUnusedColour`.
-
-If the image image doesn't have alpha channel, ConvertAlphaToMask does
-nothing.</docstring>
-        <paramlist>
-          <param name="threshold" type="byte" default="128"/>
-        </paramlist>
-      </method>
-      <method name="SetMaskFromImage" type="bool" overloaded="no">
-        <autodoc>SetMaskFromImage(self, Image mask, byte mr, byte mg, byte mb) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="mask" type="Image" default=""/>
-          <param name="mr" type="byte" default=""/>
-          <param name="mg" type="byte" default=""/>
-          <param name="mb" type="byte" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="CanRead" type="bool" overloaded="no">
-        <autodoc>CanRead(String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetImageCount" type="int" overloaded="no">
-        <autodoc>GetImageCount(String name, long type=BITMAP_TYPE_ANY) -&gt; int</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="long" default="wxBITMAP_TYPE_ANY"/>
-        </paramlist>
-      </staticmethod>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String name, long type=BITMAP_TYPE_ANY, int index=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="long" default="wxBITMAP_TYPE_ANY"/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="LoadMimeFile" type="bool" overloaded="no">
-        <autodoc>LoadMimeFile(self, String name, String mimetype, int index=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="mimetype" type="String" default=""/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SaveFile" type="bool" overloaded="no">
-        <autodoc>SaveFile(self, String name, int type) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SaveMimeFile" type="bool" overloaded="no">
-        <autodoc>SaveMimeFile(self, String name, String mimetype) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="mimetype" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="CanReadStream" type="bool" overloaded="no">
-        <autodoc>CanReadStream(InputStream stream) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="LoadStream" type="bool" overloaded="no">
-        <autodoc>LoadStream(self, InputStream stream, long type=BITMAP_TYPE_ANY, int index=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="type" type="long" default="wxBITMAP_TYPE_ANY"/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="LoadMimeStream" type="bool" overloaded="no">
-        <autodoc>LoadMimeStream(self, InputStream stream, String mimetype, int index=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="mimetype" type="String" default=""/>
-          <param name="index" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetSubImage" type="Image" overloaded="no">
-        <autodoc>GetSubImage(self, Rect rect) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="Copy" type="Image" overloaded="no">
-        <autodoc>Copy(self) -&gt; Image</autodoc>
-      </method>
-      <method name="Paste" type="" overloaded="no">
-        <autodoc>Paste(self, Image image, int x, int y)</autodoc>
-        <paramlist>
-          <param name="image" type="Image" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetData" type="PyObject" overloaded="no">
-        <autodoc>GetData(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetData" type="" overloaded="no">
-        <autodoc>SetData(self, PyObject data)</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDataBuffer" type="PyObject" overloaded="no">
-        <autodoc>GetDataBuffer(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetDataBuffer" type="" overloaded="no">
-        <autodoc>SetDataBuffer(self, PyObject data)</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlphaData" type="PyObject" overloaded="no">
-        <autodoc>GetAlphaData(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetAlphaData" type="" overloaded="no">
-        <autodoc>SetAlphaData(self, PyObject data)</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlphaBuffer" type="PyObject" overloaded="no">
-        <autodoc>GetAlphaBuffer(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetAlphaBuffer" type="" overloaded="no">
-        <autodoc>SetAlphaBuffer(self, PyObject data)</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaskColour" type="" overloaded="no">
-        <autodoc>SetMaskColour(self, unsigned char r, unsigned char g, unsigned char b)</autodoc>
-        <paramlist>
-          <param name="r" type="unsigned char" default=""/>
-          <param name="g" type="unsigned char" default=""/>
-          <param name="b" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaskRed" type="unsigned char" overloaded="no">
-        <autodoc>GetMaskRed(self) -&gt; unsigned char</autodoc>
-      </method>
-      <method name="GetMaskGreen" type="unsigned char" overloaded="no">
-        <autodoc>GetMaskGreen(self) -&gt; unsigned char</autodoc>
-      </method>
-      <method name="GetMaskBlue" type="unsigned char" overloaded="no">
-        <autodoc>GetMaskBlue(self) -&gt; unsigned char</autodoc>
-      </method>
-      <method name="SetMask" type="" overloaded="no">
-        <autodoc>SetMask(self, bool mask=True)</autodoc>
-        <paramlist>
-          <param name="mask" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="HasMask" type="bool" overloaded="no">
-        <autodoc>HasMask(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Rotate" type="Image" overloaded="no">
-        <autodoc>Rotate(self, double angle, Point centre_of_rotation, bool interpolating=True, 
-    Point offset_after_rotation=None) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="angle" type="double" default=""/>
-          <param name="centre_of_rotation" type="Point" default=""/>
-          <param name="interpolating" type="bool" default="True"/>
-          <param name="offset_after_rotation" type="Point" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Rotate90" type="Image" overloaded="no">
-        <autodoc>Rotate90(self, bool clockwise=True) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="clockwise" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Mirror" type="Image" overloaded="no">
-        <autodoc>Mirror(self, bool horizontally=True) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="horizontally" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Replace" type="" overloaded="no">
-        <autodoc>Replace(self, unsigned char r1, unsigned char g1, unsigned char b1, 
-    unsigned char r2, unsigned char g2, unsigned char b2)</autodoc>
-        <paramlist>
-          <param name="r1" type="unsigned char" default=""/>
-          <param name="g1" type="unsigned char" default=""/>
-          <param name="b1" type="unsigned char" default=""/>
-          <param name="r2" type="unsigned char" default=""/>
-          <param name="g2" type="unsigned char" default=""/>
-          <param name="b2" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertToMono" type="Image" overloaded="no">
-        <autodoc>ConvertToMono(self, unsigned char r, unsigned char g, unsigned char b) -&gt; Image</autodoc>
-        <paramlist>
-          <param name="r" type="unsigned char" default=""/>
-          <param name="g" type="unsigned char" default=""/>
-          <param name="b" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOption" type="" overloaded="no">
-        <autodoc>SetOption(self, String name, String value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOptionInt" type="" overloaded="no">
-        <autodoc>SetOptionInt(self, String name, int value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOption" type="String" overloaded="no">
-        <autodoc>GetOption(self, String name) -&gt; String</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOptionInt" type="int" overloaded="no">
-        <autodoc>GetOptionInt(self, String name) -&gt; int</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasOption" type="bool" overloaded="no">
-        <autodoc>HasOption(self, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CountColours" type="unsigned long" overloaded="no">
-        <autodoc>CountColours(self, unsigned long stopafter=(unsigned long) -1) -&gt; unsigned long</autodoc>
-        <paramlist>
-          <param name="stopafter" type="unsigned long" default="(unsigned long) -1"/>
-        </paramlist>
-      </method>
-      <method name="ComputeHistogram" type="unsigned long" overloaded="no">
-        <autodoc>ComputeHistogram(self, ImageHistogram h) -&gt; unsigned long</autodoc>
-        <paramlist>
-          <param name="h" type="ImageHistogram" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="AddHandler" type="" overloaded="no">
-        <autodoc>AddHandler(ImageHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="ImageHandler" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="InsertHandler" type="" overloaded="no">
-        <autodoc>InsertHandler(ImageHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="ImageHandler" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="RemoveHandler" type="bool" overloaded="no">
-        <autodoc>RemoveHandler(String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetImageExtWildcard" type="String" overloaded="no">
-        <autodoc>GetImageExtWildcard() -&gt; String</autodoc>
-      </staticmethod>
-      <method name="ConvertToBitmap" type="wxBitmap" overloaded="no">
-        <autodoc>ConvertToBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="ConvertToMonoBitmap" type="wxBitmap" overloaded="no">
-        <autodoc>ConvertToMonoBitmap(self, unsigned char red, unsigned char green, unsigned char blue) -&gt; Bitmap</autodoc>
-        <paramlist>
-          <param name="red" type="unsigned char" default=""/>
-          <param name="green" type="unsigned char" default=""/>
-          <param name="blue" type="unsigned char" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-    def InitAllImageHandlers():
-        """
-        The former functionality of InitAllImageHanders is now done internal to
-        the _core_ extension module and so this function has become a simple NOP.
-        """
-        pass
-</pythoncode>
-    <class name="BMPHandler" oldname="wxBMPHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="BMPHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; BMPHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="ICOHandler" oldname="wxICOHandler" module="_core">
-      <baseclass name="BMPHandler"/>
-      <constructor name="ICOHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; ICOHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="CURHandler" oldname="wxCURHandler" module="_core">
-      <baseclass name="ICOHandler"/>
-      <constructor name="CURHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; CURHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="ANIHandler" oldname="wxANIHandler" module="_core">
-      <baseclass name="CURHandler"/>
-      <constructor name="ANIHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; ANIHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="PNGHandler" oldname="wxPNGHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="PNGHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; PNGHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="GIFHandler" oldname="wxGIFHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="GIFHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; GIFHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="PCXHandler" oldname="wxPCXHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="PCXHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; PCXHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="JPEGHandler" oldname="wxJPEGHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="JPEGHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; JPEGHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="PNMHandler" oldname="wxPNMHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="PNMHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; PNMHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="XPMHandler" oldname="wxXPMHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="XPMHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; XPMHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="TIFFHandler" oldname="wxTIFFHandler" module="_core">
-      <baseclass name="ImageHandler"/>
-      <constructor name="TIFFHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; TIFFHandler</autodoc>
-      </constructor>
-    </class>
-    <class name="Quantize" oldname="wxQuantize" module="_core">
-      <docstring>Performs quantization, or colour reduction, on a wxImage.</docstring>
-      <staticmethod name="Quantize" type="bool" overloaded="no">
-        <autodoc>Quantize(Image src, Image dest, int desiredNoColours=236, int flags=wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE) -&gt; bool</autodoc>
-        <docstring>Reduce the colours in the source image and put the result into the
-destination image, setting the palette in the destination if
-needed. Both images may be the same, to overwrite the source image.
-:todo: Create a version that returns the wx.Palette used.</docstring>
-        <paramlist>
-          <param name="src" type="Image" default=""/>
-          <param name="dest" type="Image" default=""/>
-          <param name="desiredNoColours" type="int" default="236"/>
-          <param name="flags" type="int" default="wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="EvtHandler" oldname="wxEvtHandler" module="_core">
-      <baseclass name="Object"/>
-      <constructor name="EvtHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; EvtHandler</autodoc>
-      </constructor>
-      <method name="GetNextHandler" type="EvtHandler" overloaded="no">
-        <autodoc>GetNextHandler(self) -&gt; EvtHandler</autodoc>
-      </method>
-      <method name="GetPreviousHandler" type="EvtHandler" overloaded="no">
-        <autodoc>GetPreviousHandler(self) -&gt; EvtHandler</autodoc>
-      </method>
-      <method name="SetNextHandler" type="" overloaded="no">
-        <autodoc>SetNextHandler(self, EvtHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPreviousHandler" type="" overloaded="no">
-        <autodoc>SetPreviousHandler(self, EvtHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEvtHandlerEnabled" type="bool" overloaded="no">
-        <autodoc>GetEvtHandlerEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetEvtHandlerEnabled" type="" overloaded="no">
-        <autodoc>SetEvtHandlerEnabled(self, bool enabled)</autodoc>
-        <paramlist>
-          <param name="enabled" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="ProcessEvent" type="bool" overloaded="no">
-        <autodoc>ProcessEvent(self, Event event) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="event" type="wxEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddPendingEvent" type="" overloaded="no">
-        <autodoc>AddPendingEvent(self, Event event)</autodoc>
-        <paramlist>
-          <param name="event" type="wxEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="ProcessPendingEvents" type="" overloaded="no">
-        <autodoc>ProcessPendingEvents(self)</autodoc>
-      </method>
-      <method name="Connect" type="" overloaded="no">
-        <autodoc>Connect(self, int id, int lastId, int eventType, PyObject func)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="lastId" type="int" default=""/>
-          <param name="eventType" type="int" default=""/>
-          <param name="func" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Disconnect" type="bool" overloaded="no">
-        <autodoc>Disconnect(self, int id, int lastId=-1, wxEventType eventType=wxEVT_NULL) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="lastId" type="int" default="-1"/>
-          <param name="eventType" type="wxEventType" default="wxEVT_NULL"/>
-        </paramlist>
-      </method>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-
-#---------------------------------------------------------------------------
-
-class PyEventBinder(object):
-    """
-    Instances of this class are used to bind specific events to event
-    handlers.
-    """
-    def __init__(self, evtType, expectedIDs=0):
-        if expectedIDs not in [0, 1, 2]:
-            raise ValueError, "Invalid number of expectedIDs"
-        self.expectedIDs = expectedIDs
-
-        if type(evtType) == list or type(evtType) == tuple:
-            self.evtType = evtType
-        else:
-            self.evtType = [evtType]
-
-
-    def Bind(self, target, id1, id2, function):
-        """Bind this set of event types to target."""
-        for et in self.evtType:
-            target.Connect(id1, id2, et, function)
-
-
-    def Unbind(self, target, id1, id2):
-        """Remove an event binding."""
-        success = 0
-        for et in self.evtType:
-            success += target.Disconnect(id1, id2, et)
-        return success != 0
-
-    
-    def __call__(self, *args):
-        """
-        For backwards compatibility with the old EVT_* functions.
-        Should be called with either (window, func), (window, ID,
-        func) or (window, ID1, ID2, func) parameters depending on the
-        type of the event.
-        """
-        assert len(args) == 2 + self.expectedIDs
-        id1 = wx.ID_ANY
-        id2 = wx.ID_ANY
-        target = args[0]
-        if self.expectedIDs == 0:
-            func = args[1]
-        elif self.expectedIDs == 1:
-            id1 = args[1]
-            func = args[2]
-        elif self.expectedIDs == 2:
-            id1 = args[1]
-            id2 = args[2]
-            func = args[3]
-        else:
-            raise ValueError, "Unexpected number of IDs"
-
-        self.Bind(target, id1, id2, func)
-
-
-# These two are square pegs that don't fit the PyEventBinder hole...
-def EVT_COMMAND(win, id, cmd, func):
-    win.Connect(id, -1, cmd, func)
-def EVT_COMMAND_RANGE(win, id1, id2, cmd, func):
-    win.Connect(id1, id2, cmd, func)
-
-    
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <method name="NewEventType" oldname="wxNewEventType" type="wxEventType" overloaded="no">
-      <autodoc>NewEventType() -&gt; wxEventType</autodoc>
-    </method>
-    <pythoncode>
-#
-# Create some event binders
-EVT_SIZE = wx.PyEventBinder( wxEVT_SIZE )
-EVT_SIZING = wx.PyEventBinder( wxEVT_SIZING )
-EVT_MOVE = wx.PyEventBinder( wxEVT_MOVE )
-EVT_MOVING = wx.PyEventBinder( wxEVT_MOVING )
-EVT_CLOSE = wx.PyEventBinder( wxEVT_CLOSE_WINDOW )
-EVT_END_SESSION = wx.PyEventBinder( wxEVT_END_SESSION )
-EVT_QUERY_END_SESSION = wx.PyEventBinder( wxEVT_QUERY_END_SESSION )
-EVT_PAINT = wx.PyEventBinder( wxEVT_PAINT )
-EVT_NC_PAINT = wx.PyEventBinder( wxEVT_NC_PAINT )
-EVT_ERASE_BACKGROUND = wx.PyEventBinder( wxEVT_ERASE_BACKGROUND )
-EVT_CHAR = wx.PyEventBinder( wxEVT_CHAR )
-EVT_KEY_DOWN = wx.PyEventBinder( wxEVT_KEY_DOWN )
-EVT_KEY_UP = wx.PyEventBinder( wxEVT_KEY_UP )
-EVT_HOTKEY = wx.PyEventBinder( wxEVT_HOTKEY, 1) 
-EVT_CHAR_HOOK = wx.PyEventBinder( wxEVT_CHAR_HOOK )
-EVT_MENU_OPEN = wx.PyEventBinder( wxEVT_MENU_OPEN )
-EVT_MENU_CLOSE = wx.PyEventBinder( wxEVT_MENU_CLOSE )
-EVT_MENU_HIGHLIGHT = wx.PyEventBinder( wxEVT_MENU_HIGHLIGHT, 1)
-EVT_MENU_HIGHLIGHT_ALL = wx.PyEventBinder( wxEVT_MENU_HIGHLIGHT )
-EVT_SET_FOCUS = wx.PyEventBinder( wxEVT_SET_FOCUS )
-EVT_KILL_FOCUS = wx.PyEventBinder( wxEVT_KILL_FOCUS )
-EVT_CHILD_FOCUS = wx.PyEventBinder( wxEVT_CHILD_FOCUS )
-EVT_ACTIVATE = wx.PyEventBinder( wxEVT_ACTIVATE )
-EVT_ACTIVATE_APP = wx.PyEventBinder( wxEVT_ACTIVATE_APP )
-EVT_END_SESSION = wx.PyEventBinder( wxEVT_END_SESSION )
-EVT_QUERY_END_SESSION = wx.PyEventBinder( wxEVT_QUERY_END_SESSION )
-EVT_DROP_FILES = wx.PyEventBinder( wxEVT_DROP_FILES )
-EVT_INIT_DIALOG = wx.PyEventBinder( wxEVT_INIT_DIALOG )
-EVT_SYS_COLOUR_CHANGED = wx.PyEventBinder( wxEVT_SYS_COLOUR_CHANGED )
-EVT_DISPLAY_CHANGED = wx.PyEventBinder( wxEVT_DISPLAY_CHANGED )
-EVT_SHOW = wx.PyEventBinder( wxEVT_SHOW )
-EVT_MAXIMIZE = wx.PyEventBinder( wxEVT_MAXIMIZE )
-EVT_ICONIZE = wx.PyEventBinder( wxEVT_ICONIZE )
-EVT_NAVIGATION_KEY = wx.PyEventBinder( wxEVT_NAVIGATION_KEY )
-EVT_PALETTE_CHANGED = wx.PyEventBinder( wxEVT_PALETTE_CHANGED )
-EVT_QUERY_NEW_PALETTE = wx.PyEventBinder( wxEVT_QUERY_NEW_PALETTE )
-EVT_WINDOW_CREATE = wx.PyEventBinder( wxEVT_CREATE )
-EVT_WINDOW_DESTROY = wx.PyEventBinder( wxEVT_DESTROY )
-EVT_SET_CURSOR = wx.PyEventBinder( wxEVT_SET_CURSOR )
-EVT_MOUSE_CAPTURE_CHANGED = wx.PyEventBinder( wxEVT_MOUSE_CAPTURE_CHANGED )
-
-EVT_LEFT_DOWN = wx.PyEventBinder( wxEVT_LEFT_DOWN )
-EVT_LEFT_UP = wx.PyEventBinder( wxEVT_LEFT_UP )
-EVT_MIDDLE_DOWN = wx.PyEventBinder( wxEVT_MIDDLE_DOWN )
-EVT_MIDDLE_UP = wx.PyEventBinder( wxEVT_MIDDLE_UP )
-EVT_RIGHT_DOWN = wx.PyEventBinder( wxEVT_RIGHT_DOWN )
-EVT_RIGHT_UP = wx.PyEventBinder( wxEVT_RIGHT_UP )
-EVT_MOTION = wx.PyEventBinder( wxEVT_MOTION )
-EVT_LEFT_DCLICK = wx.PyEventBinder( wxEVT_LEFT_DCLICK )
-EVT_MIDDLE_DCLICK = wx.PyEventBinder( wxEVT_MIDDLE_DCLICK )
-EVT_RIGHT_DCLICK = wx.PyEventBinder( wxEVT_RIGHT_DCLICK )
-EVT_LEAVE_WINDOW = wx.PyEventBinder( wxEVT_LEAVE_WINDOW )
-EVT_ENTER_WINDOW = wx.PyEventBinder( wxEVT_ENTER_WINDOW )
-EVT_MOUSEWHEEL = wx.PyEventBinder( wxEVT_MOUSEWHEEL )
-
-EVT_MOUSE_EVENTS = wx.PyEventBinder([ wxEVT_LEFT_DOWN,
-                                     wxEVT_LEFT_UP,
-                                     wxEVT_MIDDLE_DOWN,
-                                     wxEVT_MIDDLE_UP,
-                                     wxEVT_RIGHT_DOWN,
-                                     wxEVT_RIGHT_UP,
-                                     wxEVT_MOTION,
-                                     wxEVT_LEFT_DCLICK,
-                                     wxEVT_MIDDLE_DCLICK,
-                                     wxEVT_RIGHT_DCLICK,
-                                     wxEVT_ENTER_WINDOW,
-                                     wxEVT_LEAVE_WINDOW,
-                                     wxEVT_MOUSEWHEEL
-                                     ])
-
-
-# Scrolling from wxWindow (sent to wxScrolledWindow)
-EVT_SCROLLWIN = wx.PyEventBinder([ wxEVT_SCROLLWIN_TOP, 
-                                  wxEVT_SCROLLWIN_BOTTOM,
-                                  wxEVT_SCROLLWIN_LINEUP,
-                                  wxEVT_SCROLLWIN_LINEDOWN,
-                                  wxEVT_SCROLLWIN_PAGEUP, 
-                                  wxEVT_SCROLLWIN_PAGEDOWN,
-                                  wxEVT_SCROLLWIN_THUMBTRACK,
-                                  wxEVT_SCROLLWIN_THUMBRELEASE,
-                                  ])
-
-EVT_SCROLLWIN_TOP = wx.PyEventBinder( wxEVT_SCROLLWIN_TOP )
-EVT_SCROLLWIN_BOTTOM = wx.PyEventBinder( wxEVT_SCROLLWIN_BOTTOM )
-EVT_SCROLLWIN_LINEUP = wx.PyEventBinder( wxEVT_SCROLLWIN_LINEUP )
-EVT_SCROLLWIN_LINEDOWN = wx.PyEventBinder( wxEVT_SCROLLWIN_LINEDOWN )
-EVT_SCROLLWIN_PAGEUP = wx.PyEventBinder( wxEVT_SCROLLWIN_PAGEUP )
-EVT_SCROLLWIN_PAGEDOWN = wx.PyEventBinder( wxEVT_SCROLLWIN_PAGEDOWN )
-EVT_SCROLLWIN_THUMBTRACK = wx.PyEventBinder( wxEVT_SCROLLWIN_THUMBTRACK )
-EVT_SCROLLWIN_THUMBRELEASE = wx.PyEventBinder( wxEVT_SCROLLWIN_THUMBRELEASE )
-
-# Scrolling from wxSlider and wxScrollBar
-EVT_SCROLL = wx.PyEventBinder([ wxEVT_SCROLL_TOP, 
-                               wxEVT_SCROLL_BOTTOM, 
-                               wxEVT_SCROLL_LINEUP, 
-                               wxEVT_SCROLL_LINEDOWN, 
-                               wxEVT_SCROLL_PAGEUP, 
-                               wxEVT_SCROLL_PAGEDOWN, 
-                               wxEVT_SCROLL_THUMBTRACK, 
-                               wxEVT_SCROLL_THUMBRELEASE, 
-                               wxEVT_SCROLL_ENDSCROLL,
-                               ])
-
-EVT_SCROLL_TOP = wx.PyEventBinder( wxEVT_SCROLL_TOP )
-EVT_SCROLL_BOTTOM = wx.PyEventBinder( wxEVT_SCROLL_BOTTOM )
-EVT_SCROLL_LINEUP = wx.PyEventBinder( wxEVT_SCROLL_LINEUP )
-EVT_SCROLL_LINEDOWN = wx.PyEventBinder( wxEVT_SCROLL_LINEDOWN )
-EVT_SCROLL_PAGEUP = wx.PyEventBinder( wxEVT_SCROLL_PAGEUP )
-EVT_SCROLL_PAGEDOWN = wx.PyEventBinder( wxEVT_SCROLL_PAGEDOWN )
-EVT_SCROLL_THUMBTRACK = wx.PyEventBinder( wxEVT_SCROLL_THUMBTRACK )
-EVT_SCROLL_THUMBRELEASE = wx.PyEventBinder( wxEVT_SCROLL_THUMBRELEASE )
-EVT_SCROLL_ENDSCROLL = wx.PyEventBinder( wxEVT_SCROLL_ENDSCROLL )
-
-# Scrolling from wxSlider and wxScrollBar, with an id
-EVT_COMMAND_SCROLL = wx.PyEventBinder([ wxEVT_SCROLL_TOP, 
-                                       wxEVT_SCROLL_BOTTOM, 
-                                       wxEVT_SCROLL_LINEUP, 
-                                       wxEVT_SCROLL_LINEDOWN, 
-                                       wxEVT_SCROLL_PAGEUP, 
-                                       wxEVT_SCROLL_PAGEDOWN, 
-                                       wxEVT_SCROLL_THUMBTRACK, 
-                                       wxEVT_SCROLL_THUMBRELEASE,
-                                       wxEVT_SCROLL_ENDSCROLL,
-                                       ], 1)
-
-EVT_COMMAND_SCROLL_TOP = wx.PyEventBinder( wxEVT_SCROLL_TOP, 1)
-EVT_COMMAND_SCROLL_BOTTOM = wx.PyEventBinder( wxEVT_SCROLL_BOTTOM, 1)
-EVT_COMMAND_SCROLL_LINEUP = wx.PyEventBinder( wxEVT_SCROLL_LINEUP, 1)
-EVT_COMMAND_SCROLL_LINEDOWN = wx.PyEventBinder( wxEVT_SCROLL_LINEDOWN, 1)
-EVT_COMMAND_SCROLL_PAGEUP = wx.PyEventBinder( wxEVT_SCROLL_PAGEUP, 1)
-EVT_COMMAND_SCROLL_PAGEDOWN = wx.PyEventBinder( wxEVT_SCROLL_PAGEDOWN, 1)
-EVT_COMMAND_SCROLL_THUMBTRACK = wx.PyEventBinder( wxEVT_SCROLL_THUMBTRACK, 1)
-EVT_COMMAND_SCROLL_THUMBRELEASE = wx.PyEventBinder( wxEVT_SCROLL_THUMBRELEASE, 1)
-EVT_COMMAND_SCROLL_ENDSCROLL = wx.PyEventBinder( wxEVT_SCROLL_ENDSCROLL, 1)
-
-EVT_BUTTON = wx.PyEventBinder( wxEVT_COMMAND_BUTTON_CLICKED, 1)
-EVT_CHECKBOX = wx.PyEventBinder( wxEVT_COMMAND_CHECKBOX_CLICKED, 1)
-EVT_CHOICE = wx.PyEventBinder( wxEVT_COMMAND_CHOICE_SELECTED, 1)
-EVT_LISTBOX = wx.PyEventBinder( wxEVT_COMMAND_LISTBOX_SELECTED, 1)
-EVT_LISTBOX_DCLICK = wx.PyEventBinder( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 1)
-EVT_MENU = wx.PyEventBinder( wxEVT_COMMAND_MENU_SELECTED, 1)
-EVT_MENU_RANGE = wx.PyEventBinder( wxEVT_COMMAND_MENU_SELECTED, 2)
-EVT_SLIDER = wx.PyEventBinder( wxEVT_COMMAND_SLIDER_UPDATED, 1)
-EVT_RADIOBOX = wx.PyEventBinder( wxEVT_COMMAND_RADIOBOX_SELECTED, 1)
-EVT_RADIOBUTTON = wx.PyEventBinder( wxEVT_COMMAND_RADIOBUTTON_SELECTED, 1)
-
-EVT_SCROLLBAR = wx.PyEventBinder( wxEVT_COMMAND_SCROLLBAR_UPDATED, 1)
-EVT_VLBOX = wx.PyEventBinder( wxEVT_COMMAND_VLBOX_SELECTED, 1)
-EVT_COMBOBOX = wx.PyEventBinder( wxEVT_COMMAND_COMBOBOX_SELECTED, 1)
-EVT_TOOL = wx.PyEventBinder( wxEVT_COMMAND_TOOL_CLICKED, 1)
-EVT_TOOL_RANGE = wx.PyEventBinder( wxEVT_COMMAND_TOOL_CLICKED, 2)
-EVT_TOOL_RCLICKED = wx.PyEventBinder( wxEVT_COMMAND_TOOL_RCLICKED, 1)
-EVT_TOOL_RCLICKED_RANGE = wx.PyEventBinder( wxEVT_COMMAND_TOOL_RCLICKED, 2)
-EVT_TOOL_ENTER = wx.PyEventBinder( wxEVT_COMMAND_TOOL_ENTER, 1)
-EVT_CHECKLISTBOX = wx.PyEventBinder( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 1)
-
-
-EVT_COMMAND_LEFT_CLICK = wx.PyEventBinder( wxEVT_COMMAND_LEFT_CLICK, 1)
-EVT_COMMAND_LEFT_DCLICK = wx.PyEventBinder( wxEVT_COMMAND_LEFT_DCLICK, 1)
-EVT_COMMAND_RIGHT_CLICK = wx.PyEventBinder( wxEVT_COMMAND_RIGHT_CLICK, 1)
-EVT_COMMAND_RIGHT_DCLICK = wx.PyEventBinder( wxEVT_COMMAND_RIGHT_DCLICK, 1)
-EVT_COMMAND_SET_FOCUS = wx.PyEventBinder( wxEVT_COMMAND_SET_FOCUS, 1)
-EVT_COMMAND_KILL_FOCUS = wx.PyEventBinder( wxEVT_COMMAND_KILL_FOCUS, 1)
-EVT_COMMAND_ENTER = wx.PyEventBinder( wxEVT_COMMAND_ENTER, 1)
-
-EVT_IDLE = wx.PyEventBinder( wxEVT_IDLE )
-
-EVT_UPDATE_UI = wx.PyEventBinder( wxEVT_UPDATE_UI, 1)
-EVT_UPDATE_UI_RANGE = wx.PyEventBinder( wxEVT_UPDATE_UI, 2)
-
-EVT_CONTEXT_MENU = wx.PyEventBinder( wxEVT_CONTEXT_MENU )
-
-
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Event" oldname="wxEvent" module="_core">
-      <baseclass name="Object"/>
-      <destructor name="~wxEvent" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetEventType" type="" overloaded="no">
-        <autodoc>SetEventType(self, wxEventType typ)</autodoc>
-        <paramlist>
-          <param name="typ" type="wxEventType" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEventType" type="wxEventType" overloaded="no">
-        <autodoc>GetEventType(self) -&gt; wxEventType</autodoc>
-      </method>
-      <method name="GetEventObject" type="Object" overloaded="no">
-        <autodoc>GetEventObject(self) -&gt; Object</autodoc>
-      </method>
-      <method name="SetEventObject" type="" overloaded="no">
-        <autodoc>SetEventObject(self, Object obj)</autodoc>
-        <paramlist>
-          <param name="obj" type="Object" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTimestamp" type="long" overloaded="no">
-        <autodoc>GetTimestamp(self) -&gt; long</autodoc>
-      </method>
-      <method name="SetTimestamp" type="" overloaded="no">
-        <autodoc>SetTimestamp(self, long ts=0)</autodoc>
-        <paramlist>
-          <param name="ts" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, int Id)</autodoc>
-        <paramlist>
-          <param name="Id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsCommandEvent" type="bool" overloaded="no">
-        <autodoc>IsCommandEvent(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Skip" type="" overloaded="no">
-        <autodoc>Skip(self, bool skip=True)</autodoc>
-        <paramlist>
-          <param name="skip" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetSkipped" type="bool" overloaded="no">
-        <autodoc>GetSkipped(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShouldPropagate" type="bool" overloaded="no">
-        <autodoc>ShouldPropagate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="StopPropagation" type="int" overloaded="no">
-        <autodoc>StopPropagation(self) -&gt; int</autodoc>
-      </method>
-      <method name="ResumePropagation" type="" overloaded="no">
-        <autodoc>ResumePropagation(self, int propagationLevel)</autodoc>
-        <paramlist>
-          <param name="propagationLevel" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clone" type="Event" overloaded="no">
-        <autodoc>Clone(self) -&gt; Event</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PropagationDisabler" oldname="wxPropagationDisabler" module="_core">
-      <constructor name="PropagationDisabler" overloaded="no">
-        <autodoc>__init__(self, Event event) -&gt; PropagationDisabler</autodoc>
-        <paramlist>
-          <param name="event" type="Event" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPropagationDisabler" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="PropagateOnce" oldname="wxPropagateOnce" module="_core">
-      <constructor name="PropagateOnce" overloaded="no">
-        <autodoc>__init__(self, Event event) -&gt; PropagateOnce</autodoc>
-        <paramlist>
-          <param name="event" type="Event" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPropagateOnce" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="CommandEvent" oldname="wxCommandEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="CommandEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int winid=0) -&gt; CommandEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetString" type="" overloaded="no">
-        <autodoc>SetString(self, String s)</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetString" type="String" overloaded="no">
-        <autodoc>GetString(self) -&gt; String</autodoc>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsSelection" type="bool" overloaded="no">
-        <autodoc>IsSelection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetExtraLong" type="" overloaded="no">
-        <autodoc>SetExtraLong(self, long extraLong)</autodoc>
-        <paramlist>
-          <param name="extraLong" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetExtraLong" type="long" overloaded="no">
-        <autodoc>GetExtraLong(self) -&gt; long</autodoc>
-      </method>
-      <method name="SetInt" type="" overloaded="no">
-        <autodoc>SetInt(self, int i)</autodoc>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetInt" type="long" overloaded="no">
-        <autodoc>GetInt(self) -&gt; long</autodoc>
-      </method>
-      <method name="Clone" type="Event" overloaded="no">
-        <autodoc>Clone(self) -&gt; Event</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="NotifyEvent" oldname="wxNotifyEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="NotifyEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int winid=0) -&gt; NotifyEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="Veto" type="" overloaded="no">
-        <autodoc>Veto(self)</autodoc>
-      </method>
-      <method name="Allow" type="" overloaded="no">
-        <autodoc>Allow(self)</autodoc>
-      </method>
-      <method name="IsAllowed" type="bool" overloaded="no">
-        <autodoc>IsAllowed(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ScrollEvent" oldname="wxScrollEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="ScrollEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int winid=0, int pos=0, 
-    int orient=0) -&gt; ScrollEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-          <param name="pos" type="int" default="0"/>
-          <param name="orient" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetOrientation" type="int" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosition" type="int" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orient)</autodoc>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ScrollWinEvent" oldname="wxScrollWinEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="ScrollWinEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int pos=0, int orient=0) -&gt; ScrollWinEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="pos" type="int" default="0"/>
-          <param name="orient" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetOrientation" type="int" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosition" type="int" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orient)</autodoc>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MouseEvent" oldname="wxMouseEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="MouseEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType mouseType=wxEVT_NULL) -&gt; MouseEvent</autodoc>
-        <paramlist>
-          <param name="mouseType" type="wxEventType" default="wxEVT_NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="IsButton" type="bool" overloaded="no">
-        <autodoc>IsButton(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ButtonDown" type="bool" overloaded="no">
-        <autodoc>ButtonDown(self, int but=MOUSE_BTN_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxMOUSE_BTN_ANY"/>
-        </paramlist>
-      </method>
-      <method name="ButtonDClick" type="bool" overloaded="no">
-        <autodoc>ButtonDClick(self, int but=MOUSE_BTN_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxMOUSE_BTN_ANY"/>
-        </paramlist>
-      </method>
-      <method name="ButtonUp" type="bool" overloaded="no">
-        <autodoc>ButtonUp(self, int but=MOUSE_BTN_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxMOUSE_BTN_ANY"/>
-        </paramlist>
-      </method>
-      <method name="Button" type="bool" overloaded="no">
-        <autodoc>Button(self, int but) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ButtonIsDown" type="bool" overloaded="no">
-        <autodoc>ButtonIsDown(self, int but) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetButton" type="int" overloaded="no">
-        <autodoc>GetButton(self) -&gt; int</autodoc>
-      </method>
-      <method name="ControlDown" type="bool" overloaded="no">
-        <autodoc>ControlDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MetaDown" type="bool" overloaded="no">
-        <autodoc>MetaDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AltDown" type="bool" overloaded="no">
-        <autodoc>AltDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShiftDown" type="bool" overloaded="no">
-        <autodoc>ShiftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CmdDown" type="bool" overloaded="no">
-        <autodoc>CmdDown(self) -&gt; bool</autodoc>
-        <docstring>"Cmd" is a pseudo key which is the same as Control for PC and Unix
-platforms but the special "Apple" (a.k.a as "Command") key on
-Macs: it makes often sense to use it instead of, say, `ControlDown`
-because Cmd key is used for the same thing under Mac as Ctrl
-elsewhere. The Ctrl still exists, it's just not used for this
-purpose. So for non-Mac platforms this is the same as `ControlDown`
-and Macs this is the same as `MetaDown`.</docstring>
-      </method>
-      <method name="LeftDown" type="bool" overloaded="no">
-        <autodoc>LeftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MiddleDown" type="bool" overloaded="no">
-        <autodoc>MiddleDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RightDown" type="bool" overloaded="no">
-        <autodoc>RightDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="LeftUp" type="bool" overloaded="no">
-        <autodoc>LeftUp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MiddleUp" type="bool" overloaded="no">
-        <autodoc>MiddleUp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RightUp" type="bool" overloaded="no">
-        <autodoc>RightUp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="LeftDClick" type="bool" overloaded="no">
-        <autodoc>LeftDClick(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MiddleDClick" type="bool" overloaded="no">
-        <autodoc>MiddleDClick(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RightDClick" type="bool" overloaded="no">
-        <autodoc>RightDClick(self) -&gt; bool</autodoc>
-      </method>
-      <method name="LeftIsDown" type="bool" overloaded="no">
-        <autodoc>LeftIsDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MiddleIsDown" type="bool" overloaded="no">
-        <autodoc>MiddleIsDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RightIsDown" type="bool" overloaded="no">
-        <autodoc>RightIsDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Dragging" type="bool" overloaded="no">
-        <autodoc>Dragging(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Moving" type="bool" overloaded="no">
-        <autodoc>Moving(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Entering" type="bool" overloaded="no">
-        <autodoc>Entering(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Leaving" type="bool" overloaded="no">
-        <autodoc>Leaving(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Returns the position of the mouse in window coordinates when the event
-happened.</docstring>
-      </method>
-      <method name="GetPositionTuple" type="" overloaded="no">
-        <autodoc>GetPositionTuple() -&gt; (x,y)</autodoc>
-        <docstring>Returns the position of the mouse in window coordinates when the event
-happened.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLogicalPosition" type="Point" overloaded="no">
-        <autodoc>GetLogicalPosition(self, DC dc) -&gt; Point</autodoc>
-        <paramlist>
-          <param name="dc" type="wxDC" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWheelRotation" type="int" overloaded="no">
-        <autodoc>GetWheelRotation(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWheelDelta" type="int" overloaded="no">
-        <autodoc>GetWheelDelta(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLinesPerAction" type="int" overloaded="no">
-        <autodoc>GetLinesPerAction(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsPageScroll" type="bool" overloaded="no">
-        <autodoc>IsPageScroll(self) -&gt; bool</autodoc>
-      </method>
-      <property name="m_x" type="int" readonly="no"/>
-      <property name="m_y" type="int" readonly="no"/>
-      <property name="m_leftDown" type="bool" readonly="no"/>
-      <property name="m_middleDown" type="bool" readonly="no"/>
-      <property name="m_rightDown" type="bool" readonly="no"/>
-      <property name="m_controlDown" type="bool" readonly="no"/>
-      <property name="m_shiftDown" type="bool" readonly="no"/>
-      <property name="m_altDown" type="bool" readonly="no"/>
-      <property name="m_metaDown" type="bool" readonly="no"/>
-      <property name="m_wheelRotation" type="int" readonly="no"/>
-      <property name="m_wheelDelta" type="int" readonly="no"/>
-      <property name="m_linesPerAction" type="int" readonly="no"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SetCursorEvent" oldname="wxSetCursorEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="SetCursorEvent" overloaded="no">
-        <autodoc>__init__(self, int x=0, int y=0) -&gt; SetCursorEvent</autodoc>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCursor" type="" overloaded="no">
-        <autodoc>SetCursor(self, Cursor cursor)</autodoc>
-        <paramlist>
-          <param name="cursor" type="wxCursor" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCursor" type="wxCursor" overloaded="no">
-        <autodoc>GetCursor(self) -&gt; Cursor</autodoc>
-      </method>
-      <method name="HasCursor" type="bool" overloaded="no">
-        <autodoc>HasCursor(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="KeyEvent" oldname="wxKeyEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="KeyEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType keyType=wxEVT_NULL) -&gt; KeyEvent</autodoc>
-        <paramlist>
-          <param name="keyType" type="wxEventType" default="wxEVT_NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="ControlDown" type="bool" overloaded="no">
-        <autodoc>ControlDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MetaDown" type="bool" overloaded="no">
-        <autodoc>MetaDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AltDown" type="bool" overloaded="no">
-        <autodoc>AltDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShiftDown" type="bool" overloaded="no">
-        <autodoc>ShiftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CmdDown" type="bool" overloaded="no">
-        <autodoc>CmdDown(self) -&gt; bool</autodoc>
-        <docstring>"Cmd" is a pseudo key which is the same as Control for PC and Unix
-platforms but the special "Apple" (a.k.a as "Command") key on
-Macs: it makes often sense to use it instead of, say, `ControlDown`
-because Cmd key is used for the same thing under Mac as Ctrl
-elsewhere. The Ctrl still exists, it's just not used for this
-purpose. So for non-Mac platforms this is the same as `ControlDown`
-and Macs this is the same as `MetaDown`.</docstring>
-      </method>
-      <method name="HasModifiers" type="bool" overloaded="no">
-        <autodoc>HasModifiers(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetKeyCode" type="int" overloaded="no">
-        <autodoc>GetKeyCode(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUnicodeKey" type="int" overloaded="no">
-        <autodoc>GetUnicodeKey(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRawKeyCode" type="unsigned int" overloaded="no">
-        <autodoc>GetRawKeyCode(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="GetRawKeyFlags" type="unsigned int" overloaded="no">
-        <autodoc>GetRawKeyFlags(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Find the position of the event.</docstring>
-      </method>
-      <method name="GetPositionTuple" type="" overloaded="no">
-        <autodoc>GetPositionTuple() -&gt; (x,y)</autodoc>
-        <docstring>Find the position of the event.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <property name="m_x" type="int" readonly="no"/>
-      <property name="m_y" type="int" readonly="no"/>
-      <property name="m_keyCode" type="long" readonly="no"/>
-      <property name="m_controlDown" type="bool" readonly="no"/>
-      <property name="m_shiftDown" type="bool" readonly="no"/>
-      <property name="m_altDown" type="bool" readonly="no"/>
-      <property name="m_metaDown" type="bool" readonly="no"/>
-      <property name="m_scanCode" type="bool" readonly="no"/>
-      <property name="m_rawCode" type="unsigned int" readonly="no"/>
-      <property name="m_rawFlags" type="unsigned int" readonly="no"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SizeEvent" oldname="wxSizeEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="SizeEvent" overloaded="no">
-        <autodoc>__init__(self, Size sz=DefaultSize, int winid=0) -&gt; SizeEvent</autodoc>
-        <paramlist>
-          <param name="sz" type="Size" default="wxDefaultSize"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetRect" type="Rect" overloaded="no">
-        <autodoc>GetRect(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="SetRect" type="" overloaded="no">
-        <autodoc>SetRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <property name="m_size" type="Size" readonly="no"/>
-      <property name="m_rect" type="Rect" readonly="no"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MoveEvent" oldname="wxMoveEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="MoveEvent" overloaded="no">
-        <autodoc>__init__(self, Point pos=DefaultPosition, int winid=0) -&gt; MoveEvent</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetRect" type="Rect" overloaded="no">
-        <autodoc>GetRect(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="SetRect" type="" overloaded="no">
-        <autodoc>SetRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <property name="m_pos" type="Point" readonly="no"/>
-      <property name="m_rect" type="Rect" readonly="no"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PaintEvent" oldname="wxPaintEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="PaintEvent" overloaded="no">
-        <autodoc>__init__(self, int Id=0) -&gt; PaintEvent</autodoc>
-        <paramlist>
-          <param name="Id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="NcPaintEvent" oldname="wxNcPaintEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="NcPaintEvent" overloaded="no">
-        <autodoc>__init__(self, int winid=0) -&gt; NcPaintEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="EraseEvent" oldname="wxEraseEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="EraseEvent" overloaded="no">
-        <autodoc>__init__(self, int Id=0, DC dc=(wxDC *) NULL) -&gt; EraseEvent</autodoc>
-        <paramlist>
-          <param name="Id" type="int" default="0"/>
-          <param name="dc" type="wxDC" default="(wxDC *) NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetDC" type="wxDC" overloaded="no">
-        <autodoc>GetDC(self) -&gt; DC</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FocusEvent" oldname="wxFocusEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="FocusEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int winid=0) -&gt; FocusEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="SetWindow" type="" overloaded="no">
-        <autodoc>SetWindow(self, Window win)</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ChildFocusEvent" oldname="wxChildFocusEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="ChildFocusEvent" overloaded="no">
-        <autodoc>__init__(self, Window win=None) -&gt; ChildFocusEvent</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ActivateEvent" oldname="wxActivateEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="ActivateEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, bool active=True, int Id=0) -&gt; ActivateEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="active" type="bool" default="True"/>
-          <param name="Id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetActive" type="bool" overloaded="no">
-        <autodoc>GetActive(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="InitDialogEvent" oldname="wxInitDialogEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="InitDialogEvent" overloaded="no">
-        <autodoc>__init__(self, int Id=0) -&gt; InitDialogEvent</autodoc>
-        <paramlist>
-          <param name="Id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MenuEvent" oldname="wxMenuEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="MenuEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int winid=0, Menu menu=None) -&gt; MenuEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-          <param name="menu" type="wxMenu" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetMenuId" type="int" overloaded="no">
-        <autodoc>GetMenuId(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsPopup" type="bool" overloaded="no">
-        <autodoc>IsPopup(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetMenu" type="wxMenu" overloaded="no">
-        <autodoc>GetMenu(self) -&gt; Menu</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="CloseEvent" oldname="wxCloseEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="CloseEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int winid=0) -&gt; CloseEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetLoggingOff" type="" overloaded="no">
-        <autodoc>SetLoggingOff(self, bool logOff)</autodoc>
-        <paramlist>
-          <param name="logOff" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLoggingOff" type="bool" overloaded="no">
-        <autodoc>GetLoggingOff(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Veto" type="" overloaded="no">
-        <autodoc>Veto(self, bool veto=True)</autodoc>
-        <paramlist>
-          <param name="veto" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetCanVeto" type="" overloaded="no">
-        <autodoc>SetCanVeto(self, bool canVeto)</autodoc>
-        <paramlist>
-          <param name="canVeto" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanVeto" type="bool" overloaded="no">
-        <autodoc>CanVeto(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetVeto" type="bool" overloaded="no">
-        <autodoc>GetVeto(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ShowEvent" oldname="wxShowEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="ShowEvent" overloaded="no">
-        <autodoc>__init__(self, int winid=0, bool show=False) -&gt; ShowEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default="0"/>
-          <param name="show" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <method name="SetShow" type="" overloaded="no">
-        <autodoc>SetShow(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetShow" type="bool" overloaded="no">
-        <autodoc>GetShow(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="IconizeEvent" oldname="wxIconizeEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="IconizeEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0, bool iconized=True) -&gt; IconizeEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-          <param name="iconized" type="bool" default="True"/>
-        </paramlist>
-      </constructor>
-      <method name="Iconized" type="bool" overloaded="no">
-        <autodoc>Iconized(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MaximizeEvent" oldname="wxMaximizeEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="MaximizeEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0) -&gt; MaximizeEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DropFilesEvent" oldname="wxDropFilesEvent" module="_core">
-      <baseclass name="Event"/>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetNumberOfFiles" type="int" overloaded="no">
-        <autodoc>GetNumberOfFiles(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetFiles" type="PyObject" overloaded="no">
-        <autodoc>GetFiles(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="UpdateUIEvent" oldname="wxUpdateUIEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="UpdateUIEvent" overloaded="no">
-        <autodoc>__init__(self, int commandId=0) -&gt; UpdateUIEvent</autodoc>
-        <paramlist>
-          <param name="commandId" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetChecked" type="bool" overloaded="no">
-        <autodoc>GetChecked(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnabled" type="bool" overloaded="no">
-        <autodoc>GetEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetSetText" type="bool" overloaded="no">
-        <autodoc>GetSetText(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSetChecked" type="bool" overloaded="no">
-        <autodoc>GetSetChecked(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSetEnabled" type="bool" overloaded="no">
-        <autodoc>GetSetEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Check" type="" overloaded="no">
-        <autodoc>Check(self, bool check)</autodoc>
-        <paramlist>
-          <param name="check" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Enable" type="" overloaded="no">
-        <autodoc>Enable(self, bool enable)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="SetUpdateInterval" type="" overloaded="no">
-        <autodoc>SetUpdateInterval(long updateInterval)</autodoc>
-        <paramlist>
-          <param name="updateInterval" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetUpdateInterval" type="long" overloaded="no">
-        <autodoc>GetUpdateInterval() -&gt; long</autodoc>
-      </staticmethod>
-      <staticmethod name="CanUpdate" type="bool" overloaded="no">
-        <autodoc>CanUpdate(Window win) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="ResetUpdateTime" type="" overloaded="no">
-        <autodoc>ResetUpdateTime()</autodoc>
-      </staticmethod>
-      <staticmethod name="SetMode" type="" overloaded="no">
-        <autodoc>SetMode(int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="wxUpdateUIMode" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetMode" type="wxUpdateUIMode" overloaded="no">
-        <autodoc>GetMode() -&gt; int</autodoc>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SysColourChangedEvent" oldname="wxSysColourChangedEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="SysColourChangedEvent" overloaded="no">
-        <autodoc>__init__(self) -&gt; SysColourChangedEvent</autodoc>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MouseCaptureChangedEvent" oldname="wxMouseCaptureChangedEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="MouseCaptureChangedEvent" overloaded="no">
-        <autodoc>__init__(self, int winid=0, Window gainedCapture=None) -&gt; MouseCaptureChangedEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default="0"/>
-          <param name="gainedCapture" type="wxWindow" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetCapturedWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetCapturedWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DisplayChangedEvent" oldname="wxDisplayChangedEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="DisplayChangedEvent" overloaded="no">
-        <autodoc>__init__(self) -&gt; DisplayChangedEvent</autodoc>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PaletteChangedEvent" oldname="wxPaletteChangedEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="PaletteChangedEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0) -&gt; PaletteChangedEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetChangedWindow" type="" overloaded="no">
-        <autodoc>SetChangedWindow(self, Window win)</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetChangedWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetChangedWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="QueryNewPaletteEvent" oldname="wxQueryNewPaletteEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="QueryNewPaletteEvent" overloaded="no">
-        <autodoc>__init__(self, int winid=0) -&gt; QueryNewPaletteEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetPaletteRealized" type="" overloaded="no">
-        <autodoc>SetPaletteRealized(self, bool realized)</autodoc>
-        <paramlist>
-          <param name="realized" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPaletteRealized" type="bool" overloaded="no">
-        <autodoc>GetPaletteRealized(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="NavigationKeyEvent" oldname="wxNavigationKeyEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="NavigationKeyEvent" overloaded="no">
-        <autodoc>__init__(self) -&gt; NavigationKeyEvent</autodoc>
-      </constructor>
-      <method name="GetDirection" type="bool" overloaded="no">
-        <autodoc>GetDirection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetDirection" type="" overloaded="no">
-        <autodoc>SetDirection(self, bool forward)</autodoc>
-        <paramlist>
-          <param name="forward" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsWindowChange" type="bool" overloaded="no">
-        <autodoc>IsWindowChange(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetWindowChange" type="" overloaded="no">
-        <autodoc>SetWindowChange(self, bool ischange)</autodoc>
-        <paramlist>
-          <param name="ischange" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, long flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentFocus" type="wxWindow" overloaded="no">
-        <autodoc>GetCurrentFocus(self) -&gt; Window</autodoc>
-      </method>
-      <method name="SetCurrentFocus" type="" overloaded="no">
-        <autodoc>SetCurrentFocus(self, Window win)</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="WindowCreateEvent" oldname="wxWindowCreateEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="WindowCreateEvent" overloaded="no">
-        <autodoc>__init__(self, Window win=None) -&gt; WindowCreateEvent</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <class name="WindowDestroyEvent" oldname="wxWindowDestroyEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="WindowDestroyEvent" overloaded="no">
-        <autodoc>__init__(self, Window win=None) -&gt; WindowDestroyEvent</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ContextMenuEvent" oldname="wxContextMenuEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="ContextMenuEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int winid=0, Point pt=DefaultPosition) -&gt; ContextMenuEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-          <param name="pt" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="IdleEvent" oldname="wxIdleEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="IdleEvent" overloaded="no">
-        <autodoc>__init__(self) -&gt; IdleEvent</autodoc>
-      </constructor>
-      <method name="RequestMore" type="" overloaded="no">
-        <autodoc>RequestMore(self, bool needMore=True)</autodoc>
-        <paramlist>
-          <param name="needMore" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="MoreRequested" type="bool" overloaded="no">
-        <autodoc>MoreRequested(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="SetMode" type="" overloaded="no">
-        <autodoc>SetMode(int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="wxIdleMode" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetMode" type="wxIdleMode" overloaded="no">
-        <autodoc>GetMode() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="CanSend" type="bool" overloaded="no">
-        <autodoc>CanSend(Window win) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PyEvent" oldname="wxPyEvent" module="_core">
-      <baseclass name="Event"/>
-      <constructor name="PyEvent" overloaded="no">
-        <autodoc>__init__(self, int winid=0, wxEventType commandType=wxEVT_NULL) -&gt; PyEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default="0"/>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPyEvent" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetSelf" type="" overloaded="no">
-        <autodoc>SetSelf(self, PyObject self)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelf" type="PyObject" overloaded="no">
-        <autodoc>GetSelf(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <class name="PyCommandEvent" oldname="wxPyCommandEvent" module="_core">
-      <baseclass name="CommandEvent"/>
-      <constructor name="PyCommandEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0) -&gt; PyCommandEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPyCommandEvent" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetSelf" type="" overloaded="no">
-        <autodoc>SetSelf(self, PyObject self)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelf" type="PyObject" overloaded="no">
-        <autodoc>GetSelf(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PyApp" oldname="wxPyApp" module="_core">
-      <docstring>The ``wx.PyApp`` class is an *implementation detail*, please use the
-`wx.App` class (or some other derived class) instead.</docstring>
-      <baseclass name="EvtHandler"/>
-      <constructor name="PyApp" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyApp</autodoc>
-        <docstring>Create a new application object, starting the bootstrap process.</docstring>
-      </constructor>
-      <destructor name="~wxPyApp" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAppName" type="String" overloaded="no">
-        <autodoc>GetAppName(self) -&gt; String</autodoc>
-        <docstring>Get the application name.</docstring>
-      </method>
-      <method name="SetAppName" type="" overloaded="no">
-        <autodoc>SetAppName(self, String name)</autodoc>
-        <docstring>Set the application name. This value may be used automatically by
-`wx.Config` and such.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetClassName" type="String" overloaded="no">
-        <autodoc>GetClassName(self) -&gt; String</autodoc>
-        <docstring>Get the application's class name.</docstring>
-      </method>
-      <method name="SetClassName" type="" overloaded="no">
-        <autodoc>SetClassName(self, String name)</autodoc>
-        <docstring>Set the application's class name. This value may be used for
-X-resources if applicable for the platform</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetVendorName" type="String" overloaded="no">
-        <autodoc>GetVendorName(self) -&gt; String</autodoc>
-        <docstring>Get the application's vendor name.</docstring>
-      </method>
-      <method name="SetVendorName" type="" overloaded="no">
-        <autodoc>SetVendorName(self, String name)</autodoc>
-        <docstring>Set the application's vendor name. This value may be used
-automatically by `wx.Config` and such.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTraits" type="wxAppTraits" overloaded="no">
-        <autodoc>GetTraits(self) -&gt; wxAppTraits</autodoc>
-        <docstring>Return (and create if necessary) the app traits object to which we
-delegate for everything which either should be configurable by the
-user (then he can change the default behaviour simply by overriding
-CreateTraits() and returning his own traits object) or which is
-GUI/console dependent as then wx.AppTraits allows us to abstract the
-differences behind the common facade.
-
-:todo: Add support for overriding CreateAppTraits in wxPython.</docstring>
-      </method>
-      <method name="ProcessPendingEvents" type="" overloaded="no">
-        <autodoc>ProcessPendingEvents(self)</autodoc>
-        <docstring>Process all events in the Pending Events list -- it is necessary to
-call this function to process posted events. This normally happens
-during each event loop iteration.</docstring>
-      </method>
-      <method name="Yield" type="bool" overloaded="no">
-        <autodoc>Yield(self, bool onlyIfNeeded=False) -&gt; bool</autodoc>
-        <docstring>Process all currently pending events right now, instead of waiting
-until return to the event loop.  It is an error to call ``Yield``
-recursively unless the value of ``onlyIfNeeded`` is True.
-
-:warning: This function is dangerous as it can lead to unexpected
-      reentrancies (i.e. when called from an event handler it may
-      result in calling the same event handler again), use with
-      extreme care or, better, don't use at all!
-
-:see: `wx.Yield`, `wx.YieldIfNeeded`, `wx.SafeYield`
-</docstring>
-        <paramlist>
-          <param name="onlyIfNeeded" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="WakeUpIdle" type="" overloaded="no">
-        <autodoc>WakeUpIdle(self)</autodoc>
-        <docstring>Make sure that idle events are sent again.
-:see: `wx.WakeUpIdle`</docstring>
-      </method>
-      <method name="MainLoop" type="int" overloaded="no">
-        <autodoc>MainLoop(self) -&gt; int</autodoc>
-        <docstring>Execute the main GUI loop, the function doesn't normally return until
-all top level windows have been closed and destroyed.</docstring>
-      </method>
-      <method name="Exit" type="" overloaded="no">
-        <autodoc>Exit(self)</autodoc>
-        <docstring>Exit the main loop thus terminating the application.
-:see: `wx.Exit`</docstring>
-      </method>
-      <method name="ExitMainLoop" type="" overloaded="no">
-        <autodoc>ExitMainLoop(self)</autodoc>
-        <docstring>Exit the main GUI loop during the next iteration of the main
-loop, (i.e. it does not stop the program immediately!)</docstring>
-      </method>
-      <method name="Pending" type="bool" overloaded="no">
-        <autodoc>Pending(self) -&gt; bool</autodoc>
-        <docstring>Returns True if there are unprocessed events in the event queue.</docstring>
-      </method>
-      <method name="Dispatch" type="bool" overloaded="no">
-        <autodoc>Dispatch(self) -&gt; bool</autodoc>
-        <docstring>Process the first event in the event queue (blocks until an event
-appears if there are none currently)</docstring>
-      </method>
-      <method name="ProcessIdle" type="bool" overloaded="no">
-        <autodoc>ProcessIdle(self) -&gt; bool</autodoc>
-        <docstring>Called from the MainLoop when the application becomes idle (there are
-no pending events) and sends a `wx.IdleEvent` to all interested
-parties.  Returns True if more idle events are needed, False if not.</docstring>
-      </method>
-      <method name="SendIdleEvents" type="bool" overloaded="no">
-        <autodoc>SendIdleEvents(self, Window win, IdleEvent event) -&gt; bool</autodoc>
-        <docstring>Send idle event to window and all subwindows.  Returns True if more
-idle time is requested.</docstring>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-          <param name="event" type="IdleEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsActive" type="bool" overloaded="no">
-        <autodoc>IsActive(self) -&gt; bool</autodoc>
-        <docstring>Return True if our app has focus.</docstring>
-      </method>
-      <method name="SetTopWindow" type="" overloaded="no">
-        <autodoc>SetTopWindow(self, Window win)</autodoc>
-        <docstring>Set the *main* top level window</docstring>
-        <paramlist>
-          <param name="win" type="wxWindow" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTopWindow" type="wxWindow" overloaded="no">
-        <autodoc>GetTopWindow(self) -&gt; Window</autodoc>
-        <docstring>Return the *main* top level window (if it hadn't been set previously
-with SetTopWindow(), will return just some top level window and, if
-there not any, will return None)</docstring>
-      </method>
-      <method name="SetExitOnFrameDelete" type="" overloaded="no">
-        <autodoc>SetExitOnFrameDelete(self, bool flag)</autodoc>
-        <docstring>Control the exit behaviour: by default, the program will exit the main
-loop (and so, usually, terminate) when the last top-level program
-window is deleted.  Beware that if you disable this behaviour (with
-SetExitOnFrameDelete(False)), you'll have to call ExitMainLoop()
-explicitly from somewhere.</docstring>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetExitOnFrameDelete" type="bool" overloaded="no">
-        <autodoc>GetExitOnFrameDelete(self) -&gt; bool</autodoc>
-        <docstring>Get the current exit behaviour setting.</docstring>
-      </method>
-      <method name="SetUseBestVisual" type="" overloaded="no">
-        <autodoc>SetUseBestVisual(self, bool flag)</autodoc>
-        <docstring>Set whether the app should try to use the best available visual on
-systems where more than one is available, (Sun, SGI, XFree86 4, etc.)</docstring>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUseBestVisual" type="bool" overloaded="no">
-        <autodoc>GetUseBestVisual(self) -&gt; bool</autodoc>
-        <docstring>Get current UseBestVisual setting.</docstring>
-      </method>
-      <method name="SetPrintMode" type="" overloaded="no">
-        <autodoc>SetPrintMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintMode" type="int" overloaded="no">
-        <autodoc>GetPrintMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetAssertMode" type="" overloaded="no">
-        <autodoc>SetAssertMode(self, int mode)</autodoc>
-        <docstring>Set the OnAssert behaviour for debug and hybrid builds.The following flags may be or'd together:
-
-   =========================   =======================================
-   wx.PYAPP_ASSERT_SUPPRESS    Don't do anything
-   wx.PYAPP_ASSERT_EXCEPTION   Turn it into a Python exception if possible
-                               (default)
-   wx.PYAPP_ASSERT_DIALOG      Display a message dialog
-   wx.PYAPP_ASSERT_LOG         Write the assertion info to the wx.Log
-   =========================   =======================================
-
-</docstring>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAssertMode" type="int" overloaded="no">
-        <autodoc>GetAssertMode(self) -&gt; int</autodoc>
-        <docstring>Get the current OnAssert behaviour setting.</docstring>
-      </method>
-      <staticmethod name="GetMacSupportPCMenuShortcuts" type="bool" overloaded="no">
-        <autodoc>GetMacSupportPCMenuShortcuts() -&gt; bool</autodoc>
-      </staticmethod>
-      <staticmethod name="GetMacAboutMenuItemId" type="long" overloaded="no">
-        <autodoc>GetMacAboutMenuItemId() -&gt; long</autodoc>
-      </staticmethod>
-      <staticmethod name="GetMacPreferencesMenuItemId" type="long" overloaded="no">
-        <autodoc>GetMacPreferencesMenuItemId() -&gt; long</autodoc>
-      </staticmethod>
-      <staticmethod name="GetMacExitMenuItemId" type="long" overloaded="no">
-        <autodoc>GetMacExitMenuItemId() -&gt; long</autodoc>
-      </staticmethod>
-      <staticmethod name="GetMacHelpMenuTitleName" type="String" overloaded="no">
-        <autodoc>GetMacHelpMenuTitleName() -&gt; String</autodoc>
-      </staticmethod>
-      <staticmethod name="SetMacSupportPCMenuShortcuts" type="" overloaded="no">
-        <autodoc>SetMacSupportPCMenuShortcuts(bool val)</autodoc>
-        <paramlist>
-          <param name="val" type="bool" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetMacAboutMenuItemId" type="" overloaded="no">
-        <autodoc>SetMacAboutMenuItemId(long val)</autodoc>
-        <paramlist>
-          <param name="val" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetMacPreferencesMenuItemId" type="" overloaded="no">
-        <autodoc>SetMacPreferencesMenuItemId(long val)</autodoc>
-        <paramlist>
-          <param name="val" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetMacExitMenuItemId" type="" overloaded="no">
-        <autodoc>SetMacExitMenuItemId(long val)</autodoc>
-        <paramlist>
-          <param name="val" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetMacHelpMenuTitleName" type="" overloaded="no">
-        <autodoc>SetMacHelpMenuTitleName(String val)</autodoc>
-        <paramlist>
-          <param name="val" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="_BootstrapApp" type="" overloaded="no">
-        <autodoc>_BootstrapApp(self)</autodoc>
-        <docstring>For internal use only</docstring>
-      </method>
-      <staticmethod name="GetComCtl32Version" type="int" overloaded="no">
-        <autodoc>GetComCtl32Version() -&gt; int</autodoc>
-        <docstring>Returns 400, 470, 471, etc. for comctl32.dll 4.00, 4.70, 4.71 or 0 if
-it wasn't found at all.  Raises an exception on non-Windows platforms.</docstring>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <method name="Exit" oldname="wxExit" type="" overloaded="no">
-      <autodoc>Exit()</autodoc>
-      <docstring>Force an exit of the application.  Convenience for wx.GetApp().Exit()</docstring>
-    </method>
-    <method name="Yield" oldname="wxYield" type="bool" overloaded="no">
-      <autodoc>Yield() -&gt; bool</autodoc>
-      <docstring>Yield to other apps/messages.  Convenience for wx.GetApp().Yield()</docstring>
-    </method>
-    <method name="YieldIfNeeded" oldname="wxYieldIfNeeded" type="bool" overloaded="no">
-      <autodoc>YieldIfNeeded() -&gt; bool</autodoc>
-      <docstring>Yield to other apps/messages.  Convenience for wx.GetApp().Yield(True)</docstring>
-    </method>
-    <method name="SafeYield" oldname="wxSafeYield" type="bool" overloaded="no">
-      <autodoc>SafeYield(Window win=None, bool onlyIfNeeded=False) -&gt; bool</autodoc>
-      <docstring>This function is similar to `wx.Yield`, except that it disables the
-user input to all program windows before calling `wx.Yield` and
-re-enables it again afterwards. If ``win`` is not None, this window
-will remain enabled, allowing the implementation of some limited user
-interaction.
-
-:Returns: the result of the call to `wx.Yield`.</docstring>
-      <paramlist>
-        <param name="win" type="wxWindow" default="NULL"/>
-        <param name="onlyIfNeeded" type="bool" default="False"/>
-      </paramlist>
-    </method>
-    <method name="WakeUpIdle" oldname="wxWakeUpIdle" type="" overloaded="no">
-      <autodoc>WakeUpIdle()</autodoc>
-      <docstring>Cause the message queue to become empty again, so idle events will be
-sent.</docstring>
-    </method>
-    <method name="PostEvent" oldname="wxPostEvent" type="" overloaded="no">
-      <autodoc>PostEvent(EvtHandler dest, Event event)</autodoc>
-      <docstring>Send an event to a window or other wx.EvtHandler to be processed
-later.</docstring>
-      <paramlist>
-        <param name="dest" type="EvtHandler" default=""/>
-        <param name="event" type="Event" default=""/>
-      </paramlist>
-    </method>
-    <method name="App_CleanUp" oldname="wxApp_CleanUp" type="" overloaded="no">
-      <autodoc>App_CleanUp()</autodoc>
-      <docstring>For internal use only, it is used to cleanup after wxWidgets when
-Python shuts down.</docstring>
-    </method>
-    <method name="GetApp" oldname="wxPyGetApp" type="PyApp" overloaded="no">
-      <autodoc>GetApp() -&gt; PyApp</autodoc>
-      <docstring>Return a reference to the current wx.App object.</docstring>
-    </method>
-    <pythoncode>
-#----------------------------------------------------------------------
-
-class PyOnDemandOutputWindow:
-    """
-    A class that can be used for redirecting Python's stdout and
-    stderr streams.  It will do nothing until something is wrriten to
-    the stream at which point it will create a Frame with a text area
-    and write the text there.
-    """
-    def __init__(self, title = "wxPython: stdout/stderr"):
-        self.frame  = None
-        self.title  = title
-        self.pos    = wx.DefaultPosition
-        self.size   = (450, 300)
-        self.parent = None
-
-    def SetParent(self, parent):
-        """Set the window to be used as the popup Frame's parent."""
-        self.parent = parent
-
-
-    def CreateOutputWindow(self, st):
-        self.frame = wx.Frame(self.parent, -1, self.title, self.pos, self.size,
-                              style=wx.DEFAULT_FRAME_STYLE)
-        self.text  = wx.TextCtrl(self.frame, -1, "",
-                                 style=wx.TE_MULTILINE|wx.TE_READONLY)
-        self.text.AppendText(st)
-        self.frame.Show(True)
-        EVT_CLOSE(self.frame, self.OnCloseWindow)
-        
-
-    def OnCloseWindow(self, event):
-        if self.frame is not None:
-            self.frame.Destroy()
-        self.frame = None
-        self.text  = None
-
-
-    # These methods provide the file-like output behaviour.
-    def write(self, text):
-        """
-        Create the output window if needed and write the string to it.
-        If not called in the context of the gui thread then uses
-        CallAfter to do the work there.
-        """        
-        if self.frame is None:
-            if not wx.Thread_IsMain():
-                wx.CallAfter(self.CreateOutputWindow, text)
-            else:
-                self.CreateOutputWindow(text)
-        else:
-            if not wx.Thread_IsMain():
-                wx.CallAfter(self.text.AppendText, text)
-            else:
-                self.text.AppendText(text)
-
-
-    def close(self):
-        if self.frame is not None:
-            wx.CallAfter(self.frame.Close)
-
-
-    def flush(self):
-        pass
-    
-
-
-#----------------------------------------------------------------------
-
-_defRedirect = (wx.Platform == '__WXMSW__' or wx.Platform == '__WXMAC__')
-
-class App(wx.PyApp):
-    """
-    The ``wx.App`` class represents the application and is used to:
-
-      * bootstrap the wxPython system and initialize the underlying
-        gui toolkit
-      * set and get application-wide properties
-      * implement the windowing system main message or event loop,
-        and to dispatch events to window instances
-      * etc.
-
-    Every application must have a ``wx.App`` instance, and all
-    creation of UI objects should be delayed until after the
-    ``wx.App`` object has been created in order to ensure that the gui
-    platform and wxWidgets have been fully initialized.
-
-    Normally you would derive from this class and implement an
-    ``OnInit`` method that creates a frame and then calls
-    ``self.SetTopWindow(frame)``.
-
-    :see: `wx.PySimpleApp` for a simpler app class that can be used
-           directly.
-    """
-    
-    outputWindowClass = PyOnDemandOutputWindow
-
-    def __init__(self, redirect=_defRedirect, filename=None,
-                 useBestVisual=False, clearSigInt=True):
-        """
-        Construct a ``wx.App`` object.  
-
-        :param redirect: Should ``sys.stdout`` and ``sys.stderr`` be
-            redirected?  Defaults to True on Windows and Mac, False
-            otherwise.  If `filename` is None then output will be
-            redirected to a window that pops up as needed.  (You can
-            control what kind of window is created for the output by
-            resetting the class variable ``outputWindowClass`` to a
-            class of your choosing.)
-
-        :param filename: The name of a file to redirect output to, if
-            redirect is True.
-
-        :param useBestVisual: Should the app try to use the best
-            available visual provided by the system (only relevant on
-            systems that have more than one visual.)  This parameter
-            must be used instead of calling `SetUseBestVisual` later
-            on because it must be set before the underlying GUI
-            toolkit is initialized.
-
-        :param clearSigInt: Should SIGINT be cleared?  This allows the
-            app to terminate upon a Ctrl-C in the console like other
-            GUI apps will.
-
-        :note: You should override OnInit to do applicaition
-            initialization to ensure that the system, toolkit and
-            wxWidgets are fully initialized.
-        """
-        wx.PyApp.__init__(self)
-
-        if wx.Platform == "__WXMAC__":
-            try:
-                import MacOS
-                if not MacOS.WMAvailable():
-                    print """\\
-This program needs access to the screen. Please run with 'pythonw',
-not 'python', and only when you are logged in on the main display of
-your Mac."""
-                    _sys.exit(1)
-            except SystemExit:
-                raise
-            except:
-                pass
-
-        # This has to be done before OnInit
-        self.SetUseBestVisual(useBestVisual)
-
-        # Set the default handler for SIGINT.  This fixes a problem
-        # where if Ctrl-C is pressed in the console that started this
-        # app then it will not appear to do anything, (not even send
-        # KeyboardInterrupt???)  but will later segfault on exit.  By
-        # setting the default handler then the app will exit, as
-        # expected (depending on platform.)
-        if clearSigInt:
-            try:
-                import signal
-                signal.signal(signal.SIGINT, signal.SIG_DFL)
-            except:
-                pass
-
-        # Save and redirect the stdio to a window?
-        self.stdioWin = None
-        self.saveStdio = (_sys.stdout, _sys.stderr)
-        if redirect:
-            self.RedirectStdio(filename)
-
-        # This finishes the initialization of wxWindows and then calls
-        # the OnInit that should be present in the derived class
-        self._BootstrapApp()
-
-
-    def __del__(self):
-        try:
-            self.RestoreStdio()  # Just in case the MainLoop was overridden
-        except:
-            pass
-
-
-    def SetTopWindow(self, frame):
-        """Set the \\"main\\" top level window"""
-        if self.stdioWin:
-            self.stdioWin.SetParent(frame)
-        wx.PyApp.SetTopWindow(self, frame)
-
-
-    def MainLoop(self):
-        """Execute the main GUI event loop"""
-        wx.PyApp.MainLoop(self)
-        self.RestoreStdio()
-
-
-    def RedirectStdio(self, filename=None):
-        """Redirect sys.stdout and sys.stderr to a file or a popup window."""
-        if filename:
-            _sys.stdout = _sys.stderr = open(filename, 'a')
-        else:
-            self.stdioWin = self.outputWindowClass()
-            _sys.stdout = _sys.stderr = self.stdioWin
-
-
-    def RestoreStdio(self):
-        _sys.stdout, _sys.stderr = self.saveStdio
-
-
-    def SetOutputWindowAttributes(self, title=None, pos=None, size=None):
-        """
-        Set the title, position and/or size of the output window if
-        the stdio has been redirected.  This should be called before
-        any output would cause the output window to be created.
-        """
-        if self.stdioWin:
-            if title is not None:
-                self.stdioWin.title = title
-            if pos is not None:
-                self.stdioWin.pos = pos
-            if size is not None:
-                self.stdioWin.size = size
-            
-
-
-
-# change from wx.PyApp_XX to wx.App_XX
-App_GetMacSupportPCMenuShortcuts = _core_.PyApp_GetMacSupportPCMenuShortcuts
-App_GetMacAboutMenuItemId        = _core_.PyApp_GetMacAboutMenuItemId
-App_GetMacPreferencesMenuItemId  = _core_.PyApp_GetMacPreferencesMenuItemId
-App_GetMacExitMenuItemId         = _core_.PyApp_GetMacExitMenuItemId
-App_GetMacHelpMenuTitleName      = _core_.PyApp_GetMacHelpMenuTitleName
-App_SetMacSupportPCMenuShortcuts = _core_.PyApp_SetMacSupportPCMenuShortcuts
-App_SetMacAboutMenuItemId        = _core_.PyApp_SetMacAboutMenuItemId
-App_SetMacPreferencesMenuItemId  = _core_.PyApp_SetMacPreferencesMenuItemId
-App_SetMacExitMenuItemId         = _core_.PyApp_SetMacExitMenuItemId
-App_SetMacHelpMenuTitleName      = _core_.PyApp_SetMacHelpMenuTitleName
-App_GetComCtl32Version           = _core_.PyApp_GetComCtl32Version
-
-#----------------------------------------------------------------------------
-
-class PySimpleApp(wx.App):
-    """
-    A simple application class.  You can just create one of these and
-    then then make your top level windows later, and not have to worry
-    about OnInit.  For example::
-
-        app = wx.PySimpleApp()
-        frame = wx.Frame(None, title='Hello World')
-        frame.Show()
-        app.MainLoop()
-
-    :see: `wx.App` 
-    """
-
-    def __init__(self, redirect=False, filename=None,
-                 useBestVisual=False, clearSigInt=True):
-        """
-        :see: `wx.App.__init__`
-        """
-        wx.App.__init__(self, redirect, filename, useBestVisual, clearSigInt)
-        
-    def OnInit(self):
-        return True
-
-
-
-# Is anybody using this one?
-class PyWidgetTester(wx.App):
-    def __init__(self, size = (250, 100)):
-        self.size = size
-        wx.App.__init__(self, 0)
-
-    def OnInit(self):
-        self.frame = wx.Frame(None, -1, "Widget Tester", pos=(0,0), size=self.size)
-        self.SetTopWindow(self.frame)
-        return True
-
-    def SetWidget(self, widgetClass, *args, **kwargs):
-        w = widgetClass(self.frame, *args, **kwargs)
-        self.frame.Show(True)
-
-#----------------------------------------------------------------------------
-# DO NOT hold any other references to this object.  This is how we
-# know when to cleanup system resources that wxWidgets is holding.  When
-# the sys module is unloaded, the refcount on sys.__wxPythonCleanup
-# goes to zero and it calls the wx.App_CleanUp function.
-
-class __wxPyCleanup:
-    def __init__(self):
-        self.cleanup = _core_.App_CleanUp
-    def __del__(self):
-        self.cleanup()
-
-_sys.__wxPythonCleanup = __wxPyCleanup()
-
-## # another possible solution, but it gets called too early...
-## import atexit
-## atexit.register(_core_.wxApp_CleanUp)
-
-
-#----------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="AcceleratorEntry" oldname="wxAcceleratorEntry" module="_core">
-      <docstring>A class used to define items in an `wx.AcceleratorTable`.  wxPython
-programs can choose to use wx.AcceleratorEntry objects, but using a
-list of 3-tuple of integers (flags, keyCode, cmdID) usually works just
-as well.  See `__init__` for  of the tuple values.
-
-:see: `wx.AcceleratorTable`</docstring>
-      <constructor name="AcceleratorEntry" overloaded="no">
-        <autodoc>__init__(self, int flags=0, int keyCode=0, int cmdID=0) -&gt; AcceleratorEntry</autodoc>
-        <docstring>Construct a wx.AcceleratorEntry.
-    :param flags: A bitmask of wx.ACCEL_ALT, wx.ACCEL_SHIFT,
-                wx.ACCEL_CTRL or wx.ACCEL_NORMAL used to specify
-                which modifier keys are held down.
-    :param keyCode: The keycode to be detected
-    :param cmdID: The menu or control command ID to use for the
-                accellerator event.
-</docstring>
-        <paramlist>
-          <param name="flags" type="int" default="0"/>
-          <param name="keyCode" type="int" default="0"/>
-          <param name="cmdID" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxAcceleratorEntry" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int flags, int keyCode, int cmd)</autodoc>
-        <docstring>(Re)set the attributes of a wx.AcceleratorEntry.
-:see `__init__`</docstring>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-          <param name="keyCode" type="int" default=""/>
-          <param name="cmd" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-        <docstring>Get the AcceleratorEntry's flags.</docstring>
-      </method>
-      <method name="GetKeyCode" type="int" overloaded="no">
-        <autodoc>GetKeyCode(self) -&gt; int</autodoc>
-        <docstring>Get the AcceleratorEntry's keycode.</docstring>
-      </method>
-      <method name="GetCommand" type="int" overloaded="no">
-        <autodoc>GetCommand(self) -&gt; int</autodoc>
-        <docstring>Get the AcceleratorEntry's command ID.</docstring>
-      </method>
-    </class>
-    <class name="AcceleratorTable" oldname="wxAcceleratorTable" module="_core">
-      <docstring>An accelerator table allows the application to specify a table of
-keyboard shortcuts for menus or other commands. On Windows, menu or
-button commands are supported; on GTK, only menu commands are
-supported.
-
-The object ``wx.NullAcceleratorTable`` is defined to be a table with
-no data, and is the initial accelerator table for a window.
-
-An accelerator takes precedence over normal processing and can be a
-convenient way to program some event handling. For example, you can
-use an accelerator table to make a hotkey generate an event no matter
-which window within a frame has the focus.
-
-Foe example::
-
-    aTable = wx.AcceleratorTable([(wx.ACCEL_ALT,  ord('X'), exitID),
-                                  (wx.ACCEL_CTRL, ord('H'), helpID),
-                                  (wx.ACCEL_CTRL, ord('F'), findID),
-                                  (wx.ACCEL_NORMAL, wx.WXK_F3, findnextID)
-                                  ])
-    self.SetAcceleratorTable(aTable)
-
-
-:see: `wx.AcceleratorEntry`, `wx.Window.SetAcceleratorTable`
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="AcceleratorTable" overloaded="no">
-        <autodoc>__init__(entries) -&gt; AcceleratorTable</autodoc>
-        <docstring>Construct an AcceleratorTable from a list of `wx.AcceleratorEntry`
-items or or of 3-tuples (flags, keyCode, cmdID)
-
-:see: `wx.AcceleratorEntry`</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="entries" type="AcceleratorEntry" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxAcceleratorTable" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <method name="GetAccelFromString" oldname="wxGetAccelFromString" type="AcceleratorEntry" overloaded="no">
-      <autodoc>GetAccelFromString(String label) -&gt; AcceleratorEntry</autodoc>
-      <paramlist>
-        <param name="label" type="String" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="VisualAttributes" oldname="wxVisualAttributes" module="_core">
-      <docstring>struct containing all the visual attributes of a control</docstring>
-      <constructor name="VisualAttributes" overloaded="no">
-        <autodoc>__init__(self) -&gt; VisualAttributes</autodoc>
-        <docstring>struct containing all the visual attributes of a control</docstring>
-      </constructor>
-      <destructor name="~wxVisualAttributes" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <property name="font" type="wxFont" readonly="no"/>
-      <property name="colFg" type="wxColour" readonly="no"/>
-      <property name="colBg" type="wxColour" readonly="no"/>
-    </class>
-    <class name="Window" oldname="wxWindow" module="_core">
-      <docstring>wx.Window is the base class for all windows and represents any visible
-object on the screen. All controls, top level windows and so on are
-wx.Windows. Sizers and device contexts are not however, as they don't
-appear on screen themselves.
-      
-Styles
--------
-    =============================  =====================================
-    wx.SIMPLE_BORDER               Displays a thin border around the window.
-                                   
-    wx.DOUBLE_BORDER               Displays a double border. Windows and Mac only.
-                                   
-    wx.SUNKEN_BORDER               Displays a sunken border.
-                                   
-    wx.RAISED_BORDER               Displays a raised border.
-                                   
-    wx.STATIC_BORDER               Displays a border suitable for a static
-                                   control. Windows only.
-                                   
-    wx.NO_BORDER                   Displays no border, overriding the default
-                                   border style for the window.
-                                   
-    wx.TRANSPARENT_WINDOW          The window is transparent, that is, it
-                                   will not receive paint events. Windows only.
-                                   
-    wx.TAB_TRAVERSAL               Use this to enable tab traversal for
-                                   non-dialog windows.
-                                   
-    wx.WANTS_CHARS                 Use this to indicate that the window
-                                   wants to get all char/key events for
-                                   all keys - even for keys like TAB or
-                                   ENTER which are usually used for
-                                   dialog navigation and which wouldn't
-                                   be generated without this style. If
-                                   you need to use this style in order to
-                                   get the arrows or etc., but would
-                                   still like to have normal keyboard
-                                   navigation take place, you should
-                                   create and send a wxNavigationKeyEvent
-                                   in response to the key events for Tab
-                                   and Shift-Tab.
-                                   
-    wx.NO_FULL_REPAINT_ON_RESIZE   Disables repainting the window
-                                   completely when its size is changed.
-                                   You will have to repaint the new
-                                   window area manually if you use this
-                                   style. As of version 2.5.1 this
-                                   style is on by default.  Use
-                                   wx.FULL_REPAINT_ON_RESIZE to
-                                   deactivate it.
-                                   
-    wx.VSCROLL                     Use this style to enable a vertical scrollbar.
-                                   
-    wx.HSCROLL                     Use this style to enable a horizontal scrollbar.
-                                   
-    wx.ALWAYS_SHOW_SB              If a window has scrollbars, disable them
-                                   instead of hiding them when they are
-                                   not needed (i.e. when the size of the
-                                   window is big enough to not require
-                                   the scrollbars to navigate it). This
-                                   style is currently only implemented
-                                   for wxMSW and wxUniversal and does
-                                   nothing on the other platforms.
-                                   
-    wx.CLIP_CHILDREN               Use this style to eliminate flicker caused by
-                                   the background being repainted, then
-                                   children being painted over
-                                   them. Windows only.
-                                   
-    wx.FULL_REPAINT_ON_RESIZE      Use this style to force a complete
-                                   redraw of the window whenever it is
-                                   resized instead of redrawing just the
-                                   part of the window affected by
-                                   resizing. Note that this was the
-                                   behaviour by default before 2.5.1
-                                   release and that if you experience
-                                   redraw problems with the code which
-                                   previously used to work you may want
-                                   to try this.
-    =============================  =====================================
-
-
-Extra Styles
-------------
-    =============================   =====================================
-    wx.WS_EX_VALIDATE_RECURSIVELY   By default,
-                                    Validate/TransferDataTo/FromWindow()
-                                    only work on direct children of
-                                    the window (compatible
-                                    behaviour). Set this flag to make
-                                    them recursively descend into all
-                                    subwindows.
-
-    wx.WS_EX_BLOCK_EVENTS           wx.CommandEvents and the objects of the
-                                    derived classes are forwarded to
-                                    the parent window and so on
-                                    recursively by default. Using this
-                                    flag for the given window allows
-                                    to block this propagation at this
-                                    window, i.e. prevent the events
-                                    from being propagated further
-                                    upwards. Dialogs have this flag on
-                                    by default.
-
-    wx.WS_EX_TRANSIENT              Don't use this window as an implicit parent for
-                                    the other windows: this must be
-                                    used with transient windows as
-                                    otherwise there is the risk of
-                                    creating a dialog/frame with this
-                                    window as a parent which would
-                                    lead to a crash if the parent is
-                                    destroyed before the child.
-
-    wx.WS_EX_PROCESS_IDLE           This window should always process idle
-                                    events, even if the mode set by
-                                    wx.IdleEvent.SetMode is
-                                    wx.IDLE_PROCESS_SPECIFIED.
-
-    wx.WS_EX_PROCESS_UI_UPDATES     This window should always process UI
-                                    update events, even if the mode
-                                    set by wxUpdateUIEvent::SetMode is
-                                    wxUPDATE_UI_PROCESS_SPECIFIED.
-    =============================   =====================================
-
-</docstring>
-      <baseclass name="EvtHandler"/>
-      <constructor name="Window" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; Window</autodoc>
-        <docstring>Construct and show a generic Window.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreWindow" overloaded="no">
-        <autodoc>PreWindow() -&gt; Window</autodoc>
-        <docstring>Precreate a Window for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; bool</autodoc>
-        <docstring>Create the GUI part of the Window for 2-phase creation mode.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </method>
-      <method name="Close" type="bool" overloaded="no">
-        <autodoc>Close(self, bool force=False) -&gt; bool</autodoc>
-        <docstring>This function simply generates a EVT_CLOSE event whose handler usually
-tries to close the window. It doesn't close the window itself,
-however.  If force is False (the default) then the window's close
-handler will be allowed to veto the destruction of the window.
-Usually Close is only used with the top level windows (wx.Frame and
-wx.Dialog classes) as the others are not supposed to have any special
-EVT_CLOSE logic.
-
-The close handler should check whether the window is being deleted
-forcibly, using wx.CloseEvent.GetForce, in which case it should
-destroy the window using wx.Window.Destroy.
-
-Note that calling Close does not guarantee that the window will be
-destroyed; but it provides a way to simulate a manual close of a
-window, which may or may not be implemented by destroying the
-window. The default EVT_CLOSE handler for wx.Dialog does not
-necessarily delete the dialog, since it will simply simulate an
-wxID_CANCEL event which is handled by the appropriate button event
-handler and may do anything at all.
-
-To guarantee that the window will be destroyed, call wx.Window.Destroy
-instead.</docstring>
-        <paramlist>
-          <param name="force" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="bool" overloaded="no">
-        <autodoc>Destroy(self) -&gt; bool</autodoc>
-        <docstring>Destroys the window safely.  Frames and dialogs are not destroyed
-immediately when this function is called -- they are added to a list
-of windows to be deleted on idle time, when all the window's events
-have been processed. This prevents problems with events being sent to
-non-existent windows.
-
-Returns True if the window has either been successfully deleted, or it
-has been added to the list of windows pending real deletion.</docstring>
-      </method>
-      <method name="DestroyChildren" type="bool" overloaded="no">
-        <autodoc>DestroyChildren(self) -&gt; bool</autodoc>
-        <docstring>Destroys all children of a window. Called automatically by the
-destructor.</docstring>
-      </method>
-      <method name="IsBeingDeleted" type="bool" overloaded="no">
-        <autodoc>IsBeingDeleted(self) -&gt; bool</autodoc>
-        <docstring>Is the window in the process of being deleted?</docstring>
-      </method>
-      <method name="SetTitle" type="" overloaded="no">
-        <autodoc>SetTitle(self, String title)</autodoc>
-        <docstring>Sets the window's title. Applicable only to frames and dialogs.</docstring>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTitle" type="String" overloaded="no">
-        <autodoc>GetTitle(self) -&gt; String</autodoc>
-        <docstring>Gets the window's title. Applicable only to frames and dialogs.</docstring>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, String label)</autodoc>
-        <docstring>Set the text which the window shows in its label if applicable.</docstring>
-        <paramlist>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-        <docstring>Generic way of getting a label from any window, for identification
-purposes.  The interpretation of this function differs from class to
-class. For frames and dialogs, the value returned is the title. For
-buttons or static text controls, it is the button text. This function
-can be useful for meta-programs such as testing tools or special-needs
-access programs)which need to identify windows by name.</docstring>
-      </method>
-      <method name="SetName" type="" overloaded="no">
-        <autodoc>SetName(self, String name)</autodoc>
-        <docstring>Sets the window's name.  The window name is used for ressource setting
-in X, it is not the same as the window title/label</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-        <docstring>Returns the windows name.  This name is not guaranteed to be unique;
-it is up to the programmer to supply an appropriate name in the window
-constructor or via wx.Window.SetName.</docstring>
-      </method>
-      <method name="SetWindowVariant" type="" overloaded="no">
-        <autodoc>SetWindowVariant(self, int variant)</autodoc>
-        <docstring>Sets the variant of the window/font size to use for this window, if
-the platform supports variants, for example, wxMac.
-Variant values are:
-
-    ========================    =======================================
-    wx.WINDOW_VARIANT_NORMAL    Normal size
-    wx.WINDOW_VARIANT_SMALL     Smaller size (about 25 % smaller than normal)
-    wx.WINDOW_VARIANT_MINI      Mini size (about 33 % smaller than normal)
-    wx.WINDOW_VARIANT_LARGE     Large size (about 25 % larger than normal)
-    ========================    =======================================
-</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWindowVariant" type="wxWindowVariant" overloaded="no">
-        <autodoc>GetWindowVariant(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, int winid)</autodoc>
-        <docstring>Sets the identifier of the window.  Each window has an integer
-identifier. If the application has not provided one, an identifier
-will be generated. Normally, the identifier should be provided on
-creation and should not be modified subsequently.</docstring>
-        <paramlist>
-          <param name="winid" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-        <docstring>Returns the identifier of the window.  Each window has an integer
-identifier. If the application has not provided one (or the default Id
--1 is used) then an unique identifier with a negative value will be
-generated.</docstring>
-      </method>
-      <staticmethod name="NewControlId" type="int" overloaded="no">
-        <autodoc>NewControlId() -&gt; int</autodoc>
-        <docstring>Generate a control id for the controls which were not given one.</docstring>
-      </staticmethod>
-      <staticmethod name="NextControlId" type="int" overloaded="no">
-        <autodoc>NextControlId(int winid) -&gt; int</autodoc>
-        <docstring>Get the id of the control following the one with the given
-autogenerated) id</docstring>
-        <paramlist>
-          <param name="winid" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="PrevControlId" type="int" overloaded="no">
-        <autodoc>PrevControlId(int winid) -&gt; int</autodoc>
-        <docstring>Get the id of the control preceding the one with the given
-autogenerated) id</docstring>
-        <paramlist>
-          <param name="winid" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size size)</autodoc>
-        <docstring>Sets the size of the window in pixels.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDimensions" type="" overloaded="no">
-        <autodoc>SetDimensions(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <docstring>Sets the position and size of the window in pixels.  The sizeFlags
-parameter indicates the interpretation of the other params if they are
--1.  wx.SIZE_AUTO*: a -1 indicates that a class-specific default
-shoudl be used.  wx.SIZE_USE_EXISTING: existing dimensions should be
-used if -1 values are supplied.  wxSIZE_ALLOW_MINUS_ONE: allow
-dimensions of -1 and less to be interpreted as real dimensions, not
-default values.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="SetRect" type="" overloaded="no">
-        <autodoc>SetRect(self, Rect rect, int sizeFlags=SIZE_AUTO)</autodoc>
-        <docstring>Sets the position and size of the window in pixels using a wx.Rect.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="SetSizeWH" type="" overloaded="no">
-        <autodoc>SetSizeWH(self, int width, int height)</autodoc>
-        <docstring>Sets the size of the window in pixels.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Move" type="" overloaded="no">
-        <autodoc>Move(self, Point pt, int flags=SIZE_USE_EXISTING)</autodoc>
-        <docstring>Moves the window to the given position.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="flags" type="int" default="wxSIZE_USE_EXISTING"/>
-        </paramlist>
-      </method>
-      <method name="MoveXY" type="" overloaded="no">
-        <autodoc>MoveXY(self, int x, int y, int flags=SIZE_USE_EXISTING)</autodoc>
-        <docstring>Moves the window to the given position.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="flags" type="int" default="wxSIZE_USE_EXISTING"/>
-        </paramlist>
-      </method>
-      <method name="SetBestFittingSize" type="" overloaded="no">
-        <autodoc>SetBestFittingSize(self, Size size=DefaultSize)</autodoc>
-        <docstring>A 'Smart' SetSize that will fill in default size components with the
-window's *best size* values.  Also set's the minsize for use with sizers.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </method>
-      <method name="Raise" type="" overloaded="no">
-        <autodoc>Raise(self)</autodoc>
-        <docstring>Raises the window to the top of the window hierarchy if it is a
-managed window (dialog or frame).</docstring>
-      </method>
-      <method name="Lower" type="" overloaded="no">
-        <autodoc>Lower(self)</autodoc>
-        <docstring>Lowers the window to the bottom of the window hierarchy if it is a
-managed window (dialog or frame).</docstring>
-      </method>
-      <method name="SetClientSize" type="" overloaded="no">
-        <autodoc>SetClientSize(self, Size size)</autodoc>
-        <docstring>This sets the size of the window client area in pixels. Using this
-function to size a window tends to be more device-independent than
-wx.Window.SetSize, since the application need not worry about what
-dimensions the border or title bar have when trying to fit the window
-around panel items, for example.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClientSizeWH" type="" overloaded="no">
-        <autodoc>SetClientSizeWH(self, int width, int height)</autodoc>
-        <docstring>This sets the size of the window client area in pixels. Using this
-function to size a window tends to be more device-independent than
-wx.Window.SetSize, since the application need not worry about what
-dimensions the border or title bar have when trying to fit the window
-around panel items, for example.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClientRect" type="" overloaded="no">
-        <autodoc>SetClientRect(self, Rect rect)</autodoc>
-        <docstring>This sets the size of the window client area in pixels. Using this
-function to size a window tends to be more device-independent than
-wx.Window.SetSize, since the application need not worry about what
-dimensions the border or title bar have when trying to fit the window
-around panel items, for example.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Get the window's position.</docstring>
-      </method>
-      <method name="GetPositionTuple" type="" overloaded="no">
-        <autodoc>GetPositionTuple() -&gt; (x,y)</autodoc>
-        <docstring>Get the window's position.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-        <docstring>Get the window size.</docstring>
-      </method>
-      <method name="GetSizeTuple" type="" overloaded="no">
-        <autodoc>GetSizeTuple() -&gt; (width, height)</autodoc>
-        <docstring>Get the window size.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRect" type="Rect" overloaded="no">
-        <autodoc>GetRect(self) -&gt; Rect</autodoc>
-        <docstring>Returns the size and position of the window as a wx.Rect object.</docstring>
-      </method>
-      <method name="GetClientSize" type="Size" overloaded="no">
-        <autodoc>GetClientSize(self) -&gt; Size</autodoc>
-        <docstring>This gets the size of the window's 'client area' in pixels. The client
-area is the area which may be drawn on by the programmer, excluding
-title bar, border, scrollbars, etc.</docstring>
-      </method>
-      <method name="GetClientSizeTuple" type="" overloaded="no">
-        <autodoc>GetClientSizeTuple() -&gt; (width, height)</autodoc>
-        <docstring>This gets the size of the window's 'client area' in pixels. The client
-area is the area which may be drawn on by the programmer, excluding
-title bar, border, scrollbars, etc.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetClientAreaOrigin" type="Point" overloaded="no">
-        <autodoc>GetClientAreaOrigin(self) -&gt; Point</autodoc>
-        <docstring>Get the origin of the client area of the window relative to the
-window's top left corner (the client area may be shifted because of
-the borders, scrollbars, other decorations...)</docstring>
-      </method>
-      <method name="GetClientRect" type="Rect" overloaded="no">
-        <autodoc>GetClientRect(self) -&gt; Rect</autodoc>
-        <docstring>Get the client area position and size as a `wx.Rect` object.</docstring>
-      </method>
-      <method name="GetBestSize" type="Size" overloaded="no">
-        <autodoc>GetBestSize(self) -&gt; Size</autodoc>
-        <docstring>This function returns the best acceptable minimal size for the
-window, if applicable. For example, for a static text control, it will
-be the minimal size such that the control label is not truncated. For
-windows containing subwindows (suzh aswx.Panel), the size returned by
-this function will be the same as the size the window would have had
-after calling Fit.</docstring>
-      </method>
-      <method name="GetBestSizeTuple" type="" overloaded="no">
-        <autodoc>GetBestSizeTuple() -&gt; (width, height)</autodoc>
-        <docstring>This function returns the best acceptable minimal size for the
-window, if applicable. For example, for a static text control, it will
-be the minimal size such that the control label is not truncated. For
-windows containing subwindows (suzh aswx.Panel), the size returned by
-this function will be the same as the size the window would have had
-after calling Fit.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="InvalidateBestSize" type="" overloaded="no">
-        <autodoc>InvalidateBestSize(self)</autodoc>
-        <docstring>Reset the cached best size value so it will be recalculated the next
-time it is needed.</docstring>
-      </method>
-      <method name="GetBestFittingSize" type="Size" overloaded="no">
-        <autodoc>GetBestFittingSize(self) -&gt; Size</autodoc>
-        <docstring>This function will merge the window's best size into the window's
-minimum size, giving priority to the min size components, and returns
-the results.
-</docstring>
-      </method>
-      <method name="GetAdjustedBestSize" type="Size" overloaded="no">
-        <autodoc>GetAdjustedBestSize(self) -&gt; Size</autodoc>
-        <docstring>This method is similar to GetBestSize, except in one
-thing. GetBestSize should return the minimum untruncated size of the
-window, while this method will return the largest of BestSize and any
-user specified minimum size. ie. it is the minimum size the window
-should currently be drawn at, not the minimal size it can possibly
-tolerate.</docstring>
-      </method>
-      <method name="Center" type="" overloaded="no">
-        <autodoc>Center(self, int direction=BOTH)</autodoc>
-        <docstring>Centers the window.  The parameter specifies the direction for
-cetering, and may be wx.HORIZONTAL, wx.VERTICAL or wx.BOTH. It may
-also include wx.CENTER_ON_SCREEN flag if you want to center the window
-on the entire screen and not on its parent window.  If it is a
-top-level window and has no parent then it will always be centered
-relative to the screen.</docstring>
-        <paramlist>
-          <param name="direction" type="int" default="wxBOTH"/>
-        </paramlist>
-      </method>
-      <method name="CenterOnScreen" type="" overloaded="no">
-        <autodoc>CenterOnScreen(self, int dir=BOTH)</autodoc>
-        <docstring>Center on screen (only works for top level windows)</docstring>
-        <paramlist>
-          <param name="dir" type="int" default="wxBOTH"/>
-        </paramlist>
-      </method>
-      <method name="CenterOnParent" type="" overloaded="no">
-        <autodoc>CenterOnParent(self, int dir=BOTH)</autodoc>
-        <docstring>Center with respect to the the parent window</docstring>
-        <paramlist>
-          <param name="dir" type="int" default="wxBOTH"/>
-        </paramlist>
-      </method>
-      <method name="Fit" type="" overloaded="no">
-        <autodoc>Fit(self)</autodoc>
-        <docstring>Sizes the window so that it fits around its subwindows. This function
-won't do anything if there are no subwindows and will only really work
-correctly if sizers are used for the subwindows layout. Also, if the
-window has exactly one subwindow it is better (faster and the result
-is more precise as Fit adds some margin to account for fuzziness of
-its calculations) to call window.SetClientSize(child.GetSize())
-instead of calling Fit.</docstring>
-      </method>
-      <method name="FitInside" type="" overloaded="no">
-        <autodoc>FitInside(self)</autodoc>
-        <docstring>Similar to Fit, but sizes the interior (virtual) size of a
-window. Mainly useful with scrolled windows to reset scrollbars after
-sizing changes that do not trigger a size event, and/or scrolled
-windows without an interior sizer. This function similarly won't do
-anything if there are no subwindows.</docstring>
-      </method>
-      <method name="SetSizeHints" type="" overloaded="no">
-        <autodoc>SetSizeHints(self, int minW, int minH, int maxW=-1, int maxH=-1, int incW=-1, 
-    int incH=-1)</autodoc>
-        <docstring>Allows specification of minimum and maximum window sizes, and window
-size increments. If a pair of values is not set (or set to -1), the
-default values will be used.  If this function is called, the user
-will not be able to size the window outside the given bounds (if it is
-a top-level window.)  Sizers will also inspect the minimum window size
-and will use that value if set when calculating layout.
-
-The resizing increments are only significant under Motif or Xt.
-
-:see: `GetMinSize`, `GetMaxSize`, `SetMinSize`, `SetMaxSize`
-</docstring>
-        <paramlist>
-          <param name="minW" type="int" default=""/>
-          <param name="minH" type="int" default=""/>
-          <param name="maxW" type="int" default="-1"/>
-          <param name="maxH" type="int" default="-1"/>
-          <param name="incW" type="int" default="-1"/>
-          <param name="incH" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetSizeHintsSz" type="" overloaded="no">
-        <autodoc>SetSizeHintsSz(self, Size minSize, Size maxSize=DefaultSize, Size incSize=DefaultSize)</autodoc>
-        <docstring>Allows specification of minimum and maximum window sizes, and window
-size increments. If a pair of values is not set (or set to -1), the
-default values will be used.  If this function is called, the user
-will not be able to size the window outside the given bounds (if it is
-a top-level window.)  Sizers will also inspect the minimum window size
-and will use that value if set when calculating layout.
-
-The resizing increments are only significant under Motif or Xt.
-
-:see: `GetMinSize`, `GetMaxSize`, `SetMinSize`, `SetMaxSize`
-</docstring>
-        <paramlist>
-          <param name="minSize" type="Size" default=""/>
-          <param name="maxSize" type="Size" default="wxDefaultSize"/>
-          <param name="incSize" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </method>
-      <method name="SetVirtualSizeHints" type="" overloaded="no">
-        <autodoc>SetVirtualSizeHints(self, int minW, int minH, int maxW=-1, int maxH=-1)</autodoc>
-        <docstring>Allows specification of minimum and maximum virtual window sizes. If a
-pair of values is not set (or set to -1), the default values will be
-used.  If this function is called, the user will not be able to size
-the virtual area of the window outside the given bounds.</docstring>
-        <paramlist>
-          <param name="minW" type="int" default=""/>
-          <param name="minH" type="int" default=""/>
-          <param name="maxW" type="int" default="-1"/>
-          <param name="maxH" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetVirtualSizeHintsSz" type="" overloaded="no">
-        <autodoc>SetVirtualSizeHintsSz(self, Size minSize, Size maxSize=DefaultSize)</autodoc>
-        <docstring>Allows specification of minimum and maximum virtual window sizes. If a
-pair of values is not set (or set to -1), the default values will be
-used.  If this function is called, the user will not be able to size
-the virtual area of the window outside the given bounds.</docstring>
-        <paramlist>
-          <param name="minSize" type="Size" default=""/>
-          <param name="maxSize" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </method>
-      <method name="GetMaxSize" type="Size" overloaded="no">
-        <autodoc>GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetMinSize" type="Size" overloaded="no">
-        <autodoc>GetMinSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="SetMinSize" type="" overloaded="no">
-        <autodoc>SetMinSize(self, Size minSize)</autodoc>
-        <docstring>A more convenient method than `SetSizeHints` for setting just the
-min size.</docstring>
-        <paramlist>
-          <param name="minSize" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaxSize" type="" overloaded="no">
-        <autodoc>SetMaxSize(self, Size maxSize)</autodoc>
-        <docstring>A more convenient method than `SetSizeHints` for setting just the
-max size.</docstring>
-        <paramlist>
-          <param name="maxSize" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMinWidth" type="int" overloaded="no">
-        <autodoc>GetMinWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMinHeight" type="int" overloaded="no">
-        <autodoc>GetMinHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxWidth" type="int" overloaded="no">
-        <autodoc>GetMaxWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxHeight" type="int" overloaded="no">
-        <autodoc>GetMaxHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetVirtualSize" type="" overloaded="no">
-        <autodoc>SetVirtualSize(self, Size size)</autodoc>
-        <docstring>Set the the virtual size of a window in pixels.  For most windows this
-is just the client area of the window, but for some like scrolled
-windows it is more or less independent of the screen window size.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVirtualSizeWH" type="" overloaded="no">
-        <autodoc>SetVirtualSizeWH(self, int w, int h)</autodoc>
-        <docstring>Set the the virtual size of a window in pixels.  For most windows this
-is just the client area of the window, but for some like scrolled
-windows it is more or less independent of the screen window size.</docstring>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetVirtualSize" type="Size" overloaded="no">
-        <autodoc>GetVirtualSize(self) -&gt; Size</autodoc>
-        <docstring>Get the the virtual size of the window in pixels.  For most windows
-this is just the client area of the window, but for some like scrolled
-windows it is more or less independent of the screen window size.</docstring>
-      </method>
-      <method name="GetVirtualSizeTuple" type="" overloaded="no">
-        <autodoc>GetVirtualSizeTuple() -&gt; (width, height)</autodoc>
-        <docstring>Get the the virtual size of the window in pixels.  For most windows
-this is just the client area of the window, but for some like scrolled
-windows it is more or less independent of the screen window size.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBestVirtualSize" type="Size" overloaded="no">
-        <autodoc>GetBestVirtualSize(self) -&gt; Size</autodoc>
-        <docstring>Return the largest of ClientSize and BestSize (as determined by a
-sizer, interior children, or other means)</docstring>
-      </method>
-      <method name="Show" type="bool" overloaded="no">
-        <autodoc>Show(self, bool show=True) -&gt; bool</autodoc>
-        <docstring>Shows or hides the window. You may need to call Raise for a top level
-window if you want to bring it to top, although this is not needed if
-Show is called immediately after the frame creation.  Returns True if
-the window has been shown or hidden or False if nothing was done
-because it already was in the requested state.</docstring>
-        <paramlist>
-          <param name="show" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Hide" type="bool" overloaded="no">
-        <autodoc>Hide(self) -&gt; bool</autodoc>
-        <docstring>Equivalent to calling Show(False).</docstring>
-      </method>
-      <method name="Enable" type="bool" overloaded="no">
-        <autodoc>Enable(self, bool enable=True) -&gt; bool</autodoc>
-        <docstring>Enable or disable the window for user input. Note that when a parent
-window is disabled, all of its children are disabled as well and they
-are reenabled again when the parent is.  Returns true if the window
-has been enabled or disabled, false if nothing was done, i.e. if the
-window had already been in the specified state.</docstring>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Disable" type="bool" overloaded="no">
-        <autodoc>Disable(self) -&gt; bool</autodoc>
-        <docstring>Disables the window, same as Enable(false).</docstring>
-      </method>
-      <method name="IsShown" type="bool" overloaded="no">
-        <autodoc>IsShown(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the window is shown, false if it has been hidden.</docstring>
-      </method>
-      <method name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the window is enabled for input, false otherwise.</docstring>
-      </method>
-      <method name="SetWindowStyleFlag" type="" overloaded="no">
-        <autodoc>SetWindowStyleFlag(self, long style)</autodoc>
-        <docstring>Sets the style of the window. Please note that some styles cannot be
-changed after the window creation and that Refresh() might need to be
-called after changing the others for the change to take place
-immediately.</docstring>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWindowStyleFlag" type="long" overloaded="no">
-        <autodoc>GetWindowStyleFlag(self) -&gt; long</autodoc>
-        <docstring>Gets the window style that was passed to the constructor or Create
-method.</docstring>
-      </method>
-      <method name="HasFlag" type="bool" overloaded="no">
-        <autodoc>HasFlag(self, int flag) -&gt; bool</autodoc>
-        <docstring>Test if the given style is set for this window.</docstring>
-        <paramlist>
-          <param name="flag" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsRetained" type="bool" overloaded="no">
-        <autodoc>IsRetained(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the window is retained, false otherwise.  Retained
-windows are only available on X platforms.</docstring>
-      </method>
-      <method name="SetExtraStyle" type="" overloaded="no">
-        <autodoc>SetExtraStyle(self, long exStyle)</autodoc>
-        <docstring>Sets the extra style bits for the window.  Extra styles are the less
-often used style bits which can't be set with the constructor or with
-SetWindowStyleFlag()</docstring>
-        <paramlist>
-          <param name="exStyle" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetExtraStyle" type="long" overloaded="no">
-        <autodoc>GetExtraStyle(self) -&gt; long</autodoc>
-        <docstring>Returns the extra style bits for the window.</docstring>
-      </method>
-      <method name="MakeModal" type="" overloaded="no">
-        <autodoc>MakeModal(self, bool modal=True)</autodoc>
-        <docstring>Disables all other windows in the application so that the user can
-only interact with this window.  Passing False will reverse this
-effect.</docstring>
-        <paramlist>
-          <param name="modal" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetThemeEnabled" type="" overloaded="no">
-        <autodoc>SetThemeEnabled(self, bool enableTheme)</autodoc>
-        <docstring>This function tells a window if it should use the system's "theme"
- code to draw the windows' background instead if its own background
- drawing code. This will only have an effect on platforms that support
- the notion of themes in user defined windows. One such platform is
- GTK+ where windows can have (very colourful) backgrounds defined by a
- user's selected theme.
-
-Dialogs, notebook pages and the status bar have this flag set to true
-by default so that the default look and feel is simulated best.</docstring>
-        <paramlist>
-          <param name="enableTheme" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetThemeEnabled" type="bool" overloaded="no">
-        <autodoc>GetThemeEnabled(self) -&gt; bool</autodoc>
-        <docstring>Return the themeEnabled flag.</docstring>
-      </method>
-      <method name="SetFocus" type="" overloaded="no">
-        <autodoc>SetFocus(self)</autodoc>
-        <docstring>Set's the focus to this window, allowing it to receive keyboard input.</docstring>
-      </method>
-      <method name="SetFocusFromKbd" type="" overloaded="no">
-        <autodoc>SetFocusFromKbd(self)</autodoc>
-        <docstring>Set focus to this window as the result of a keyboard action.  Normally
-only called internally.</docstring>
-      </method>
-      <staticmethod name="FindFocus" type="Window" overloaded="no">
-        <autodoc>FindFocus() -&gt; Window</autodoc>
-        <docstring>Returns the window or control that currently has the keyboard focus,
-or None.</docstring>
-      </staticmethod>
-      <method name="AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>AcceptsFocus(self) -&gt; bool</autodoc>
-        <docstring>Can this window have focus?</docstring>
-      </method>
-      <method name="AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-        <docstring>Can this window be given focus by keyboard navigation? if not, the
-only way to give it focus (provided it accepts it at all) is to click
-it.</docstring>
-      </method>
-      <method name="GetDefaultItem" type="Window" overloaded="no">
-        <autodoc>GetDefaultItem(self) -&gt; Window</autodoc>
-        <docstring>Get the default child of this parent, i.e. the one which is activated
-by pressing &lt;Enter&gt; such as the OK button on a wx.Dialog.</docstring>
-      </method>
-      <method name="SetDefaultItem" type="Window" overloaded="no">
-        <autodoc>SetDefaultItem(self, Window child) -&gt; Window</autodoc>
-        <docstring>Set this child as default, return the old default.</docstring>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTmpDefaultItem" type="" overloaded="no">
-        <autodoc>SetTmpDefaultItem(self, Window win)</autodoc>
-        <docstring>Set this child as temporary default</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="Navigate" type="bool" overloaded="no">
-        <autodoc>Navigate(self, int flags=NavigationKeyEvent.IsForward) -&gt; bool</autodoc>
-        <docstring>Does keyboard navigation from this window to another, by sending a
-`wx.NavigationKeyEvent`.
-    :param flags: A combination of the ``IsForward`` or ``IsBackward``
-        and the ``WinChange`` values in the `wx.NavigationKeyEvent`
-        class, which determine if the navigation should be in forward
-        or reverse order, and if it should be able to cross parent
-        window boundaries, such as between notebook pages or MDI child
-        frames.  Typically the status of the Shift key (for forward or
-        backward) or the Control key (for WinChange) would be used to
-        determine how to set the flags.
-
-One situation in which you may wish to call this method is from a text
-control custom keypress handler to do the default navigation behaviour
-for the tab key, since the standard default behaviour for a multiline
-text control with the wx.TE_PROCESS_TAB style is to insert a tab and
-not navigate to the next control.</docstring>
-        <paramlist>
-          <param name="flags" type="int" default="wxNavigationKeyEvent::IsForward"/>
-        </paramlist>
-      </method>
-      <method name="MoveAfterInTabOrder" type="" overloaded="no">
-        <autodoc>MoveAfterInTabOrder(self, Window win)</autodoc>
-        <docstring>Moves this window in the tab navigation order after the specified
-sibling window.  This means that when the user presses the TAB key on
-that other window, the focus switches to this window.
-
-The default tab order is the same as creation order.  This function
-and `MoveBeforeInTabOrder` allow to change it after creating all the
-windows.
-</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveBeforeInTabOrder" type="" overloaded="no">
-        <autodoc>MoveBeforeInTabOrder(self, Window win)</autodoc>
-        <docstring>Same as `MoveAfterInTabOrder` except that it inserts this window just
-before win instead of putting it right after it.</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetChildren" type="PyObject" overloaded="no">
-        <autodoc>GetChildren(self) -&gt; PyObject</autodoc>
-        <docstring>Returns a list of the window's children.  NOTE: Currently this is a
-copy of the child window list maintained by the window, so the return
-value of this function is only valid as long as the window's children
-do not change.</docstring>
-      </method>
-      <method name="GetParent" type="Window" overloaded="no">
-        <autodoc>GetParent(self) -&gt; Window</autodoc>
-        <docstring>Returns the parent window of this window, or None if there isn't one.</docstring>
-      </method>
-      <method name="GetGrandParent" type="Window" overloaded="no">
-        <autodoc>GetGrandParent(self) -&gt; Window</autodoc>
-        <docstring>Returns the parent of the parent of this window, or None if there
-isn't one.</docstring>
-      </method>
-      <method name="IsTopLevel" type="bool" overloaded="no">
-        <autodoc>IsTopLevel(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the given window is a top-level one. Currently all
-frames and dialogs are always considered to be top-level windows (even
-if they have a parent window).</docstring>
-      </method>
-      <method name="Reparent" type="bool" overloaded="no">
-        <autodoc>Reparent(self, Window newParent) -&gt; bool</autodoc>
-        <docstring>Reparents the window, i.e the window will be removed from its current
-parent window (e.g. a non-standard toolbar in a wxFrame) and then
-re-inserted into another. Available on Windows and GTK.  Returns True
-if the parent was changed, False otherwise (error or newParent ==
-oldParent)</docstring>
-        <paramlist>
-          <param name="newParent" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddChild" type="" overloaded="no">
-        <autodoc>AddChild(self, Window child)</autodoc>
-        <docstring>Adds a child window. This is called automatically by window creation
-functions so should not be required by the application programmer.</docstring>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveChild" type="" overloaded="no">
-        <autodoc>RemoveChild(self, Window child)</autodoc>
-        <docstring>Removes a child window. This is called automatically by window
-deletion functions so should not be required by the application
-programmer.</docstring>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindWindowById" type="Window" overloaded="no">
-        <autodoc>FindWindowById(self, long winid) -&gt; Window</autodoc>
-        <docstring>Find a chld of this window by window ID</docstring>
-        <paramlist>
-          <param name="winid" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindWindowByName" type="Window" overloaded="no">
-        <autodoc>FindWindowByName(self, String name) -&gt; Window</autodoc>
-        <docstring>Find a child of this window by name</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEventHandler" type="EvtHandler" overloaded="no">
-        <autodoc>GetEventHandler(self) -&gt; EvtHandler</autodoc>
-        <docstring>Returns the event handler for this window. By default, the window is
-its own event handler.</docstring>
-      </method>
-      <method name="SetEventHandler" type="" overloaded="no">
-        <autodoc>SetEventHandler(self, EvtHandler handler)</autodoc>
-        <docstring>Sets the event handler for this window.  An event handler is an object
-that is capable of processing the events sent to a window. By default,
-the window is its own event handler, but an application may wish to
-substitute another, for example to allow central implementation of
-event-handling for a variety of different window classes.
-
-It is usually better to use `wx.Window.PushEventHandler` since this sets
-up a chain of event handlers, where an event not handled by one event
-handler is handed to the next one in the chain.</docstring>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="PushEventHandler" type="" overloaded="no">
-        <autodoc>PushEventHandler(self, EvtHandler handler)</autodoc>
-        <docstring>Pushes this event handler onto the event handler stack for the window.
-An event handler is an object that is capable of processing the events
-sent to a window. By default, the window is its own event handler, but
-an application may wish to substitute another, for example to allow
-central implementation of event-handling for a variety of different
-window classes.
-
-wx.Window.PushEventHandler allows an application to set up a chain of
-event handlers, where an event not handled by one event handler is
-handed to the next one in the chain. Use `wx.Window.PopEventHandler` to
-remove the event handler.</docstring>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="PopEventHandler" type="EvtHandler" overloaded="no">
-        <autodoc>PopEventHandler(self, bool deleteHandler=False) -&gt; EvtHandler</autodoc>
-        <docstring>Removes and returns the top-most event handler on the event handler
-stack.  If deleteHandler is True then the wx.EvtHandler object will be
-destroyed after it is popped.</docstring>
-        <paramlist>
-          <param name="deleteHandler" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="RemoveEventHandler" type="bool" overloaded="no">
-        <autodoc>RemoveEventHandler(self, EvtHandler handler) -&gt; bool</autodoc>
-        <docstring>Find the given handler in the event handler chain and remove (but not
-delete) it from the event handler chain, return True if it was found
-and False otherwise (this also results in an assert failure so this
-function should only be called when the handler is supposed to be
-there.)</docstring>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValidator" type="" overloaded="no">
-        <autodoc>SetValidator(self, Validator validator)</autodoc>
-        <docstring>Deletes the current validator (if any) and sets the window validator,
-having called wx.Validator.Clone to create a new validator of this
-type.</docstring>
-        <paramlist>
-          <param name="validator" type="wxValidator" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValidator" type="wxValidator" overloaded="no">
-        <autodoc>GetValidator(self) -&gt; Validator</autodoc>
-        <docstring>Returns a pointer to the current validator for the window, or None if
-there is none.</docstring>
-      </method>
-      <method name="Validate" type="bool" overloaded="no">
-        <autodoc>Validate(self) -&gt; bool</autodoc>
-        <docstring>Validates the current values of the child controls using their
-validators.  If the window has wx.WS_EX_VALIDATE_RECURSIVELY extra
-style flag set, the method will also call Validate() of all child
-windows.  Returns false if any of the validations failed.</docstring>
-      </method>
-      <method name="TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>TransferDataToWindow(self) -&gt; bool</autodoc>
-        <docstring>Transfers values to child controls from data areas specified by their
-validators.  If the window has wx.WS_EX_VALIDATE_RECURSIVELY extra
-style flag set, the method will also call TransferDataToWindow() of
-all child windows.</docstring>
-      </method>
-      <method name="TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>TransferDataFromWindow(self) -&gt; bool</autodoc>
-        <docstring>Transfers values from child controls to data areas specified by their
-validators. Returns false if a transfer failed.  If the window has
-wx.WS_EX_VALIDATE_RECURSIVELY extra style flag set, the method will
-also call TransferDataFromWindow() of all child windows.</docstring>
-      </method>
-      <method name="InitDialog" type="" overloaded="no">
-        <autodoc>InitDialog(self)</autodoc>
-        <docstring>Sends an EVT_INIT_DIALOG event, whose handler usually transfers data
-to the dialog via validators.</docstring>
-      </method>
-      <method name="SetAcceleratorTable" type="" overloaded="no">
-        <autodoc>SetAcceleratorTable(self, AcceleratorTable accel)</autodoc>
-        <docstring>Sets the accelerator table for this window.</docstring>
-        <paramlist>
-          <param name="accel" type="AcceleratorTable" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAcceleratorTable" type="AcceleratorTable" overloaded="no">
-        <autodoc>GetAcceleratorTable(self) -&gt; AcceleratorTable</autodoc>
-        <docstring>Gets the accelerator table for this window.</docstring>
-      </method>
-      <method name="RegisterHotKey" type="bool" overloaded="no">
-        <autodoc>RegisterHotKey(self, int hotkeyId, int modifiers, int keycode) -&gt; bool</autodoc>
-        <docstring>Registers a system wide hotkey. Every time the user presses the hotkey
-registered here, this window will receive a hotkey event. It will
-receive the event even if the application is in the background and
-does not have the input focus because the user is working with some
-other application.  To bind an event handler function to this hotkey
-use EVT_HOTKEY with an id equal to hotkeyId.  Returns True if the
-hotkey was registered successfully.</docstring>
-        <paramlist>
-          <param name="hotkeyId" type="int" default=""/>
-          <param name="modifiers" type="int" default=""/>
-          <param name="keycode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="UnregisterHotKey" type="bool" overloaded="no">
-        <autodoc>UnregisterHotKey(self, int hotkeyId) -&gt; bool</autodoc>
-        <docstring>Unregisters a system wide hotkey.</docstring>
-        <paramlist>
-          <param name="hotkeyId" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertDialogPointToPixels" type="Point" overloaded="no">
-        <autodoc>ConvertDialogPointToPixels(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Converts a point or size from dialog units to pixels.  Dialog units
-are used for maintaining a dialog's proportions even if the font
-changes. For the x dimension, the dialog units are multiplied by the
-average character width and then divided by 4. For the y dimension,
-the dialog units are multiplied by the average character height and
-then divided by 8.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertDialogSizeToPixels" type="Size" overloaded="no">
-        <autodoc>ConvertDialogSizeToPixels(self, Size sz) -&gt; Size</autodoc>
-        <docstring>Converts a point or size from dialog units to pixels.  Dialog units
-are used for maintaining a dialog's proportions even if the font
-changes. For the x dimension, the dialog units are multiplied by the
-average character width and then divided by 4. For the y dimension,
-the dialog units are multiplied by the average character height and
-then divided by 8.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="DLG_PNT" type="Point" overloaded="no">
-        <autodoc>DLG_PNT(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Converts a point or size from dialog units to pixels.  Dialog units
-are used for maintaining a dialog's proportions even if the font
-changes. For the x dimension, the dialog units are multiplied by the
-average character width and then divided by 4. For the y dimension,
-the dialog units are multiplied by the average character height and
-then divided by 8.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DLG_SZE" type="Size" overloaded="no">
-        <autodoc>DLG_SZE(self, Size sz) -&gt; Size</autodoc>
-        <docstring>Converts a point or size from dialog units to pixels.  Dialog units
-are used for maintaining a dialog's proportions even if the font
-changes. For the x dimension, the dialog units are multiplied by the
-average character width and then divided by 4. For the y dimension,
-the dialog units are multiplied by the average character height and
-then divided by 8.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertPixelPointToDialog" type="Point" overloaded="no">
-        <autodoc>ConvertPixelPointToDialog(self, Point pt) -&gt; Point</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertPixelSizeToDialog" type="Size" overloaded="no">
-        <autodoc>ConvertPixelSizeToDialog(self, Size sz) -&gt; Size</autodoc>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="WarpPointer" type="" overloaded="no">
-        <autodoc>WarpPointer(self, int x, int y)</autodoc>
-        <docstring>Moves the pointer to the given position on the window.
-
-NOTE: This function is not supported under Mac because Apple Human
-Interface Guidelines forbid moving the mouse cursor programmatically.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CaptureMouse" type="" overloaded="no">
-        <autodoc>CaptureMouse(self)</autodoc>
-        <docstring>Directs all mouse input to this window. Call wx.Window.ReleaseMouse to
-release the capture.
-
-Note that wxWindows maintains the stack of windows having captured the
-mouse and when the mouse is released the capture returns to the window
-which had had captured it previously and it is only really released if
-there were no previous window. In particular, this means that you must
-release the mouse as many times as you capture it.</docstring>
-      </method>
-      <method name="ReleaseMouse" type="" overloaded="no">
-        <autodoc>ReleaseMouse(self)</autodoc>
-        <docstring>Releases mouse input captured with wx.Window.CaptureMouse.</docstring>
-      </method>
-      <staticmethod name="GetCapture" type="Window" overloaded="no">
-        <autodoc>GetCapture() -&gt; Window</autodoc>
-        <docstring>Returns the window which currently captures the mouse or None</docstring>
-      </staticmethod>
-      <method name="HasCapture" type="bool" overloaded="no">
-        <autodoc>HasCapture(self) -&gt; bool</autodoc>
-        <docstring>Returns true if this window has the current mouse capture.</docstring>
-      </method>
-      <method name="Refresh" type="" overloaded="no">
-        <autodoc>Refresh(self, bool eraseBackground=True, Rect rect=None)</autodoc>
-        <docstring>Mark the specified rectangle (or the whole window) as "dirty" so it
-will be repainted.  Causes an EVT_PAINT event to be generated and sent
-to the window.</docstring>
-        <paramlist>
-          <param name="eraseBackground" type="bool" default="True"/>
-          <param name="rect" type="Rect" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="RefreshRect" type="" overloaded="no">
-        <autodoc>RefreshRect(self, Rect rect)</autodoc>
-        <docstring>Redraws the contents of the given rectangle: the area inside it will
-be repainted.  This is the same as Refresh but has a nicer syntax.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="Update" type="" overloaded="no">
-        <autodoc>Update(self)</autodoc>
-        <docstring>Calling this method immediately repaints the invalidated area of the
-window instead of waiting for the EVT_PAINT event to happen, (normally
-this would usually only happen when the flow of control returns to the
-event loop.)  Notice that this function doesn't refresh the window and
-does nothing if the window has been already repainted.  Use Refresh
-first if you want to immediately redraw the window (or some portion of
-it) unconditionally.</docstring>
-      </method>
-      <method name="ClearBackground" type="" overloaded="no">
-        <autodoc>ClearBackground(self)</autodoc>
-        <docstring>Clears the window by filling it with the current background
-colour. Does not cause an erase background event to be generated.</docstring>
-      </method>
-      <method name="Freeze" type="" overloaded="no">
-        <autodoc>Freeze(self)</autodoc>
-        <docstring>Freezes the window or, in other words, prevents any updates from
-taking place on screen, the window is not redrawn at all. Thaw must be
-called to reenable window redrawing.  Calls to Freeze/Thaw may be
-nested, with the actual Thaw being delayed until all the nesting has
-been undone.
-
-This method is useful for visual appearance optimization (for example,
-it is a good idea to use it before inserting large amount of text into
-a wxTextCtrl under wxGTK) but is not implemented on all platforms nor
-for all controls so it is mostly just a hint to wxWindows and not a
-mandatory directive.</docstring>
-      </method>
-      <method name="Thaw" type="" overloaded="no">
-        <autodoc>Thaw(self)</autodoc>
-        <docstring>Reenables window updating after a previous call to Freeze.  Calls to
-Freeze/Thaw may be nested, so Thaw must be called the same number of
-times that Freeze was before the window will be updated.</docstring>
-      </method>
-      <method name="PrepareDC" type="" overloaded="no">
-        <autodoc>PrepareDC(self, DC dc)</autodoc>
-        <docstring>Call this function to prepare the device context for drawing a
-scrolled image. It sets the device origin according to the current
-scroll position.</docstring>
-        <paramlist>
-          <param name="dc" type="wxDC" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUpdateRegion" type="wxRegion" overloaded="no">
-        <autodoc>GetUpdateRegion(self) -&gt; Region</autodoc>
-        <docstring>Returns the region specifying which parts of the window have been
-damaged. Should only be called within an EVT_PAINT handler.</docstring>
-      </method>
-      <method name="GetUpdateClientRect" type="Rect" overloaded="no">
-        <autodoc>GetUpdateClientRect(self) -&gt; Rect</autodoc>
-        <docstring>Get the update rectangle region bounding box in client coords.</docstring>
-      </method>
-      <method name="IsExposed" type="bool" overloaded="no">
-        <autodoc>IsExposed(self, int x, int y, int w=1, int h=1) -&gt; bool</autodoc>
-        <docstring>Returns true if the given point or rectangle area has been exposed
-since the last repaint. Call this in an paint event handler to
-optimize redrawing by only redrawing those areas, which have been
-exposed.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="w" type="int" default="1"/>
-          <param name="h" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="IsExposedPoint" type="bool" overloaded="no">
-        <autodoc>IsExposedPoint(self, Point pt) -&gt; bool</autodoc>
-        <docstring>Returns true if the given point or rectangle area has been exposed
-since the last repaint. Call this in an paint event handler to
-optimize redrawing by only redrawing those areas, which have been
-exposed.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsExposedRect" type="bool" overloaded="no">
-        <autodoc>IsExposedRect(self, Rect rect) -&gt; bool</autodoc>
-        <docstring>Returns true if the given point or rectangle area has been exposed
-since the last repaint. Call this in an paint event handler to
-optimize redrawing by only redrawing those areas, which have been
-exposed.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetDefaultAttributes(self) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for an instance of this class.  This is
-useful if you want to use the same font or colour in your own control
-as in a standard control -- which is a much better idea than hard
-coding specific colours or fonts which might look completely out of
-place on the user's system, especially if it uses themes.</docstring>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-      <method name="SetBackgroundColour" type="bool" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colour) -&gt; bool</autodoc>
-        <docstring>Sets the background colour of the window.  Returns True if the colour
-was changed.  The background colour is usually painted by the default
-EVT_ERASE_BACKGROUND event handler function under Windows and
-automatically under GTK.  Using `wx.NullColour` will reset the window
-to the default background colour.
-
-Note that setting the background colour may not cause an immediate
-refresh, so you may wish to call `ClearBackground` or `Refresh` after
-calling this function.
-
-Using this function will disable attempts to use themes for this
-window, if the system supports them.  Use with care since usually the
-themes represent the appearance chosen by the user to be used for all
-applications on the system.</docstring>
-        <paramlist>
-          <param name="colour" type="wxColour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOwnBackgroundColour" type="" overloaded="no">
-        <autodoc>SetOwnBackgroundColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="wxColour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetForegroundColour" type="bool" overloaded="no">
-        <autodoc>SetForegroundColour(self, Colour colour) -&gt; bool</autodoc>
-        <docstring>Sets the foreground colour of the window.  Returns True is the colour
-was changed.  The interpretation of foreground colour is dependent on
-the window class; it may be the text colour or other colour, or it may
-not be used at all.</docstring>
-        <paramlist>
-          <param name="colour" type="wxColour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOwnForegroundColour" type="" overloaded="no">
-        <autodoc>SetOwnForegroundColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="wxColour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBackgroundColour" type="wxColour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-        <docstring>Returns the background colour of the window.</docstring>
-      </method>
-      <method name="GetForegroundColour" type="wxColour" overloaded="no">
-        <autodoc>GetForegroundColour(self) -&gt; Colour</autodoc>
-        <docstring>Returns the foreground colour of the window.  The interpretation of
-foreground colour is dependent on the window class; it may be the text
-colour or other colour, or it may not be used at all.</docstring>
-      </method>
-      <method name="SetBackgroundStyle" type="bool" overloaded="no">
-        <autodoc>SetBackgroundStyle(self, int style) -&gt; bool</autodoc>
-        <docstring>Returns the background style of the window. The background style
-indicates how the background of the window is drawn.
-
-    ======================  ========================================
-    wx.BG_STYLE_SYSTEM      The background colour or pattern should
-                            be determined by the system
-    wx.BG_STYLE_COLOUR      The background should be a solid colour
-    wx.BG_STYLE_CUSTOM      The background will be implemented by the
-                            application.
-    ======================  ========================================
-
-On GTK+, use of wx.BG_STYLE_CUSTOM allows the flicker-free drawing of
-a custom background, such as a tiled bitmap. Currently the style has
-no effect on other platforms.
-
-:see: `GetBackgroundStyle`, `SetBackgroundColour`</docstring>
-        <paramlist>
-          <param name="style" type="wxBackgroundStyle" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBackgroundStyle" type="wxBackgroundStyle" overloaded="no">
-        <autodoc>GetBackgroundStyle(self) -&gt; int</autodoc>
-        <docstring>Returns the background style of the window.
-
-:see: `SetBackgroundStyle`</docstring>
-      </method>
-      <method name="SetCursor" type="bool" overloaded="no">
-        <autodoc>SetCursor(self, Cursor cursor) -&gt; bool</autodoc>
-        <docstring>Sets the window's cursor. Notice that the window cursor also sets it
-for the children of the window implicitly.
-
-The cursor may be wx.NullCursor in which case the window cursor will
-be reset back to default.</docstring>
-        <paramlist>
-          <param name="cursor" type="wxCursor" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCursor" type="wxCursor" overloaded="no">
-        <autodoc>GetCursor(self) -&gt; Cursor</autodoc>
-        <docstring>Return the cursor associated with this window.</docstring>
-      </method>
-      <method name="SetFont" type="bool" overloaded="no">
-        <autodoc>SetFont(self, Font font) -&gt; bool</autodoc>
-        <docstring>Sets the font for this window.</docstring>
-        <paramlist>
-          <param name="font" type="wxFont" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOwnFont" type="" overloaded="no">
-        <autodoc>SetOwnFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="wxFont" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFont" type="wxFont" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-        <docstring>Returns the default font used for this window.</docstring>
-      </method>
-      <method name="SetCaret" type="" overloaded="no">
-        <autodoc>SetCaret(self, Caret caret)</autodoc>
-        <docstring>Sets the caret associated with the window.</docstring>
-        <paramlist>
-          <param name="caret" type="wxCaret" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCaret" type="wxCaret" overloaded="no">
-        <autodoc>GetCaret(self) -&gt; Caret</autodoc>
-        <docstring>Returns the caret associated with the window.</docstring>
-      </method>
-      <method name="GetCharHeight" type="int" overloaded="no">
-        <autodoc>GetCharHeight(self) -&gt; int</autodoc>
-        <docstring>Get the (average) character size for the current font.</docstring>
-      </method>
-      <method name="GetCharWidth" type="int" overloaded="no">
-        <autodoc>GetCharWidth(self) -&gt; int</autodoc>
-        <docstring>Get the (average) character size for the current font.</docstring>
-      </method>
-      <method name="GetTextExtent" type="" overloaded="no">
-        <autodoc>GetTextExtent(String string) -&gt; (width, height)</autodoc>
-        <docstring>Get the width and height of the text using the current font.</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFullTextExtent" type="" overloaded="no">
-        <autodoc>GetFullTextExtent(String string, Font font=None) -&gt;
-   (width, height, descent, externalLeading)</autodoc>
-        <docstring>Get the width, height, decent and leading of the text using the
-current or specified font.</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="font" type="wxFont" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="ClientToScreenXY" type="" overloaded="no">
-        <autodoc>ClientToScreenXY(int x, int y) -&gt; (x,y)</autodoc>
-        <docstring>Converts to screen coordinates from coordinates relative to this window.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScreenToClientXY" type="" overloaded="no">
-        <autodoc>ScreenToClientXY(int x, int y) -&gt; (x,y)</autodoc>
-        <docstring>Converts from screen to client window coordinates.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClientToScreen" type="Point" overloaded="no">
-        <autodoc>ClientToScreen(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Converts to screen coordinates from coordinates relative to this window.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScreenToClient" type="Point" overloaded="no">
-        <autodoc>ScreenToClient(self, Point pt) -&gt; Point</autodoc>
-        <docstring>Converts from screen to client window coordinates.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTestXY" type="wxHitTest" overloaded="no">
-        <autodoc>HitTestXY(self, int x, int y) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="wxHitTest" overloaded="no">
-        <autodoc>HitTest(self, Point pt) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBorder" type="wxBorder" overloaded="yes">
-        <docstring>Get the window border style from the given flags: this is different
-from simply doing flags &amp; wxBORDER_MASK because it uses
-GetDefaultBorder() to translate wxBORDER_DEFAULT to something
-reasonable.
-</docstring>
-        <paramlist>
-          <param name="flags" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBorder" type="wxBorder" overloaded="yes">
-        <autodoc>GetBorder(self, long flags) -&gt; int
-GetBorder(self) -&gt; int</autodoc>
-        <docstring>Get border for the flags of this window</docstring>
-      </method>
-      <method name="UpdateWindowUI" type="" overloaded="no">
-        <autodoc>UpdateWindowUI(self, long flags=UPDATE_UI_NONE)</autodoc>
-        <docstring>This function sends EVT_UPDATE_UI events to the window. The particular
-implementation depends on the window; for example a wx.ToolBar will
-send an update UI event for each toolbar button, and a wx.Frame will
-send an update UI event for each menubar menu item. You can call this
-function from your application to ensure that your UI is up-to-date at
-a particular point in time (as far as your EVT_UPDATE_UI handlers are
-concerned). This may be necessary if you have called
-wx.UpdateUIEvent.SetMode or wx.UpdateUIEvent.SetUpdateInterval to
-limit the overhead that wxWindows incurs by sending update UI events
-in idle time.
-The flags should be a bitlist of one or more of the following values:
-
-    =====================      ==============================
-    wx.UPDATE_UI_NONE          No particular value
-    wx.UPDATE_UI_RECURSE       Call the function for descendants
-    wx.UPDATE_UI_FROMIDLE      Invoked from OnIdle
-    =====================      ==============================
-
-If you are calling this function from an OnIdle function, make sure
-you pass the wx.UPDATE_UI_FROMIDLE flag, since this tells the window
-to only update the UI elements that need to be updated in idle
-time. Some windows update their elements only when necessary, for
-example when a menu is about to be shown. The following is an example
-of how to call UpdateWindowUI from an idle function::
-
-    def OnIdle(self, evt):
-        if wx.UpdateUIEvent.CanUpdate(self):
-            self.UpdateWindowUI(wx.UPDATE_UI_FROMIDLE);
-</docstring>
-        <paramlist>
-          <param name="flags" type="long" default="wxUPDATE_UI_NONE"/>
-        </paramlist>
-      </method>
-      <method name="PopupMenuXY" type="bool" overloaded="no">
-        <autodoc>PopupMenuXY(self, Menu menu, int x=-1, int y=-1) -&gt; bool</autodoc>
-        <docstring>Pops up the given menu at the specified coordinates, relative to this window,
-and returns control when the user has dismissed the menu. If a menu item is
-selected, the corresponding menu event is generated and will be processed as
-usual.  If the default position is given then the current position of the
-mouse cursor will be used.</docstring>
-        <paramlist>
-          <param name="menu" type="wxMenu" default=""/>
-          <param name="x" type="int" default="-1"/>
-          <param name="y" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="PopupMenu" type="bool" overloaded="no">
-        <autodoc>PopupMenu(self, Menu menu, Point pos=DefaultPosition) -&gt; bool</autodoc>
-        <docstring>Pops up the given menu at the specified coordinates, relative to this window,
-and returns control when the user has dismissed the menu. If a menu item is
-selected, the corresponding menu event is generated and will be processed as
-usual.  If the default position is given then the current position of the
-mouse cursor will be used.</docstring>
-        <paramlist>
-          <param name="menu" type="wxMenu" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </method>
-      <method name="GetHandle" type="long" overloaded="no">
-        <autodoc>GetHandle(self) -&gt; long</autodoc>
-        <docstring>Returns the platform-specific handle (as a long integer) of the
-physical window.  Currently on wxMac it returns the handle of the
-toplevel parent of the window.</docstring>
-      </method>
-      <method name="HasScrollbar" type="bool" overloaded="no">
-        <autodoc>HasScrollbar(self, int orient) -&gt; bool</autodoc>
-        <docstring>Does the window have the scrollbar for this orientation?</docstring>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetScrollbar" type="" overloaded="no">
-        <autodoc>SetScrollbar(self, int orientation, int position, int thumbSize, int range, 
-    bool refresh=True)</autodoc>
-        <docstring>Sets the scrollbar properties of a built-in scrollbar.
-    :param orientation: Determines the scrollbar whose page size is to
-                 be set. May be wx.HORIZONTAL or wx.VERTICAL.
-
-    :param position: The position of the scrollbar in scroll units.
-
-    :param thumbSize: The size of the thumb, or visible portion of the
-                 scrollbar, in scroll units.
-
-    :param range: The maximum position of the scrollbar.
-
-    :param refresh: True to redraw the scrollbar, false otherwise.
-</docstring>
-        <paramlist>
-          <param name="orientation" type="int" default=""/>
-          <param name="position" type="int" default=""/>
-          <param name="thumbSize" type="int" default=""/>
-          <param name="range" type="int" default=""/>
-          <param name="refresh" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetScrollPos" type="" overloaded="no">
-        <autodoc>SetScrollPos(self, int orientation, int pos, bool refresh=True)</autodoc>
-        <docstring>Sets the position of one of the built-in scrollbars.</docstring>
-        <paramlist>
-          <param name="orientation" type="int" default=""/>
-          <param name="pos" type="int" default=""/>
-          <param name="refresh" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetScrollPos" type="int" overloaded="no">
-        <autodoc>GetScrollPos(self, int orientation) -&gt; int</autodoc>
-        <docstring>Returns the built-in scrollbar position.</docstring>
-        <paramlist>
-          <param name="orientation" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScrollThumb" type="int" overloaded="no">
-        <autodoc>GetScrollThumb(self, int orientation) -&gt; int</autodoc>
-        <docstring>Returns the built-in scrollbar thumb size.</docstring>
-        <paramlist>
-          <param name="orientation" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScrollRange" type="int" overloaded="no">
-        <autodoc>GetScrollRange(self, int orientation) -&gt; int</autodoc>
-        <docstring>Returns the built-in scrollbar range.</docstring>
-        <paramlist>
-          <param name="orientation" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollWindow" type="" overloaded="no">
-        <autodoc>ScrollWindow(self, int dx, int dy, Rect rect=None)</autodoc>
-        <docstring>Physically scrolls the pixels in the window and move child windows
-accordingly.  Use this function to optimise your scrolling
-implementations, to minimise the area that must be redrawn. Note that
-it is rarely required to call this function from a user program.
-    :param dx:   Amount to scroll horizontally.
-
-    :param dy:   Amount to scroll vertically.
-
-    :param rect: Rectangle to invalidate. If this is None, the whole
-          window is invalidated. If you pass a rectangle corresponding
-          to the area of the window exposed by the scroll, your
-          painting handler can optimize painting by checking for the
-          invalidated region.</docstring>
-        <paramlist>
-          <param name="dx" type="int" default=""/>
-          <param name="dy" type="int" default=""/>
-          <param name="rect" type="Rect" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="ScrollLines" type="bool" overloaded="no">
-        <autodoc>ScrollLines(self, int lines) -&gt; bool</autodoc>
-        <docstring>If the platform and window class supports it, scrolls the window by
-the given number of lines down, if lines is positive, or up if lines
-is negative.  Returns True if the window was scrolled, False if it was
-already on top/bottom and nothing was done.</docstring>
-        <paramlist>
-          <param name="lines" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollPages" type="bool" overloaded="no">
-        <autodoc>ScrollPages(self, int pages) -&gt; bool</autodoc>
-        <docstring>If the platform and window class supports it, scrolls the window by
-the given number of pages down, if pages is positive, or up if pages
-is negative.  Returns True if the window was scrolled, False if it was
-already on top/bottom and nothing was done.</docstring>
-        <paramlist>
-          <param name="pages" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LineUp" type="bool" overloaded="no">
-        <autodoc>LineUp(self) -&gt; bool</autodoc>
-        <docstring>This is just a wrapper for ScrollLines(-1).</docstring>
-      </method>
-      <method name="LineDown" type="bool" overloaded="no">
-        <autodoc>LineDown(self) -&gt; bool</autodoc>
-        <docstring>This is just a wrapper for ScrollLines(1).</docstring>
-      </method>
-      <method name="PageUp" type="bool" overloaded="no">
-        <autodoc>PageUp(self) -&gt; bool</autodoc>
-        <docstring>This is just a wrapper for ScrollPages(-1).</docstring>
-      </method>
-      <method name="PageDown" type="bool" overloaded="no">
-        <autodoc>PageDown(self) -&gt; bool</autodoc>
-        <docstring>This is just a wrapper for ScrollPages(1).</docstring>
-      </method>
-      <method name="SetHelpText" type="" overloaded="no">
-        <autodoc>SetHelpText(self, String text)</autodoc>
-        <docstring>Sets the help text to be used as context-sensitive help for this
-window.  Note that the text is actually stored by the current
-wxHelpProvider implementation, and not in the window object itself.</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHelpTextForId" type="" overloaded="no">
-        <autodoc>SetHelpTextForId(self, String text)</autodoc>
-        <docstring>Associate this help text with all windows with the same id as this
-one.</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHelpText" type="String" overloaded="no">
-        <autodoc>GetHelpText(self) -&gt; String</autodoc>
-        <docstring>Gets the help text to be used as context-sensitive help for this
-window.  Note that the text is actually stored by the current
-wxHelpProvider implementation, and not in the window object itself.</docstring>
-      </method>
-      <method name="SetToolTipString" type="" overloaded="no">
-        <autodoc>SetToolTipString(self, String tip)</autodoc>
-        <docstring>Attach a tooltip to the window.</docstring>
-        <paramlist>
-          <param name="tip" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolTip" type="" overloaded="no">
-        <autodoc>SetToolTip(self, ToolTip tip)</autodoc>
-        <docstring>Attach a tooltip to the window.</docstring>
-        <paramlist>
-          <param name="tip" type="wxToolTip" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolTip" type="wxToolTip" overloaded="no">
-        <autodoc>GetToolTip(self) -&gt; ToolTip</autodoc>
-        <docstring>get the associated tooltip or None if none</docstring>
-      </method>
-      <method name="SetDropTarget" type="" overloaded="no">
-        <autodoc>SetDropTarget(self, DropTarget dropTarget)</autodoc>
-        <docstring>Associates a drop target with this window.  If the window already has
-a drop target, it is deleted.</docstring>
-        <paramlist>
-          <param name="dropTarget" type="wxPyDropTarget" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDropTarget" type="wxPyDropTarget" overloaded="no">
-        <autodoc>GetDropTarget(self) -&gt; DropTarget</autodoc>
-        <docstring>Returns the associated drop target, which may be None.</docstring>
-      </method>
-      <method name="SetConstraints" type="" overloaded="no">
-        <autodoc>SetConstraints(self, LayoutConstraints constraints)</autodoc>
-        <docstring>Sets the window to have the given layout constraints. If an existing
-layout constraints object is already owned by the window, it will be
-deleted.  Pass None to disassociate and delete the window's current
-constraints.
-
-You must call SetAutoLayout to tell a window to use the constraints
-automatically in its default EVT_SIZE handler; otherwise, you must
-handle EVT_SIZE yourself and call Layout() explicitly. When setting
-both a wx.LayoutConstraints and a wx.Sizer, only the sizer will have
-effect.</docstring>
-        <paramlist>
-          <param name="constraints" type="wxLayoutConstraints" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetConstraints" type="wxLayoutConstraints" overloaded="no">
-        <autodoc>GetConstraints(self) -&gt; LayoutConstraints</autodoc>
-        <docstring>Returns a pointer to the window's layout constraints, or None if there
-are none.</docstring>
-      </method>
-      <method name="SetAutoLayout" type="" overloaded="no">
-        <autodoc>SetAutoLayout(self, bool autoLayout)</autodoc>
-        <docstring>Determines whether the Layout function will be called automatically
-when the window is resized.  It is called implicitly by SetSizer but
-if you use SetConstraints you should call it manually or otherwise the
-window layout won't be correctly updated when its size changes.</docstring>
-        <paramlist>
-          <param name="autoLayout" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAutoLayout" type="bool" overloaded="no">
-        <autodoc>GetAutoLayout(self) -&gt; bool</autodoc>
-        <docstring>Returns the current autoLayout setting</docstring>
-      </method>
-      <method name="Layout" type="bool" overloaded="no">
-        <autodoc>Layout(self) -&gt; bool</autodoc>
-        <docstring>Invokes the constraint-based layout algorithm or the sizer-based
-algorithm for this window.  See SetAutoLayout: when auto layout is on,
-this function gets called automatically by the default EVT_SIZE
-handler when the window is resized.</docstring>
-      </method>
-      <method name="SetSizer" type="" overloaded="no">
-        <autodoc>SetSizer(self, Sizer sizer, bool deleteOld=True)</autodoc>
-        <docstring>Sets the window to have the given layout sizer. The window will then
-own the object, and will take care of its deletion. If an existing
-layout sizer object is already owned by the window, it will be deleted
-if the deleteOld parameter is true. Note that this function will also
-call SetAutoLayout implicitly with a True parameter if the sizer is
-non-NoneL and False otherwise.</docstring>
-        <paramlist>
-          <param name="sizer" type="wxSizer" default=""/>
-          <param name="deleteOld" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetSizerAndFit" type="" overloaded="no">
-        <autodoc>SetSizerAndFit(self, Sizer sizer, bool deleteOld=True)</autodoc>
-        <docstring>The same as SetSizer, except it also sets the size hints for the
-window based on the sizer's minimum size.</docstring>
-        <paramlist>
-          <param name="sizer" type="wxSizer" default=""/>
-          <param name="deleteOld" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetSizer" type="wxSizer" overloaded="no">
-        <autodoc>GetSizer(self) -&gt; Sizer</autodoc>
-        <docstring>Return the sizer associated with the window by a previous call to
-SetSizer or None if there isn't one.</docstring>
-      </method>
-      <method name="SetContainingSizer" type="" overloaded="no">
-        <autodoc>SetContainingSizer(self, Sizer sizer)</autodoc>
-        <docstring>This normally does not need to be called by application code. It is
-called internally when a window is added to a sizer, and is used so
-the window can remove itself from the sizer when it is destroyed.</docstring>
-        <paramlist>
-          <param name="sizer" type="wxSizer" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetContainingSizer" type="wxSizer" overloaded="no">
-        <autodoc>GetContainingSizer(self) -&gt; Sizer</autodoc>
-        <docstring>Return the sizer that this window is a member of, if any, otherwise None.</docstring>
-      </method>
-      <method name="InheritAttributes" type="" overloaded="no">
-        <autodoc>InheritAttributes(self)</autodoc>
-        <docstring>This function is (or should be, in case of custom controls) called
-during window creation to intelligently set up the window visual
-attributes, that is the font and the foreground and background
-colours.
-
-By 'intelligently' the following is meant: by default, all windows use
-their own default attributes. However if some of the parent's
-attributes are explicitly changed (that is, using SetFont and not
-SetOwnFont) and if the corresponding attribute hadn't been
-explicitly set for this window itself, then this window takes the same
-value as used by the parent. In addition, if the window overrides
-ShouldInheritColours to return false, the colours will not be changed
-no matter what and only the font might.
-
-This rather complicated logic is necessary in order to accommodate the
-different usage scenarius. The most common one is when all default
-attributes are used and in this case, nothing should be inherited as
-in modern GUIs different controls use different fonts (and colours)
-than their siblings so they can't inherit the same value from the
-parent. However it was also deemed desirable to allow to simply change
-the attributes of all children at once by just changing the font or
-colour of their common parent, hence in this case we do inherit the
-parents attributes.
-</docstring>
-      </method>
-      <method name="ShouldInheritColours" type="bool" overloaded="no">
-        <autodoc>ShouldInheritColours(self) -&gt; bool</autodoc>
-        <docstring>Return true from here to allow the colours of this window to be
-changed by InheritAttributes, returning false forbids inheriting them
-from the parent window.
-
-The base class version returns false, but this method is overridden in
-wxControl where it returns true.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-def DLG_PNT(win, point_or_x, y=None):
-    """
-    Convenience function for converting a Point or (x,y) in
-    dialog units to pixel units.
-    """
-    if y is None:
-        return win.ConvertDialogPointToPixels(point_or_x)
-    else:
-        return win.ConvertDialogPointToPixels(wx.Point(point_or_x, y))
-
-def DLG_SZE(win, size_width, height=None):
-    """
-    Convenience function for converting a Size or (w,h) in
-    dialog units to pixel units.
-    """
-    if height is None:
-        return win.ConvertDialogSizeToPixels(size_width)
-    else:
-        return win.ConvertDialogSizeToPixels(wx.Size(size_width, height))
-</pythoncode>
-    <method name="FindWindowById" oldname="wxFindWindowById" type="Window" overloaded="no">
-      <autodoc>FindWindowById(long id, Window parent=None) -&gt; Window</autodoc>
-      <docstring>Find the first window in the application with the given id. If parent
-is None, the search will start from all top-level frames and dialog
-boxes; if non-None, the search will be limited to the given window
-hierarchy. The search is recursive in both cases.</docstring>
-      <paramlist>
-        <param name="id" type="long" default=""/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="FindWindowByName" oldname="wxFindWindowByName" type="Window" overloaded="no">
-      <autodoc>FindWindowByName(String name, Window parent=None) -&gt; Window</autodoc>
-      <docstring>Find a window by its name (as given in a window constructor or Create
-function call). If parent is None, the search will start from all
-top-level frames and dialog boxes; if non-None, the search will be
-limited to the given window hierarchy. The search is recursive in both
-cases.
-
-If no window with such name is found, wx.FindWindowByLabel is called.</docstring>
-      <paramlist>
-        <param name="name" type="String" default=""/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="FindWindowByLabel" oldname="wxFindWindowByLabel" type="Window" overloaded="no">
-      <autodoc>FindWindowByLabel(String label, Window parent=None) -&gt; Window</autodoc>
-      <docstring>Find a window by its label. Depending on the type of window, the label
-may be a window title or panel item label. If parent is None, the
-search will start from all top-level frames and dialog boxes; if
-non-None, the search will be limited to the given window
-hierarchy. The search is recursive in both cases.</docstring>
-      <paramlist>
-        <param name="label" type="String" default=""/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="Window_FromHWND" oldname="wxWindow_FromHWND" type="Window" overloaded="no">
-      <autodoc>Window_FromHWND(Window parent, unsigned long _hWnd) -&gt; Window</autodoc>
-      <paramlist>
-        <param name="parent" type="Window" default=""/>
-        <param name="_hWnd" type="unsigned long" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Validator" oldname="wxValidator" module="_core">
-      <baseclass name="EvtHandler"/>
-      <constructor name="Validator" overloaded="no">
-        <autodoc>__init__(self) -&gt; Validator</autodoc>
-      </constructor>
-      <method name="Clone" type="Validator" overloaded="no">
-        <autodoc>Clone(self) -&gt; Validator</autodoc>
-      </method>
-      <method name="Validate" type="bool" overloaded="no">
-        <autodoc>Validate(self, Window parent) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="TransferToWindow" type="bool" overloaded="no">
-        <autodoc>TransferToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="TransferFromWindow" type="bool" overloaded="no">
-        <autodoc>TransferFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetWindow" type="Window" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="SetWindow" type="" overloaded="no">
-        <autodoc>SetWindow(self, Window window)</autodoc>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="IsSilent" type="bool" overloaded="no">
-        <autodoc>IsSilent() -&gt; bool</autodoc>
-      </staticmethod>
-      <staticmethod name="SetBellOnError" type="" overloaded="no">
-        <autodoc>SetBellOnError(int doIt=True)</autodoc>
-        <paramlist>
-          <param name="doIt" type="int" default="True"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="PyValidator" oldname="wxPyValidator" module="_core">
-      <baseclass name="Validator"/>
-      <constructor name="PyValidator" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyValidator</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class, int incref=True)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-          <param name="incref" type="int" default="True"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Menu" oldname="wxMenu" module="_core">
-      <baseclass name="EvtHandler"/>
-      <constructor name="Menu" overloaded="no">
-        <autodoc>__init__(self, String title=EmptyString, long style=0) -&gt; Menu</autodoc>
-        <paramlist>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="Append" type="wxMenuItem" overloaded="no">
-        <autodoc>Append(self, int id, String text, String help=EmptyString, int kind=ITEM_NORMAL) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-        </paramlist>
-      </method>
-      <method name="AppendSeparator" type="wxMenuItem" overloaded="no">
-        <autodoc>AppendSeparator(self) -&gt; MenuItem</autodoc>
-      </method>
-      <method name="AppendCheckItem" type="wxMenuItem" overloaded="no">
-        <autodoc>AppendCheckItem(self, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="AppendRadioItem" type="wxMenuItem" overloaded="no">
-        <autodoc>AppendRadioItem(self, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="AppendMenu" type="wxMenuItem" overloaded="no">
-        <autodoc>AppendMenu(self, int id, String text, Menu submenu, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="submenu" type="Menu" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="AppendItem" type="wxMenuItem" overloaded="no">
-        <autodoc>AppendItem(self, MenuItem item) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="Break" type="" overloaded="no">
-        <autodoc>Break(self)</autodoc>
-      </method>
-      <method name="InsertItem" type="wxMenuItem" overloaded="no">
-        <autodoc>InsertItem(self, size_t pos, MenuItem item) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="Insert" type="wxMenuItem" overloaded="no">
-        <autodoc>Insert(self, size_t pos, int id, String text, String help=EmptyString, 
-    int kind=ITEM_NORMAL) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-        </paramlist>
-      </method>
-      <method name="InsertSeparator" type="wxMenuItem" overloaded="no">
-        <autodoc>InsertSeparator(self, size_t pos) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertCheckItem" type="wxMenuItem" overloaded="no">
-        <autodoc>InsertCheckItem(self, size_t pos, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="InsertRadioItem" type="wxMenuItem" overloaded="no">
-        <autodoc>InsertRadioItem(self, size_t pos, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="InsertMenu" type="wxMenuItem" overloaded="no">
-        <autodoc>InsertMenu(self, size_t pos, int id, String text, Menu submenu, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="submenu" type="Menu" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="PrependItem" type="wxMenuItem" overloaded="no">
-        <autodoc>PrependItem(self, MenuItem item) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="Prepend" type="wxMenuItem" overloaded="no">
-        <autodoc>Prepend(self, int id, String text, String help=EmptyString, int kind=ITEM_NORMAL) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-        </paramlist>
-      </method>
-      <method name="PrependSeparator" type="wxMenuItem" overloaded="no">
-        <autodoc>PrependSeparator(self) -&gt; MenuItem</autodoc>
-      </method>
-      <method name="PrependCheckItem" type="wxMenuItem" overloaded="no">
-        <autodoc>PrependCheckItem(self, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="PrependRadioItem" type="wxMenuItem" overloaded="no">
-        <autodoc>PrependRadioItem(self, int id, String text, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="PrependMenu" type="wxMenuItem" overloaded="no">
-        <autodoc>PrependMenu(self, int id, String text, Menu submenu, String help=EmptyString) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="submenu" type="Menu" default=""/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="Remove" type="wxMenuItem" overloaded="no">
-        <autodoc>Remove(self, int id) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveItem" type="wxMenuItem" overloaded="no">
-        <autodoc>RemoveItem(self, MenuItem item) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="Delete" type="bool" overloaded="no">
-        <autodoc>Delete(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteItem" type="bool" overloaded="no">
-        <autodoc>DeleteItem(self, MenuItem item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-      </method>
-      <method name="DestroyId" type="bool" overloaded="no">
-        <autodoc>DestroyId(self, int id) -&gt; bool</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DestroyItem" type="bool" overloaded="no">
-        <autodoc>DestroyItem(self, MenuItem item) -&gt; bool</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-        <paramlist>
-          <param name="item" type="wxMenuItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMenuItemCount" type="size_t" overloaded="no">
-        <autodoc>GetMenuItemCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetMenuItems" type="PyObject" overloaded="no">
-        <autodoc>GetMenuItems(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="FindItem" type="int" overloaded="no">
-        <autodoc>FindItem(self, String item) -&gt; int</autodoc>
-        <paramlist>
-          <param name="item" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemById" type="wxMenuItem" overloaded="no">
-        <autodoc>FindItemById(self, int id) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemByPosition" type="wxMenuItem" overloaded="no">
-        <autodoc>FindItemByPosition(self, size_t position) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="position" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="Enable" type="" overloaded="no">
-        <autodoc>Enable(self, int id, bool enable)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Check" type="" overloaded="no">
-        <autodoc>Check(self, int id, bool check)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="check" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, int id, String label)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHelpString" type="" overloaded="no">
-        <autodoc>SetHelpString(self, int id, String helpString)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="helpString" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHelpString" type="String" overloaded="no">
-        <autodoc>GetHelpString(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTitle" type="" overloaded="no">
-        <autodoc>SetTitle(self, String title)</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTitle" type="String" overloaded="no">
-        <autodoc>GetTitle(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetEventHandler" type="" overloaded="no">
-        <autodoc>SetEventHandler(self, EvtHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEventHandler" type="EvtHandler" overloaded="no">
-        <autodoc>GetEventHandler(self) -&gt; EvtHandler</autodoc>
-      </method>
-      <method name="SetInvokingWindow" type="" overloaded="no">
-        <autodoc>SetInvokingWindow(self, Window win)</autodoc>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetInvokingWindow" type="Window" overloaded="no">
-        <autodoc>GetInvokingWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetStyle" type="long" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; long</autodoc>
-      </method>
-      <method name="UpdateUI" type="" overloaded="no">
-        <autodoc>UpdateUI(self, EvtHandler source=None)</autodoc>
-        <paramlist>
-          <param name="source" type="EvtHandler" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="GetMenuBar" type="wxMenuBar" overloaded="no">
-        <autodoc>GetMenuBar(self) -&gt; MenuBar</autodoc>
-      </method>
-      <method name="Attach" type="" overloaded="no">
-        <autodoc>Attach(self, wxMenuBarBase menubar)</autodoc>
-        <paramlist>
-          <param name="menubar" type="wxMenuBarBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="Detach" type="" overloaded="no">
-        <autodoc>Detach(self)</autodoc>
-      </method>
-      <method name="IsAttached" type="bool" overloaded="no">
-        <autodoc>IsAttached(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetParent" type="" overloaded="no">
-        <autodoc>SetParent(self, Menu parent)</autodoc>
-        <paramlist>
-          <param name="parent" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParent" type="Menu" overloaded="no">
-        <autodoc>GetParent(self) -&gt; Menu</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MenuBar" oldname="wxMenuBar" module="_core">
-      <baseclass name="Window"/>
-      <constructor name="MenuBar" overloaded="no">
-        <autodoc>__init__(self, long style=0) -&gt; MenuBar</autodoc>
-        <paramlist>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="Append" type="bool" overloaded="no">
-        <autodoc>Append(self, Menu menu, String title) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Insert" type="bool" overloaded="no">
-        <autodoc>Insert(self, size_t pos, Menu menu, String title) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="menu" type="Menu" default=""/>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMenuCount" type="size_t" overloaded="no">
-        <autodoc>GetMenuCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetMenu" type="Menu" overloaded="no">
-        <autodoc>GetMenu(self, size_t pos) -&gt; Menu</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="Replace" type="Menu" overloaded="no">
-        <autodoc>Replace(self, size_t pos, Menu menu, String title) -&gt; Menu</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="menu" type="Menu" default=""/>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Remove" type="Menu" overloaded="no">
-        <autodoc>Remove(self, size_t pos) -&gt; Menu</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableTop" type="" overloaded="no">
-        <autodoc>EnableTop(self, size_t pos, bool enable)</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEnabledTop" type="bool" overloaded="no">
-        <autodoc>IsEnabledTop(self, size_t pos) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabelTop" type="" overloaded="no">
-        <autodoc>SetLabelTop(self, size_t pos, String label)</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabelTop" type="String" overloaded="no">
-        <autodoc>GetLabelTop(self, size_t pos) -&gt; String</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindMenuItem" type="int" overloaded="no">
-        <autodoc>FindMenuItem(self, String menu, String item) -&gt; int</autodoc>
-        <paramlist>
-          <param name="menu" type="String" default=""/>
-          <param name="item" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemById" type="wxMenuItem" overloaded="no">
-        <autodoc>FindItemById(self, int id) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindMenu" type="int" overloaded="no">
-        <autodoc>FindMenu(self, String title) -&gt; int</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Enable" type="" overloaded="no">
-        <autodoc>Enable(self, int id, bool enable)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Check" type="" overloaded="no">
-        <autodoc>Check(self, int id, bool check)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="check" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, int id, String label)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHelpString" type="" overloaded="no">
-        <autodoc>SetHelpString(self, int id, String helpString)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="helpString" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHelpString" type="String" overloaded="no">
-        <autodoc>GetHelpString(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFrame" type="wxFrame" overloaded="no">
-        <autodoc>GetFrame(self) -&gt; wxFrame</autodoc>
-      </method>
-      <method name="IsAttached" type="bool" overloaded="no">
-        <autodoc>IsAttached(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Attach" type="" overloaded="no">
-        <autodoc>Attach(self, wxFrame frame)</autodoc>
-        <paramlist>
-          <param name="frame" type="wxFrame" default=""/>
-        </paramlist>
-      </method>
-      <method name="Detach" type="" overloaded="no">
-        <autodoc>Detach(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MenuItem" oldname="wxMenuItem" module="_core">
-      <baseclass name="Object"/>
-      <constructor name="MenuItem" overloaded="no">
-        <autodoc>__init__(self, Menu parentMenu=None, int id=ID_ANY, String text=EmptyString, 
-    String help=EmptyString, int kind=ITEM_NORMAL, 
-    Menu subMenu=None) -&gt; MenuItem</autodoc>
-        <paramlist>
-          <param name="parentMenu" type="Menu" default="NULL"/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="text" type="String" default="wxPyEmptyString"/>
-          <param name="help" type="String" default="wxPyEmptyString"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-          <param name="subMenu" type="Menu" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetMenu" type="Menu" overloaded="no">
-        <autodoc>GetMenu(self) -&gt; Menu</autodoc>
-      </method>
-      <method name="SetMenu" type="" overloaded="no">
-        <autodoc>SetMenu(self, Menu menu)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, int id)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsSeparator" type="bool" overloaded="no">
-        <autodoc>IsSeparator(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <staticmethod name="GetLabelFromText" type="String" overloaded="no">
-        <autodoc>GetLabelFromText(String text) -&gt; String</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="GetKind" type="wxItemKind" overloaded="no">
-        <autodoc>GetKind(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetKind" type="" overloaded="no">
-        <autodoc>SetKind(self, int kind)</autodoc>
-        <paramlist>
-          <param name="kind" type="wxItemKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCheckable" type="" overloaded="no">
-        <autodoc>SetCheckable(self, bool checkable)</autodoc>
-        <paramlist>
-          <param name="checkable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsCheckable" type="bool" overloaded="no">
-        <autodoc>IsCheckable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsSubMenu" type="bool" overloaded="no">
-        <autodoc>IsSubMenu(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSubMenu" type="" overloaded="no">
-        <autodoc>SetSubMenu(self, Menu menu)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSubMenu" type="Menu" overloaded="no">
-        <autodoc>GetSubMenu(self) -&gt; Menu</autodoc>
-      </method>
-      <method name="Enable" type="" overloaded="no">
-        <autodoc>Enable(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Check" type="" overloaded="no">
-        <autodoc>Check(self, bool check=True)</autodoc>
-        <paramlist>
-          <param name="check" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Toggle" type="" overloaded="no">
-        <autodoc>Toggle(self)</autodoc>
-      </method>
-      <method name="SetHelp" type="" overloaded="no">
-        <autodoc>SetHelp(self, String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHelp" type="String" overloaded="no">
-        <autodoc>GetHelp(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetAccel" type="AcceleratorEntry" overloaded="no">
-        <autodoc>GetAccel(self) -&gt; AcceleratorEntry</autodoc>
-      </method>
-      <method name="SetAccel" type="" overloaded="no">
-        <autodoc>SetAccel(self, AcceleratorEntry accel)</autodoc>
-        <paramlist>
-          <param name="accel" type="AcceleratorEntry" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetDefaultMarginWidth" type="int" overloaded="no">
-        <autodoc>GetDefaultMarginWidth() -&gt; int</autodoc>
-      </staticmethod>
-      <method name="SetBitmap" type="" overloaded="no">
-        <autodoc>SetBitmap(self, Bitmap bitmap)</autodoc>
-        <paramlist>
-          <param name="bitmap" type="wxBitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBitmap" type="wxBitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Control" oldname="wxControl" module="_core">
-      <docstring>This is the base class for a control or 'widget'.
-
-A control is generally a small window which processes user input
-and/or displays one or more item of data.</docstring>
-      <baseclass name="Window"/>
-      <constructor name="Control" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, Validator validator=DefaultValidator, 
-    String name=ControlNameStr) -&gt; Control</autodoc>
-        <docstring>Create a Control.  Normally you should only call this from a subclass'
-__init__ as a plain old wx.Control is not very useful.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyControlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreControl" overloaded="no">
-        <autodoc>PreControl() -&gt; Control</autodoc>
-        <docstring>Precreate a Control control for 2-phase creation</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, Validator validator=DefaultValidator, 
-    String name=ControlNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyControlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="Command" type="" overloaded="no">
-        <autodoc>Command(self, CommandEvent event)</autodoc>
-        <docstring>Simulates the effect of the user issuing a command to the item.
-
-:see: `wx.CommandEvent`
-</docstring>
-        <paramlist>
-          <param name="event" type="CommandEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-        <docstring>Return a control's text.</docstring>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, String label)</autodoc>
-        <docstring>Sets the item's text.</docstring>
-        <paramlist>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ItemContainer" oldname="wxItemContainer" module="_core">
-      <docstring>wx.ItemContainer defines an interface which is implemented by all
-controls which have string subitems, each of which may be selected,
-such as `wx.ListBox`, `wx.CheckListBox`, `wx.Choice` as well as
-`wx.ComboBox` which implements an extended interface deriving from
-this one.
-
-It defines the methods for accessing the control's items and although
-each of the derived classes implements them differently, they still
-all conform to the same interface.
-
-The items in a wx.ItemContainer have (non empty) string labels and,
-optionally, client data associated with them.
-</docstring>
-      <method name="Append" type="int" overloaded="no">
-        <autodoc>Append(self, String item, PyObject clientData=None) -&gt; int</autodoc>
-        <docstring>Adds the item to the control, associating the given data with the item
-if not None.  The return value is the index of the newly added item
-which may be different from the last one if the control is sorted (e.g.
-has wx.LB_SORT or wx.CB_SORT style).</docstring>
-        <paramlist>
-          <param name="item" type="String" default=""/>
-          <param name="clientData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AppendItems" type="" overloaded="no">
-        <autodoc>AppendItems(self, List strings)</autodoc>
-        <docstring>Apend several items at once to the control.  Notice that calling this
-method may be much faster than appending the items one by one if you
-need to add a lot of items.</docstring>
-        <paramlist>
-          <param name="strings" type="wxArrayString" default=""/>
-        </paramlist>
-      </method>
-      <method name="Insert" type="int" overloaded="no">
-        <autodoc>Insert(self, String item, int pos, PyObject clientData=None) -&gt; int</autodoc>
-        <docstring>Insert an item into the control before the item at the ``pos`` index,
-optionally associating some data object with the item.</docstring>
-        <paramlist>
-          <param name="item" type="String" default=""/>
-          <param name="pos" type="int" default=""/>
-          <param name="clientData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-        <docstring>Removes all items from the control.</docstring>
-      </method>
-      <method name="Delete" type="" overloaded="no">
-        <autodoc>Delete(self, int n)</autodoc>
-        <docstring>Deletes the item at the zero-based index 'n' from the control. Note
-that it is an error (signalled by a `wx.PyAssertionError` exception if
-enabled) to remove an item with the index negative or greater or equal
-than the number of items in the control.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-        <docstring>Returns the number of items in the control.</docstring>
-      </method>
-      <method name="IsEmpty" type="bool" overloaded="no">
-        <autodoc>IsEmpty(self) -&gt; bool</autodoc>
-        <docstring>Returns True if the control is empty or False if it has some items.</docstring>
-      </method>
-      <method name="GetString" type="String" overloaded="no">
-        <autodoc>GetString(self, int n) -&gt; String</autodoc>
-        <docstring>Returns the label of the item with the given index.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStrings" type="wxArrayString" overloaded="no">
-        <autodoc>GetStrings(self) -&gt; wxArrayString</autodoc>
-      </method>
-      <method name="SetString" type="" overloaded="no">
-        <autodoc>SetString(self, int n, String s)</autodoc>
-        <docstring>Sets the label for the given item.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindString" type="int" overloaded="no">
-        <autodoc>FindString(self, String s) -&gt; int</autodoc>
-        <docstring>Finds an item whose label matches the given string.  Returns the
-zero-based position of the item, or ``wx.NOT_FOUND`` if the string was not
-found.</docstring>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Select" type="" overloaded="no">
-        <autodoc>Select(self, int n)</autodoc>
-        <docstring>Sets the item at index 'n' to be the selected item.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-        <docstring>Returns the index of the selected item or ``wx.NOT_FOUND`` if no item
-is selected.</docstring>
-      </method>
-      <method name="GetStringSelection" type="String" overloaded="no">
-        <autodoc>GetStringSelection(self) -&gt; String</autodoc>
-        <docstring>Returns the label of the selected item or an empty string if no item
-is selected.</docstring>
-      </method>
-      <method name="GetClientData" type="PyObject" overloaded="no">
-        <autodoc>GetClientData(self, int n) -&gt; PyObject</autodoc>
-        <docstring>Returns the client data associated with the given item, (if any.)</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClientData" type="" overloaded="no">
-        <autodoc>SetClientData(self, int n, PyObject clientData)</autodoc>
-        <docstring>Associate the given client data with the item at position n.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="clientData" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ControlWithItems" oldname="wxControlWithItems" module="_core">
-      <docstring>wx.ControlWithItems combines the ``wx.ItemContainer`` class with the
-wx.Control class, and is used for the base class of various controls
-that have items.</docstring>
-      <baseclass name="Control"/>
-      <baseclass name="ItemContainer"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SizerItem" oldname="wxSizerItem" module="_core">
-      <docstring>The wx.SizerItem class is used to track the position, size and other
-attributes of each item managed by a `wx.Sizer`. In normal usage user
-code should never need to deal directly with a wx.SizerItem, but
-custom classes derived from `wx.PySizer` will probably need to use the
-collection of wx.SizerItems held by wx.Sizer when calculating layout.
-
-:see: `wx.Sizer`, `wx.GBSizerItem`</docstring>
-      <baseclass name="Object"/>
-      <constructor name="SizerItem" overloaded="no">
-        <autodoc>__init__(self) -&gt; SizerItem</autodoc>
-        <docstring>Constructs an empty wx.SizerItem.  Either a window, sizer or spacer
-size will need to be set before this item can be used in a Sizer.
-
-You will probably never need to create a wx.SizerItem directly as they
-are created automatically when the sizer's Add, Insert or Prepend
-methods are called.
-
-:see: `wx.SizerItemSpacer`, `wx.SizerItemWindow`, `wx.SizerItemSizer`</docstring>
-      </constructor>
-      <constructor name="SizerItemWindow" overloaded="no">
-        <autodoc>SizerItemWindow(Window window, int proportion, int flag, int border, 
-    PyObject userData=None) -&gt; SizerItem</autodoc>
-        <docstring>Constructs a `wx.SizerItem` for tracking a window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="proportion" type="int" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="SizerItemSpacer" overloaded="no">
-        <autodoc>SizerItemSpacer(int width, int height, int proportion, int flag, int border, 
-    PyObject userData=None) -&gt; SizerItem</autodoc>
-        <docstring>Constructs a `wx.SizerItem` for tracking a spacer.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="proportion" type="int" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="SizerItemSizer" overloaded="no">
-        <autodoc>SizerItemSizer(Sizer sizer, int proportion, int flag, int border, 
-    PyObject userData=None) -&gt; SizerItem</autodoc>
-        <docstring>Constructs a `wx.SizerItem` for tracking a subsizer</docstring>
-        <paramlist>
-          <param name="sizer" type="wxSizer" default=""/>
-          <param name="proportion" type="int" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="DeleteWindows" type="" overloaded="no">
-        <autodoc>DeleteWindows(self)</autodoc>
-        <docstring>Destroy the window or the windows in a subsizer, depending on the type
-of item.</docstring>
-      </method>
-      <method name="DetachSizer" type="" overloaded="no">
-        <autodoc>DetachSizer(self)</autodoc>
-        <docstring>Enable deleting the SizerItem without destroying the contained sizer.</docstring>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-        <docstring>Get the current size of the item, as set in the last Layout.</docstring>
-      </method>
-      <method name="CalcMin" type="Size" overloaded="no">
-        <autodoc>CalcMin(self) -&gt; Size</autodoc>
-        <docstring>Calculates the minimum desired size for the item, including any space
-needed by borders.</docstring>
-      </method>
-      <method name="SetDimension" type="" overloaded="no">
-        <autodoc>SetDimension(self, Point pos, Size size)</autodoc>
-        <docstring>Set the position and size of the space allocated for this item by the
-sizer, and adjust the position and size of the item (window or
-subsizer) to be within that space taking alignment and borders into
-account.</docstring>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMinSize" type="Size" overloaded="no">
-        <autodoc>GetMinSize(self) -&gt; Size</autodoc>
-        <docstring>Get the minimum size needed for the item.</docstring>
-      </method>
-      <method name="GetMinSizeWithBorder" type="Size" overloaded="no">
-        <autodoc>GetMinSizeWithBorder(self) -&gt; Size</autodoc>
-        <docstring>Get the minimum size needed for the item with space for the borders
-added, if needed.</docstring>
-      </method>
-      <method name="SetInitSize" type="" overloaded="no">
-        <autodoc>SetInitSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRatioWH" type="" overloaded="no">
-        <autodoc>SetRatioWH(self, int width, int height)</autodoc>
-        <docstring>Set the ratio item attribute.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRatioSize" type="" overloaded="no">
-        <autodoc>SetRatioSize(self, Size size)</autodoc>
-        <docstring>Set the ratio item attribute.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRatio" type="" overloaded="no">
-        <autodoc>SetRatio(self, float ratio)</autodoc>
-        <docstring>Set the ratio item attribute.</docstring>
-        <paramlist>
-          <param name="ratio" type="float" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRatio" type="float" overloaded="no">
-        <autodoc>GetRatio(self) -&gt; float</autodoc>
-        <docstring>Set the ratio item attribute.</docstring>
-      </method>
-      <method name="IsWindow" type="bool" overloaded="no">
-        <autodoc>IsWindow(self) -&gt; bool</autodoc>
-        <docstring>Is this sizer item a window?</docstring>
-      </method>
-      <method name="IsSizer" type="bool" overloaded="no">
-        <autodoc>IsSizer(self) -&gt; bool</autodoc>
-        <docstring>Is this sizer item a subsizer?</docstring>
-      </method>
-      <method name="IsSpacer" type="bool" overloaded="no">
-        <autodoc>IsSpacer(self) -&gt; bool</autodoc>
-        <docstring>Is this sizer item a spacer?</docstring>
-      </method>
-      <method name="SetProportion" type="" overloaded="no">
-        <autodoc>SetProportion(self, int proportion)</autodoc>
-        <docstring>Set the proportion value for this item.</docstring>
-        <paramlist>
-          <param name="proportion" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetProportion" type="int" overloaded="no">
-        <autodoc>GetProportion(self) -&gt; int</autodoc>
-        <docstring>Get the proportion value for this item.</docstring>
-      </method>
-      <method name="SetFlag" type="" overloaded="no">
-        <autodoc>SetFlag(self, int flag)</autodoc>
-        <docstring>Set the flag value for this item.</docstring>
-        <paramlist>
-          <param name="flag" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFlag" type="int" overloaded="no">
-        <autodoc>GetFlag(self) -&gt; int</autodoc>
-        <docstring>Get the flag value for this item.</docstring>
-      </method>
-      <method name="SetBorder" type="" overloaded="no">
-        <autodoc>SetBorder(self, int border)</autodoc>
-        <docstring>Set the border value for this item.</docstring>
-        <paramlist>
-          <param name="border" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBorder" type="int" overloaded="no">
-        <autodoc>GetBorder(self) -&gt; int</autodoc>
-        <docstring>Get the border value for this item.</docstring>
-      </method>
-      <method name="GetWindow" type="Window" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-        <docstring>Get the window (if any) that is managed by this sizer item.</docstring>
-      </method>
-      <method name="SetWindow" type="" overloaded="no">
-        <autodoc>SetWindow(self, Window window)</autodoc>
-        <docstring>Set the window to be managed by this sizer item.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSizer" type="wxSizer" overloaded="no">
-        <autodoc>GetSizer(self) -&gt; Sizer</autodoc>
-        <docstring>Get the subsizer (if any) that is managed by this sizer item.</docstring>
-      </method>
-      <method name="SetSizer" type="" overloaded="no">
-        <autodoc>SetSizer(self, Sizer sizer)</autodoc>
-        <docstring>Set the subsizer to be managed by this sizer item.</docstring>
-        <paramlist>
-          <param name="sizer" type="wxSizer" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSpacer" type="Size" overloaded="no">
-        <autodoc>GetSpacer(self) -&gt; Size</autodoc>
-        <docstring>Get the size of the spacer managed by this sizer item.</docstring>
-      </method>
-      <method name="SetSpacer" type="" overloaded="no">
-        <autodoc>SetSpacer(self, Size size)</autodoc>
-        <docstring>Set the size of the spacer to be managed by this sizer item.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, bool show)</autodoc>
-        <docstring>Set the show item attribute, which sizers use to determine if the item
-is to be made part of the layout or not. If the item is tracking a
-window then it is shown or hidden as needed.</docstring>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsShown" type="bool" overloaded="no">
-        <autodoc>IsShown(self) -&gt; bool</autodoc>
-        <docstring>Is the item to be shown in the layout?</docstring>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Returns the current position of the item, as set in the last Layout.</docstring>
-      </method>
-      <method name="GetUserData" type="PyObject" overloaded="no">
-        <autodoc>GetUserData(self) -&gt; PyObject</autodoc>
-        <docstring>Returns the userData associated with this sizer item, or None if there
-isn't any.</docstring>
-      </method>
-    </class>
-    <class name="Sizer" oldname="wxSizer" module="_core">
-      <docstring>wx.Sizer is the abstract base class used for laying out subwindows in
-a window.  You cannot use wx.Sizer directly; instead, you will have to
-use one of the sizer classes derived from it such as `wx.BoxSizer`,
-`wx.StaticBoxSizer`, `wx.NotebookSizer`, `wx.GridSizer`,  `wx.FlexGridSizer`
-and `wx.GridBagSizer`.
-
-The concept implemented by sizers in wxWidgets is closely related to
-layout tools in other GUI toolkits, such as Java's AWT, the GTK
-toolkit or the Qt toolkit. It is based upon the idea of the individual
-subwindows reporting their minimal required size and their ability to
-get stretched if the size of the parent window has changed. This will
-most often mean that the programmer does not set the original size of
-a dialog in the beginning, rather the dialog will assigned a sizer and
-this sizer will be queried about the recommended size. The sizer in
-turn will query its children, which can be normal windows or contorls,
-empty space or other sizers, so that a hierarchy of sizers can be
-constructed. Note that wxSizer does not derive from wxWindow and thus
-do not interfere with tab ordering and requires very little resources
-compared to a real window on screen.
-
-What makes sizers so well fitted for use in wxWidgets is the fact that
-every control reports its own minimal size and the algorithm can
-handle differences in font sizes or different window (dialog item)
-sizes on different platforms without problems. If for example the
-standard font as well as the overall design of Mac widgets requires
-more space than on Windows, then the initial size of a dialog using a
-sizer will automatically be bigger on Mac than on Windows.
-
-:note: If you wish to create a custom sizer class in wxPython you
-    should derive the class from `wx.PySizer` in order to get
-    Python-aware capabilities for the various virtual methods.
-
-:see: `wx.SizerItem`
-
-:todo: More dscriptive text here along with some pictures...
-
-</docstring>
-      <baseclass name="Object"/>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Add" type="" overloaded="no">
-        <autodoc>Add(self, item, int proportion=0, int flag=0, int border=0,
-    PyObject userData=None)</autodoc>
-        <docstring>Appends a child item to the sizer.
-
-    :param item:  The item can be one of three kinds of objects:
-
-        - **window**: A `wx.Window` to be managed by the sizer. Its
-          minimal size (either set explicitly by the user or
-          calculated internally when constructed with wx.DefaultSize)
-          is interpreted as the minimal size to use when laying out
-          item in the sizer.  This is particularly useful in
-          connection with `wx.Window.SetSizeHints`.
-
-        - **sizer**: The (child-)sizer to be added to the sizer. This
-          allows placing a child sizer in a sizer and thus to create
-          hierarchies of sizers (typically a vertical box as the top
-          sizer and several horizontal boxes on the level beneath).
-
-        - **size**: A `wx.Size` or a 2-element sequence of integers
-          that represents the width and height of a spacer to be added
-          to the sizer. Adding spacers to sizers gives more
-          flexibility in the design of dialogs; imagine for example a
-          horizontal box with two buttons at the bottom of a dialog:
-          you might want to insert a space between the two buttons and
-          make that space stretchable using the *proportion* value and
-          the result will be that the left button will be aligned with
-          the left side of the dialog and the right button with the
-          right side - the space in between will shrink and grow with
-          the dialog.
-
-    :param proportion: Although the meaning of this parameter is
-        undefined in wx.Sizer, it is used in `wx.BoxSizer` to indicate
-        if a child of a sizer can change its size in the main
-        orientation of the wx.BoxSizer - where 0 stands for not
-        changeable and a value of more than zero is interpreted
-        relative (a proportion of the total) to the value of other
-        children of the same wx.BoxSizer. For example, you might have
-        a horizontal wx.BoxSizer with three children, two of which are
-        supposed to change their size with the sizer. Then the two
-        stretchable windows should each be given *proportion* value of
-        1 to make them grow and shrink equally with the sizer's
-        horizontal dimension.  But if one of them had a *proportion*
-        value of 2 then it would get a double share of the space
-        available after the fixed size items are positioned.
-
-    :param flag: This parameter can be used to set a number of flags
-        which can be combined using the binary OR operator ``|``. Two
-        main behaviours are defined using these flags. One is the
-        border around a window: the *border* parameter determines the
-        border width whereas the flags given here determine which
-        side(s) of the item that the border will be added. The other
-        flags determine how the sizer item behaves when the space
-        allotted to the sizer changes, and is somewhat dependent on
-        the specific kind of sizer used.
-
-        +----------------------------+------------------------------------------+
-        |- wx.TOP                    |These flags are used to specify           |
-        |- wx.BOTTOM                 |which side(s) of the sizer item that      |
-        |- wx.LEFT                   |the *border* width will apply to.         |
-        |- wx.RIGHT                  |                                          |
-        |- wx.ALL                    |                                          |
-        |                            |                                          |
-        +----------------------------+------------------------------------------+
-        |- wx.EXAPAND                |The item will be expanded to fill         |
-        |                            |the space allotted to the item.           |
-        +----------------------------+------------------------------------------+
-        |- wx.SHAPED                 |The item will be expanded as much as      |
-        |                            |possible while also maintaining its       |
-        |                            |aspect ratio                              |
-        +----------------------------+------------------------------------------+
-        |- wx.FIXED_MINSIZE          |Normally wx.Sizers will use               |
-        |                            |`wx.Window.GetMinSize` or                 |
-        |                            |`wx.Window.GetBestSize` to determine what |
-        |                            |the minimal size of window items should   |
-        |                            |be, and will use that size to calculate   |
-        |                            |the layout. This allows layouts to adjust |
-        |                            |when an item changes and it's best size   |
-        |                            |becomes different. If you would rather    |
-        |                            |have a window item stay the size it       |
-        |                            |started with then use wx.FIXED_MINSIZE.   |
-        +----------------------------+------------------------------------------+
-        |- wx.ALIGN_CENTER           |The wx.ALIGN flags allow you to specify   |
-        |- wx.ALIGN_LEFT             |the alignment of the item within the space|
-        |- wx.ALIGN_RIGHT            |allotted to it by the sizer, ajusted for  |
-        |- wx.ALIGN_TOP              |the border if any.                        |
-        |- wx.ALIGN_BOTTOM           |                                          |
-        |- wx.ALIGN_CENTER_VERTICAL  |                                          |
-        |- wx.ALIGN_CENTER_HORIZONTAL|                                          |
-        +----------------------------+------------------------------------------+
-
-
-    :param border: Determines the border width, if the *flag*
-        parameter is set to include any border flag.
-
-    :param userData: Allows an extra object to be attached to the
-        sizer item, for use in derived classes when sizing information
-        is more complex than the *proportion* and *flag* will allow for.
-</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-          <param name="proportion" type="int" default="0"/>
-          <param name="flag" type="int" default="0"/>
-          <param name="border" type="int" default="0"/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Insert" type="" overloaded="no">
-        <autodoc>Insert(self, int before, item, int proportion=0, int flag=0, int border=0,
-    PyObject userData=None)</autodoc>
-        <docstring>Inserts a new item into the list of items managed by this sizer before
-the item at index *before*.  See `Add` for a description of the parameters.</docstring>
-        <paramlist>
-          <param name="before" type="int" default=""/>
-          <param name="item" type="PyObject" default=""/>
-          <param name="proportion" type="int" default="0"/>
-          <param name="flag" type="int" default="0"/>
-          <param name="border" type="int" default="0"/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Prepend" type="" overloaded="no">
-        <autodoc>Prepend(self, item, int proportion=0, int flag=0, int border=0,
-    PyObject userData=None)</autodoc>
-        <docstring>Adds a new item to the begining of the list of sizer items managed by
-this sizer.  See `Add` for a description of the parameters.</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-          <param name="proportion" type="int" default="0"/>
-          <param name="flag" type="int" default="0"/>
-          <param name="border" type="int" default="0"/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Remove" type="bool" overloaded="no">
-        <autodoc>Remove(self, item) -&gt; bool</autodoc>
-        <docstring>Removes an item from the sizer and destroys it.  This method does not
-cause any layout or resizing to take place, call `Layout` to update
-the layout on screen after removing a child from the sizer.  The
-*item* parameter can be either a window, a sizer, or the zero-based
-index of an item to remove.  Returns True if the child item was found
-and removed.
-
-:note: For historical reasons calling this method with a `wx.Window`
-    parameter is depreacted, as it will not be able to destroy the
-    window since it is owned by its parent.  You should use `Detach`
-    instead.
-</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Detach" type="bool" overloaded="no">
-        <autodoc>Detach(self, item) -&gt; bool</autodoc>
-        <docstring>Detaches an item from the sizer without destroying it.  This method
-does not cause any layout or resizing to take place, call `Layout` to
-do so.  The *item* parameter can be either a window, a sizer, or the
-zero-based index of the item to be detached.  Returns True if the child item
-was found and detached.</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_SetItemMinSize" type="" overloaded="no">
-        <autodoc>_SetItemMinSize(self, PyObject item, Size size)</autodoc>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddItem" type="" overloaded="no">
-        <autodoc>AddItem(self, SizerItem item)</autodoc>
-        <docstring>Adds a `wx.SizerItem` to the sizer.</docstring>
-        <paramlist>
-          <param name="item" type="SizerItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertItem" type="" overloaded="no">
-        <autodoc>InsertItem(self, int index, SizerItem item)</autodoc>
-        <docstring>Inserts a `wx.SizerItem` to the sizer at the position given by *index*.</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default=""/>
-          <param name="item" type="SizerItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="PrependItem" type="" overloaded="no">
-        <autodoc>PrependItem(self, SizerItem item)</autodoc>
-        <docstring>Prepends a `wx.SizerItem` to the sizer.</docstring>
-        <paramlist>
-          <param name="item" type="SizerItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDimension" type="" overloaded="no">
-        <autodoc>SetDimension(self, int x, int y, int width, int height)</autodoc>
-        <docstring>Call this to force the sizer to take the given dimension and thus
-force the items owned by the sizer to resize themselves according to
-the rules defined by the parameter in the `Add`, `Insert` or `Prepend`
-methods.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinSize" type="" overloaded="no">
-        <autodoc>SetMinSize(self, Size size)</autodoc>
-        <docstring>Call this to give the sizer a minimal size. Normally, the sizer will
-calculate its minimal size based purely on how much space its children
-need. After calling this method `GetMinSize` will return either the
-minimal size as requested by its children or the minimal size set
-here, depending on which is bigger.</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-        <docstring>Returns the current size of the space managed by the sizer.</docstring>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Returns the current position of the sizer's managed space.</docstring>
-      </method>
-      <method name="GetMinSize" type="Size" overloaded="no">
-        <autodoc>GetMinSize(self) -&gt; Size</autodoc>
-        <docstring>Returns the minimal size of the sizer. This is either the combined
-minimal size of all the children and their borders or the minimal size
-set by SetMinSize, depending on which is bigger.</docstring>
-      </method>
-      <method name="RecalcSizes" type="" overloaded="no">
-        <autodoc>RecalcSizes(self)</autodoc>
-        <docstring>Using the sizes calculated by `CalcMin` reposition and resize all the
-items managed by this sizer.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="CalcMin" type="Size" overloaded="no">
-        <autodoc>CalcMin(self) -&gt; Size</autodoc>
-        <docstring>This method is where the sizer will do the actual calculation of its
-children's minimal sizes.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="Layout" type="" overloaded="no">
-        <autodoc>Layout(self)</autodoc>
-        <docstring>This method will force the recalculation and layout of the items
-controlled by the sizer using the current space allocated to the
-sizer.  Normally this is called automatically from the owning window's
-EVT_SIZE handler, but it is also useful to call it from user code when
-one of the items in a sizer change size, or items are added or
-removed.</docstring>
-      </method>
-      <method name="Fit" type="Size" overloaded="no">
-        <autodoc>Fit(self, Window window) -&gt; Size</autodoc>
-        <docstring>Tell the sizer to resize the *window* to match the sizer's minimal
-size. This is commonly done in the constructor of the window itself in
-order to set its initial size to match the needs of the children as
-determined by the sizer.  Returns the new size.
-
-For a top level window this is the total window size, not the client size.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="FitInside" type="" overloaded="no">
-        <autodoc>FitInside(self, Window window)</autodoc>
-        <docstring>Tell the sizer to resize the *virtual size* of the *window* to match the
-sizer's minimal size. This will not alter the on screen size of the
-window, but may cause the addition/removal/alteration of scrollbars
-required to view the virtual area in windows which manage it.
-
-:see: `wx.ScrolledWindow.SetScrollbars`, `SetVirtualSizeHints`
-</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSizeHints" type="" overloaded="no">
-        <autodoc>SetSizeHints(self, Window window)</autodoc>
-        <docstring>Tell the sizer to set (and `Fit`) the minimal size of the *window* to
-match the sizer's minimal size. This is commonly done in the
-constructor of the window itself if the window is resizable (as are
-many dialogs under Unix and frames on probably all platforms) in order
-to prevent the window from being sized smaller than the minimal size
-required by the sizer.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVirtualSizeHints" type="" overloaded="no">
-        <autodoc>SetVirtualSizeHints(self, Window window)</autodoc>
-        <docstring>Tell the sizer to set the minimal size of the window virtual area to
-match the sizer's minimal size. For windows with managed scrollbars
-this will set them appropriately.
-
-:see: `wx.ScrolledWindow.SetScrollbars`
-</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self, bool deleteWindows=False)</autodoc>
-        <docstring>Clear all items from the sizer, optionally destroying the window items
-as well.</docstring>
-        <paramlist>
-          <param name="deleteWindows" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="DeleteWindows" type="" overloaded="no">
-        <autodoc>DeleteWindows(self)</autodoc>
-        <docstring>Destroy all windows managed by the sizer.</docstring>
-      </method>
-      <method name="GetChildren" type="PyObject" overloaded="no">
-        <autodoc>GetChildren(sefl) -&gt; list</autodoc>
-        <docstring>Returns a list of all the `wx.SizerItem` objects managed by the sizer.</docstring>
-      </method>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, item, bool show=True)</autodoc>
-        <docstring>Shows or hides an item managed by the sizer.  To make a sizer item
-disappear or reappear, use Show followed by `Layout`.  The *item*
-parameter can be either a window, a sizer, or the zero-based index of
-the item.</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-          <param name="show" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsShown" type="bool" overloaded="no">
-        <autodoc>IsShown(self, item)</autodoc>
-        <docstring>Determines if the item is currently shown. sizer.  To make a sizer
-item disappear or reappear, use Show followed by `Layout`.  The *item*
-parameter can be either a window, a sizer, or the zero-based index of
-the item.</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowItems" type="" overloaded="no">
-        <autodoc>ShowItems(self, bool show)</autodoc>
-        <docstring>Recursively call `wx.Window.Show` on all sizer items.</docstring>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PySizer" oldname="wxPySizer" module="_core">
-      <docstring>wx.PySizer is a special version of `wx.Sizer` that has been
-instrumented to allow the C++ virtual methods to be overloaded in
-Python derived classes.  You would derive from this class if you are
-wanting to implement a custom sizer in Python code.  Simply implement
-`CalcMin` and `RecalcSizes` in the derived class and you're all set.
-For example::
-
-    class MySizer(wx.PySizer):
-         def __init__(self):
-             wx.PySizer.__init__(self)
-
-         def CalcMin(self):
-             for item in self.GetChildren():
-                  # calculate the total minimum width and height needed
-                  # by all items in the sizer according to this sizer's
-                  # layout algorithm.
-                  ...
-             return wx.Size(width, height)
-
-          def RecalcSizes(self):
-              # find the space allotted to this sizer
-              pos = self.GetPosition()
-              size = self.GetSize()
-              for item in self.GetChildren():
-                  # Recalculate (if necessary) the position and size of
-                  # each item and then call item.SetDimension to do the
-                  # actual positioning and sizing of the items within the
-                  # space alloted to this sizer.
-                  ...
-                  item.SetDimension(itemPos, itemSize)
-
-
-When `Layout` is called it first calls `CalcMin` followed by
-`RecalcSizes` so you can optimize a bit by saving the results of
-`CalcMin` and resuing them in `RecalcSizes`.
-
-:see: `wx.SizerItem`, `wx.Sizer.GetChildren`
-
-</docstring>
-      <baseclass name="Sizer"/>
-      <constructor name="PySizer" overloaded="no">
-        <autodoc>__init__(self) -&gt; PySizer</autodoc>
-        <docstring>Creates a wx.PySizer.  Must be called from the __init__ in the derived
-class.</docstring>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="BoxSizer" oldname="wxBoxSizer" module="_core">
-      <docstring>The basic idea behind a box sizer is that windows will most often be
-laid out in rather simple basic geometry, typically in a row or a
-column or nested hierarchies of either.  A wx.BoxSizer will lay out
-its items in a simple row or column, depending on the orientation
-parameter passed to the constructor.
-
-It is the unique feature of a box sizer, that it can grow in both
-directions (height and width) but can distribute its growth in the
-main direction (horizontal for a row) *unevenly* among its children.
-This is determined by the proportion parameter give to items when they
-are added to the sizer. It is interpreted as a weight factor, i.e. it
-can be zero, indicating that the window may not be resized at all, or
-above zero. If several windows have a value above zero, the value is
-interpreted relative to the sum of all weight factors of the sizer, so
-when adding two windows with a value of 1, they will both get resized
-equally and each will receive half of the available space after the
-fixed size items have been sized.  If the items have unequal
-proportion settings then they will receive a coresondingly unequal
-allotment of the free space.
-
-:see: `wx.StaticBoxSizer`
-</docstring>
-      <baseclass name="Sizer"/>
-      <constructor name="BoxSizer" overloaded="no">
-        <autodoc>__init__(self, int orient=HORIZONTAL) -&gt; BoxSizer</autodoc>
-        <docstring>Constructor for a wx.BoxSizer. *orient* may be one of ``wx.VERTICAL``
-or ``wx.HORIZONTAL`` for creating either a column sizer or a row
-sizer.</docstring>
-        <paramlist>
-          <param name="orient" type="int" default="wxHORIZONTAL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetOrientation" type="int" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-        <docstring>Returns the current orientation of the sizer.</docstring>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orient)</autodoc>
-        <docstring>Resets the orientation of the sizer.</docstring>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StaticBoxSizer" oldname="wxStaticBoxSizer" module="_core">
-      <docstring>wx.StaticBoxSizer derives from and functions identically to the
-`wx.BoxSizer` and adds a `wx.StaticBox` around the items that the sizer
-manages.  Note that this static box must be created separately and
-passed to the sizer constructor.</docstring>
-      <baseclass name="BoxSizer"/>
-      <constructor name="StaticBoxSizer" overloaded="no">
-        <autodoc>__init__(self, StaticBox box, int orient=HORIZONTAL) -&gt; StaticBoxSizer</autodoc>
-        <docstring>Constructor. It takes an associated static box and the orientation
-*orient* as parameters - orient can be either of ``wx.VERTICAL`` or
-``wx.HORIZONTAL``.</docstring>
-        <paramlist>
-          <param name="box" type="wxStaticBox" default=""/>
-          <param name="orient" type="int" default="wxHORIZONTAL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetStaticBox" type="wxStaticBox" overloaded="no">
-        <autodoc>GetStaticBox(self) -&gt; StaticBox</autodoc>
-        <docstring>Returns the static box associated with this sizer.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="GridSizer" oldname="wxGridSizer" module="_core">
-      <docstring>A grid sizer is a sizer which lays out its children in a
-two-dimensional table with all cells having the same size.  In other
-words, the width of each cell within the grid is the width of the
-widest item added to the sizer and the height of each grid cell is the
-height of the tallest item.  An optional vertical and/or horizontal
-gap between items can also be specified (in pixels.)
-
-Items are placed in the cells of the grid in the order they are added,
-in row-major order.  In other words, the first row is filled first,
-then the second, and so on until all items have been added. (If
-neccessary, additional rows will be added as items are added.)  If you
-need to have greater control over the cells that items are placed in
-then use the `wx.GridBagSizer`.
-</docstring>
-      <baseclass name="Sizer"/>
-      <constructor name="GridSizer" overloaded="no">
-        <autodoc>__init__(self, int rows=1, int cols=0, int vgap=0, int hgap=0) -&gt; GridSizer</autodoc>
-        <docstring>Constructor for a wx.GridSizer. *rows* and *cols* determine the number
-of columns and rows in the sizer - if either of the parameters is
-zero, it will be calculated to from the total number of children in
-the sizer, thus making the sizer grow dynamically. *vgap* and *hgap*
-define extra space between all children.</docstring>
-        <paramlist>
-          <param name="rows" type="int" default="1"/>
-          <param name="cols" type="int" default="0"/>
-          <param name="vgap" type="int" default="0"/>
-          <param name="hgap" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetCols" type="" overloaded="no">
-        <autodoc>SetCols(self, int cols)</autodoc>
-        <docstring>Sets the number of columns in the sizer.</docstring>
-        <paramlist>
-          <param name="cols" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRows" type="" overloaded="no">
-        <autodoc>SetRows(self, int rows)</autodoc>
-        <docstring>Sets the number of rows in the sizer.</docstring>
-        <paramlist>
-          <param name="rows" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVGap" type="" overloaded="no">
-        <autodoc>SetVGap(self, int gap)</autodoc>
-        <docstring>Sets the vertical gap (in pixels) between the cells in the sizer.</docstring>
-        <paramlist>
-          <param name="gap" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHGap" type="" overloaded="no">
-        <autodoc>SetHGap(self, int gap)</autodoc>
-        <docstring>Sets the horizontal gap (in pixels) between cells in the sizer</docstring>
-        <paramlist>
-          <param name="gap" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCols" type="int" overloaded="no">
-        <autodoc>GetCols(self) -&gt; int</autodoc>
-        <docstring>Returns the number of columns in the sizer.</docstring>
-      </method>
-      <method name="GetRows" type="int" overloaded="no">
-        <autodoc>GetRows(self) -&gt; int</autodoc>
-        <docstring>Returns the number of rows in the sizer.</docstring>
-      </method>
-      <method name="GetVGap" type="int" overloaded="no">
-        <autodoc>GetVGap(self) -&gt; int</autodoc>
-        <docstring>Returns the vertical gap (in pixels) between the cells in the sizer.</docstring>
-      </method>
-      <method name="GetHGap" type="int" overloaded="no">
-        <autodoc>GetHGap(self) -&gt; int</autodoc>
-        <docstring>Returns the horizontal gap (in pixels) between cells in the sizer.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FlexGridSizer" oldname="wxFlexGridSizer" module="_core">
-      <docstring>A flex grid sizer is a sizer which lays out its children in a
-two-dimensional table with all table cells in one row having the same
-height and all cells in one column having the same width, but all
-rows or all columns are not necessarily the same height or width as in
-the `wx.GridSizer`.
-
-wx.FlexGridSizer can also size items equally in one direction but
-unequally ("flexibly") in the other. If the sizer is only flexible
-in one direction (this can be changed using `SetFlexibleDirection`), it
-needs to be decided how the sizer should grow in the other ("non
-flexible") direction in order to fill the available space. The
-`SetNonFlexibleGrowMode` method serves this purpose.
-
-</docstring>
-      <baseclass name="GridSizer"/>
-      <constructor name="FlexGridSizer" overloaded="no">
-        <autodoc>__init__(self, int rows=1, int cols=0, int vgap=0, int hgap=0) -&gt; FlexGridSizer</autodoc>
-        <docstring>Constructor for a wx.FlexGridSizer. *rows* and *cols* determine the
-number of columns and rows in the sizer - if either of the parameters
-is zero, it will be calculated to from the total number of children in
-the sizer, thus making the sizer grow dynamically. *vgap* and *hgap*
-define extra space between all children.</docstring>
-        <paramlist>
-          <param name="rows" type="int" default="1"/>
-          <param name="cols" type="int" default="0"/>
-          <param name="vgap" type="int" default="0"/>
-          <param name="hgap" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="AddGrowableRow" type="" overloaded="no">
-        <autodoc>AddGrowableRow(self, size_t idx, int proportion=0)</autodoc>
-        <docstring>Specifies that row *idx* (starting from zero) should be grown if there
-is extra space available to the sizer.
-
-The *proportion* parameter has the same meaning as the stretch factor
-for the box sizers except that if all proportions are 0, then all
-columns are resized equally (instead of not being resized at all).</docstring>
-        <paramlist>
-          <param name="idx" type="size_t" default=""/>
-          <param name="proportion" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="RemoveGrowableRow" type="" overloaded="no">
-        <autodoc>RemoveGrowableRow(self, size_t idx)</autodoc>
-        <docstring>Specifies that row *idx* is no longer growable.</docstring>
-        <paramlist>
-          <param name="idx" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddGrowableCol" type="" overloaded="no">
-        <autodoc>AddGrowableCol(self, size_t idx, int proportion=0)</autodoc>
-        <docstring>Specifies that column *idx* (starting from zero) should be grown if
-there is extra space available to the sizer.
-
-The *proportion* parameter has the same meaning as the stretch factor
-for the box sizers except that if all proportions are 0, then all
-columns are resized equally (instead of not being resized at all).</docstring>
-        <paramlist>
-          <param name="idx" type="size_t" default=""/>
-          <param name="proportion" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="RemoveGrowableCol" type="" overloaded="no">
-        <autodoc>RemoveGrowableCol(self, size_t idx)</autodoc>
-        <docstring>Specifies that column *idx* is no longer growable.</docstring>
-        <paramlist>
-          <param name="idx" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFlexibleDirection" type="" overloaded="no">
-        <autodoc>SetFlexibleDirection(self, int direction)</autodoc>
-        <docstring>Specifies whether the sizer should flexibly resize its columns, rows,
-or both. Argument *direction* can be one of the following values.  Any
-other value is ignored.
-
-    ==============    =======================================
-    wx.VERTICAL       Rows are flexibly sized.
-    wx.HORIZONTAL     Columns are flexibly sized.
-    wx.BOTH           Both rows and columns are flexibly sized
-                      (this is the default value).
-    ==============    =======================================
-
-Note that this method does not trigger relayout.
-</docstring>
-        <paramlist>
-          <param name="direction" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFlexibleDirection" type="int" overloaded="no">
-        <autodoc>GetFlexibleDirection(self) -&gt; int</autodoc>
-        <docstring>Returns a value that specifies whether the sizer
-flexibly resizes its columns, rows, or both (default).
-
-:see: `SetFlexibleDirection`</docstring>
-      </method>
-      <method name="SetNonFlexibleGrowMode" type="" overloaded="no">
-        <autodoc>SetNonFlexibleGrowMode(self, int mode)</autodoc>
-        <docstring>Specifies how the sizer should grow in the non-flexible direction if
-there is one (so `SetFlexibleDirection` must have been called
-previously). Argument *mode* can be one of the following values:
-
-    ==========================  =================================================
-    wx.FLEX_GROWMODE_NONE       Sizer doesn't grow in the non flexible direction.
-    wx.FLEX_GROWMODE_SPECIFIED  Sizer honors growable columns/rows set with
-                                `AddGrowableCol` and `AddGrowableRow`. In this
-                                case equal sizing applies to minimum sizes of
-                                columns or rows (this is the default value).
-    wx.FLEX_GROWMODE_ALL        Sizer equally stretches all columns or rows in
-                                the non flexible direction, whether they are
-                                growable or not in the flexbile direction.
-    ==========================  =================================================
-
-Note that this method does not trigger relayout.
-
-</docstring>
-        <paramlist>
-          <param name="mode" type="wxFlexSizerGrowMode" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNonFlexibleGrowMode" type="wxFlexSizerGrowMode" overloaded="no">
-        <autodoc>GetNonFlexibleGrowMode(self) -&gt; int</autodoc>
-        <docstring>Returns the value that specifies how the sizer grows in the
-non-flexible direction if there is one.
-
-:see: `SetNonFlexibleGrowMode`</docstring>
-      </method>
-      <method name="GetRowHeights" type="wxArrayInt" overloaded="no">
-        <autodoc>GetRowHeights(self) -&gt; list</autodoc>
-        <docstring>Returns a list of integers representing the heights of each of the
-rows in the sizer.</docstring>
-      </method>
-      <method name="GetColWidths" type="wxArrayInt" overloaded="no">
-        <autodoc>GetColWidths(self) -&gt; list</autodoc>
-        <docstring>Returns a list of integers representing the widths of each of the
-columns in the sizer.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="GBPosition" oldname="wxGBPosition" module="_core">
-      <docstring>This class represents the position of an item in a virtual grid of
-rows and columns managed by a `wx.GridBagSizer`.  wxPython has
-typemaps that will automatically convert from a 2-element sequence of
-integers to a wx.GBPosition, so you can use the more pythonic
-representation of the position nearly transparently in Python code.</docstring>
-      <constructor name="GBPosition" overloaded="no">
-        <autodoc>__init__(self, int row=0, int col=0) -&gt; GBPosition</autodoc>
-        <docstring>This class represents the position of an item in a virtual grid of
-rows and columns managed by a `wx.GridBagSizer`.  wxPython has
-typemaps that will automatically convert from a 2-element sequence of
-integers to a wx.GBPosition, so you can use the more pythonic
-representation of the position nearly transparently in Python code.</docstring>
-        <paramlist>
-          <param name="row" type="int" default="0"/>
-          <param name="col" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetRow" type="int" overloaded="no">
-        <autodoc>GetRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCol" type="int" overloaded="no">
-        <autodoc>GetCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRow" type="" overloaded="no">
-        <autodoc>SetRow(self, int row)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCol" type="" overloaded="no">
-        <autodoc>SetCol(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, GBPosition other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, GBPosition other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int row=0, int col=0)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default="0"/>
-          <param name="col" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <class name="GBSpan" oldname="wxGBSpan" module="_core">
-      <docstring>This class is used to hold the row and column spanning attributes of
-items in a `wx.GridBagSizer`.  wxPython has typemaps that will
-automatically convert from a 2-element sequence of integers to a
-wx.GBSpan, so you can use the more pythonic representation of the span
-nearly transparently in Python code.
-</docstring>
-      <constructor name="GBSpan" overloaded="no">
-        <autodoc>__init__(self, int rowspan=1, int colspan=1) -&gt; GBSpan</autodoc>
-        <docstring>Construct a new wxGBSpan, optionally setting the rowspan and
-colspan. The default is (1,1). (Meaning that the item occupies one
-cell in each direction.</docstring>
-        <paramlist>
-          <param name="rowspan" type="int" default="1"/>
-          <param name="colspan" type="int" default="1"/>
-        </paramlist>
-      </constructor>
-      <method name="GetRowspan" type="int" overloaded="no">
-        <autodoc>GetRowspan(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetColspan" type="int" overloaded="no">
-        <autodoc>GetColspan(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRowspan" type="" overloaded="no">
-        <autodoc>SetRowspan(self, int rowspan)</autodoc>
-        <paramlist>
-          <param name="rowspan" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColspan" type="" overloaded="no">
-        <autodoc>SetColspan(self, int colspan)</autodoc>
-        <paramlist>
-          <param name="colspan" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, GBSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, GBSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int rowspan=1, int colspan=1)</autodoc>
-        <paramlist>
-          <param name="rowspan" type="int" default="1"/>
-          <param name="colspan" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <class name="GBSizerItem" oldname="wxGBSizerItem" module="_core">
-      <docstring>The wx.GBSizerItem class is used to track the additional data about
-items in a `wx.GridBagSizer` such as the item's position in the grid
-and how many rows or columns it spans.
-</docstring>
-      <baseclass name="SizerItem"/>
-      <constructor name="GBSizerItem" overloaded="no">
-        <autodoc>__init__(self) -&gt; GBSizerItem</autodoc>
-        <docstring>Constructs an empty wx.GBSizerItem.  Either a window, sizer or spacer
-size will need to be set, as well as a position and span before this
-item can be used in a Sizer.
-
-You will probably never need to create a wx.GBSizerItem directly as they
-are created automatically when the sizer's Add method is called.</docstring>
-      </constructor>
-      <constructor name="GBSizerItemWindow" overloaded="no">
-        <autodoc>GBSizerItemWindow(Window window, GBPosition pos, GBSpan span, int flag, 
-    int border, PyObject userData=None) -&gt; GBSizerItem</autodoc>
-        <docstring>Construct a `wx.GBSizerItem` for a window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="GBSizerItemSizer" overloaded="no">
-        <autodoc>GBSizerItemSizer(Sizer sizer, GBPosition pos, GBSpan span, int flag, 
-    int border, PyObject userData=None) -&gt; GBSizerItem</autodoc>
-        <docstring>Construct a `wx.GBSizerItem` for a sizer</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="GBSizerItemSpacer" overloaded="no">
-        <autodoc>GBSizerItemSpacer(int width, int height, GBPosition pos, GBSpan span, 
-    int flag, int border, PyObject userData=None) -&gt; GBSizerItem</autodoc>
-        <docstring>Construct a `wx.GBSizerItem` for a spacer.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-          <param name="flag" type="int" default=""/>
-          <param name="border" type="int" default=""/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPos" type="GBPosition" overloaded="no">
-        <autodoc>GetPos(self) -&gt; GBPosition</autodoc>
-        <docstring>Get the grid position of the item</docstring>
-      </method>
-      <method name="GetSpan" type="GBSpan" overloaded="no">
-        <autodoc>GetSpan(self) -&gt; GBSpan</autodoc>
-        <docstring>Get the row and column spanning of the item</docstring>
-      </method>
-      <method name="SetPos" type="bool" overloaded="no">
-        <autodoc>SetPos(self, GBPosition pos) -&gt; bool</autodoc>
-        <docstring>If the item is already a member of a sizer then first ensure that
-there is no other item that would intersect with this one at the new
-position, then set the new position.  Returns True if the change is
-successful and after the next Layout() the item will be moved.</docstring>
-        <paramlist>
-          <param name="pos" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSpan" type="bool" overloaded="no">
-        <autodoc>SetSpan(self, GBSpan span) -&gt; bool</autodoc>
-        <docstring>If the item is already a member of a sizer then first ensure that
-there is no other item that would intersect with this one with its new
-spanning size, then set the new spanning.  Returns True if the change
-is successful and after the next Layout() the item will be resized.
-</docstring>
-        <paramlist>
-          <param name="span" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Intersects" type="bool" overloaded="no">
-        <autodoc>Intersects(self, GBSizerItem other) -&gt; bool</autodoc>
-        <docstring>Returns True if this item and the other item instersect.</docstring>
-        <paramlist>
-          <param name="other" type="GBSizerItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="IntersectsPos" type="bool" overloaded="no">
-        <autodoc>IntersectsPos(self, GBPosition pos, GBSpan span) -&gt; bool</autodoc>
-        <docstring>Returns True if the given pos/span would intersect with this item.</docstring>
-        <paramlist>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEndPos" type="GBPosition" overloaded="no">
-        <autodoc>GetEndPos(self) -&gt; GBPosition</autodoc>
-        <docstring>Get the row and column of the endpoint of this item.</docstring>
-      </method>
-      <method name="GetGBSizer" type="wxGridBagSizer" overloaded="no">
-        <autodoc>GetGBSizer(self) -&gt; GridBagSizer</autodoc>
-        <docstring>Get the sizer this item is a member of.</docstring>
-      </method>
-      <method name="SetGBSizer" type="" overloaded="no">
-        <autodoc>SetGBSizer(self, GridBagSizer sizer)</autodoc>
-        <docstring>Set the sizer this item is a member of.</docstring>
-        <paramlist>
-          <param name="sizer" type="wxGridBagSizer" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridBagSizer" oldname="wxGridBagSizer" module="_core">
-      <docstring>A `wx.Sizer` that can lay out items in a virtual grid like a
-`wx.FlexGridSizer` but in this case explicit positioning of the items
-is allowed using `wx.GBPosition`, and items can optionally span more
-than one row and/or column using `wx.GBSpan`.  The total size of the
-virtual grid is determined by the largest row and column that items are
-positioned at, adjusted for spanning.
-</docstring>
-      <baseclass name="FlexGridSizer"/>
-      <constructor name="GridBagSizer" overloaded="no">
-        <autodoc>__init__(self, int vgap=0, int hgap=0) -&gt; GridBagSizer</autodoc>
-        <docstring>Constructor, with optional parameters to specify the gap between the
-rows and columns.</docstring>
-        <paramlist>
-          <param name="vgap" type="int" default="0"/>
-          <param name="hgap" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="Add" type="bool" overloaded="no">
-        <autodoc>Add(self, item, GBPosition pos, GBSpan span=DefaultSpan, int flag=0,
-int border=0, userData=None)</autodoc>
-        <docstring>Adds an item to the sizer at the grid cell *pos*, optionally spanning
-more than one row or column as specified with *span*.  The remaining
-args behave similarly to `wx.Sizer.Add`.
-
-Returns True if the item was successfully placed at the given cell
-position, False if something was already there.
-</docstring>
-        <paramlist>
-          <param name="item" type="PyObject" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default="wxDefaultSpan"/>
-          <param name="flag" type="int" default="0"/>
-          <param name="border" type="int" default="0"/>
-          <param name="userData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AddItem" type="bool" overloaded="no">
-        <autodoc>Add(self, GBSizerItem item) -&gt; bool</autodoc>
-        <docstring>Add an item to the sizer using a `wx.GBSizerItem`.  Returns True if
-the item was successfully placed at its given cell position, False if
-something was already there.</docstring>
-        <paramlist>
-          <param name="item" type="GBSizerItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEmptyCellSize" type="Size" overloaded="no">
-        <autodoc>GetEmptyCellSize(self) -&gt; Size</autodoc>
-        <docstring>Get the size used for cells in the grid with no item.</docstring>
-      </method>
-      <method name="SetEmptyCellSize" type="" overloaded="no">
-        <autodoc>SetEmptyCellSize(self, Size sz)</autodoc>
-        <docstring>Set the size used for cells in the grid with no item.</docstring>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPosition" type="GBPosition" overloaded="yes">
-        <docstring>GetItemPosition(self, item) -&gt; GBPosition
-
-Get the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPosition" type="GBPosition" overloaded="yes">
-        <docstring>GetItemPosition(self, item) -&gt; GBPosition
-
-Get the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPosition" type="GBPosition" overloaded="yes">
-        <docstring>GetItemPosition(self, item) -&gt; GBPosition
-
-Get the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemPosition" type="bool" overloaded="yes">
-        <docstring>SetItemPosition(self, item, GBPosition pos) -&gt; bool
-
-Set the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.  Returns True on success.  If the move is not
-allowed (because an item is already there) then False is returned.
-</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemPosition" type="bool" overloaded="yes">
-        <docstring>SetItemPosition(self, item, GBPosition pos) -&gt; bool
-
-Set the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.  Returns True on success.  If the move is not
-allowed (because an item is already there) then False is returned.
-</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemPosition" type="bool" overloaded="yes">
-        <docstring>SetItemPosition(self, item, GBPosition pos) -&gt; bool
-
-Set the grid position of the specified *item* where *item* is either a
-window or subsizer that is a member of this sizer, or a zero-based
-index of an item.  Returns True on success.  If the move is not
-allowed (because an item is already there) then False is returned.
-</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default=""/>
-          <param name="pos" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemSpan" type="GBSpan" overloaded="yes">
-        <docstring>GetItemSpan(self, item) -&gt; GBSpan
-
-Get the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemSpan" type="GBSpan" overloaded="yes">
-        <docstring>GetItemSpan(self, item) -&gt; GBSpan
-
-Get the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemSpan" type="GBSpan" overloaded="yes">
-        <docstring>GetItemSpan(self, item) -&gt; GBSpan
-
-Get the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemSpan" type="bool" overloaded="yes">
-        <docstring>SetItemSpan(self, item, GBSpan span) -&gt; bool
-
-Set the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.  Returns True on success.  If the move is
-not allowed (because an item is already there) then False is returned.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemSpan" type="bool" overloaded="yes">
-        <docstring>SetItemSpan(self, item, GBSpan span) -&gt; bool
-
-Set the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.  Returns True on success.  If the move is
-not allowed (because an item is already there) then False is returned.</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemSpan" type="bool" overloaded="yes">
-        <docstring>SetItemSpan(self, item, GBSpan span) -&gt; bool
-
-Set the row/col spanning of the specified *item* where *item* is
-either a window or subsizer that is a member of this sizer, or a
-zero-based index of an item.  Returns True on success.  If the move is
-not allowed (because an item is already there) then False is returned.</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItem" type="GBSizerItem" overloaded="yes">
-        <docstring>FindItem(self, item) -&gt; GBSizerItem
-
-Find the sizer item for the given window or subsizer, returns None if
-not found. (non-recursive)</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItem" type="GBSizerItem" overloaded="yes">
-        <docstring>FindItem(self, item) -&gt; GBSizerItem
-
-Find the sizer item for the given window or subsizer, returns None if
-not found. (non-recursive)</docstring>
-        <paramlist>
-          <param name="sizer" type="Sizer" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemAtPosition" type="GBSizerItem" overloaded="no">
-        <autodoc>FindItemAtPosition(self, GBPosition pos) -&gt; GBSizerItem</autodoc>
-        <docstring>Return the sizer item for the given grid cell, or None if there is no
-item at that position. (non-recursive)</docstring>
-        <paramlist>
-          <param name="pos" type="GBPosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemAtPoint" type="GBSizerItem" overloaded="no">
-        <autodoc>FindItemAtPoint(self, Point pt) -&gt; GBSizerItem</autodoc>
-        <docstring>Return the sizer item located at the point given in *pt*, or None if
-there is no item at that point. The (x,y) coordinates in pt correspond
-to the client coordinates of the window using the sizer for
-layout. (non-recursive)</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="CheckForIntersection" type="bool" overloaded="no">
-        <autodoc>CheckForIntersection(self, GBSizerItem item, GBSizerItem excludeItem=None) -&gt; bool</autodoc>
-        <docstring>Look at all items and see if any intersect (or would overlap) the
-given *item*.  Returns True if so, False if there would be no overlap.
-If an *excludeItem* is given then it will not be checked for
-intersection, for example it may be the item we are checking the
-position of.
-</docstring>
-        <paramlist>
-          <param name="item" type="GBSizerItem" default=""/>
-          <param name="excludeItem" type="GBSizerItem" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="CheckForIntersectionPos" type="bool" overloaded="no">
-        <autodoc>CheckForIntersectionPos(self, GBPosition pos, GBSpan span, GBSizerItem excludeItem=None) -&gt; bool</autodoc>
-        <docstring>Look at all items and see if any intersect (or would overlap) the
-given position and span.  Returns True if so, False if there would be
-no overlap.  If an *excludeItem* is given then it will not be checked
-for intersection, for example it may be the item we are checking the
-position of.</docstring>
-        <paramlist>
-          <param name="pos" type="GBPosition" default=""/>
-          <param name="span" type="GBSpan" default=""/>
-          <param name="excludeItem" type="GBSizerItem" default="NULL"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="IndividualLayoutConstraint" oldname="wxIndividualLayoutConstraint" module="_core">
-      <docstring>Objects of this class are stored in the `wx.LayoutConstraints` class as
-one of eight possible constraints that a window can be involved in.
-You will never need to create an instance of
-wx.IndividualLayoutConstraint, rather you should create a
-`wx.LayoutConstraints` instance and use the individual contstraints
-that it contains.
-
-Constraints are initially set to have the relationship
-wx.Unconstrained, which means that their values should be calculated
-by looking at known constraints.
-
-The Edge specifies the type of edge or dimension of a window.
-
-Edges
-------
-    ==================  ==============================================
-    wx.Left             The left edge.
-    wx.Top              The top edge.
-    wx.Right            The right edge.
-    wx.Bottom           The bottom edge.
-    wx.CentreX          The x-coordinate of the centre of the window.
-    wx.CentreY          The y-coordinate of the centre of the window. 
-    ==================  ==============================================
-
-
-The Relationship specifies the relationship that this edge or
-dimension has with another specified edge or dimension. Normally, the
-user doesn't use these directly because functions such as Below and
-RightOf are a convenience for using the more general Set function.
-
-Relationships
--------------
-    ==================  ==============================================
-    wx.Unconstrained    The edge or dimension is unconstrained
-                        (the default for edges.)
-    wx.AsIs             The edge or dimension is to be taken from the current
-                        window position or size (the default for dimensions.)
-    wx.Above            The edge should be above another edge.
-    wx.Below            The edge should be below another edge.
-    wx.LeftOf           The edge should be to the left of another edge.
-    wx.RightOf          The edge should be to the right of another edge.
-    wx.SameAs           The edge or dimension should be the same as another edge
-                        or dimension.
-    wx.PercentOf        The edge or dimension should be a percentage of another
-                        edge or dimension.
-    wx.Absolute         The edge or dimension should be a given absolute value.
-    ==================  ==============================================
-
-:see: `wx.LayoutConstraints`, `wx.Window.SetConstraints`
-</docstring>
-      <baseclass name="Object"/>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int rel, Window otherW, int otherE, int val=0, int marg=wxLAYOUT_DEFAULT_MARGIN)</autodoc>
-        <docstring>Sets the properties of the constraint. Normally called by one of the
-convenience functions such as Above, RightOf, SameAs.</docstring>
-        <paramlist>
-          <param name="rel" type="wxRelationship" default=""/>
-          <param name="otherW" type="Window" default=""/>
-          <param name="otherE" type="wxEdge" default=""/>
-          <param name="val" type="int" default="0"/>
-          <param name="marg" type="int" default="wxLAYOUT_DEFAULT_MARGIN"/>
-        </paramlist>
-      </method>
-      <method name="LeftOf" type="" overloaded="no">
-        <autodoc>LeftOf(self, Window sibling, int marg=0)</autodoc>
-        <docstring>Constrains this edge to be to the left of the given window, with an
-optional margin. Implicitly, this is relative to the left edge of the
-other window.</docstring>
-        <paramlist>
-          <param name="sibling" type="Window" default=""/>
-          <param name="marg" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="RightOf" type="" overloaded="no">
-        <autodoc>RightOf(self, Window sibling, int marg=0)</autodoc>
-        <docstring>Constrains this edge to be to the right of the given window, with an
-optional margin. Implicitly, this is relative to the right edge of the
-other window.</docstring>
-        <paramlist>
-          <param name="sibling" type="Window" default=""/>
-          <param name="marg" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Above" type="" overloaded="no">
-        <autodoc>Above(self, Window sibling, int marg=0)</autodoc>
-        <docstring>Constrains this edge to be above the given window, with an optional
-margin. Implicitly, this is relative to the top edge of the other
-window.</docstring>
-        <paramlist>
-          <param name="sibling" type="Window" default=""/>
-          <param name="marg" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Below" type="" overloaded="no">
-        <autodoc>Below(self, Window sibling, int marg=0)</autodoc>
-        <docstring>Constrains this edge to be below the given window, with an optional
-margin. Implicitly, this is relative to the bottom edge of the other
-window.</docstring>
-        <paramlist>
-          <param name="sibling" type="Window" default=""/>
-          <param name="marg" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SameAs" type="" overloaded="no">
-        <autodoc>SameAs(self, Window otherW, int edge, int marg=0)</autodoc>
-        <docstring>Constrains this edge or dimension to be to the same as the edge of the
-given window, with an optional margin.</docstring>
-        <paramlist>
-          <param name="otherW" type="Window" default=""/>
-          <param name="edge" type="wxEdge" default=""/>
-          <param name="marg" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="PercentOf" type="" overloaded="no">
-        <autodoc>PercentOf(self, Window otherW, int wh, int per)</autodoc>
-        <docstring>Constrains this edge or dimension to be to a percentage of the given
-window, with an optional margin.</docstring>
-        <paramlist>
-          <param name="otherW" type="Window" default=""/>
-          <param name="wh" type="wxEdge" default=""/>
-          <param name="per" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Absolute" type="" overloaded="no">
-        <autodoc>Absolute(self, int val)</autodoc>
-        <docstring>Constrains this edge or dimension to be the given absolute value.</docstring>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Unconstrained" type="" overloaded="no">
-        <autodoc>Unconstrained(self)</autodoc>
-        <docstring>Sets this edge or dimension to be unconstrained, that is, dependent on
-other edges and dimensions from which this value can be deduced.</docstring>
-      </method>
-      <method name="AsIs" type="" overloaded="no">
-        <autodoc>AsIs(self)</autodoc>
-        <docstring>Sets this edge or constraint to be whatever the window's value is at
-the moment. If either of the width and height constraints are *as is*,
-the window will not be resized, but moved instead. This is important
-when considering panel items which are intended to have a default
-size, such as a button, which may take its size from the size of the
-button label.</docstring>
-      </method>
-      <method name="GetOtherWindow" type="Window" overloaded="no">
-        <autodoc>GetOtherWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetMyEdge" type="wxEdge" overloaded="no">
-        <autodoc>GetMyEdge(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetEdge" type="" overloaded="no">
-        <autodoc>SetEdge(self, int which)</autodoc>
-        <paramlist>
-          <param name="which" type="wxEdge" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMargin" type="int" overloaded="no">
-        <autodoc>GetMargin(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMargin" type="" overloaded="no">
-        <autodoc>SetMargin(self, int m)</autodoc>
-        <paramlist>
-          <param name="m" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="int" overloaded="no">
-        <autodoc>GetValue(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPercent" type="int" overloaded="no">
-        <autodoc>GetPercent(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetOtherEdge" type="int" overloaded="no">
-        <autodoc>GetOtherEdge(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDone" type="bool" overloaded="no">
-        <autodoc>GetDone(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetDone" type="" overloaded="no">
-        <autodoc>SetDone(self, bool d)</autodoc>
-        <paramlist>
-          <param name="d" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRelationship" type="wxRelationship" overloaded="no">
-        <autodoc>GetRelationship(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRelationship" type="" overloaded="no">
-        <autodoc>SetRelationship(self, int r)</autodoc>
-        <paramlist>
-          <param name="r" type="wxRelationship" default=""/>
-        </paramlist>
-      </method>
-      <method name="ResetIfWin" type="bool" overloaded="no">
-        <autodoc>ResetIfWin(self, Window otherW) -&gt; bool</autodoc>
-        <docstring>Reset constraint if it mentions otherWin</docstring>
-        <paramlist>
-          <param name="otherW" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SatisfyConstraint" type="bool" overloaded="no">
-        <autodoc>SatisfyConstraint(self, LayoutConstraints constraints, Window win) -&gt; bool</autodoc>
-        <docstring>Try to satisfy constraint</docstring>
-        <paramlist>
-          <param name="constraints" type="wxLayoutConstraints" default=""/>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdge" type="int" overloaded="no">
-        <autodoc>GetEdge(self, int which, Window thisWin, Window other) -&gt; int</autodoc>
-        <docstring>Get the value of this edge or dimension, or if this
-is not determinable, -1.</docstring>
-        <paramlist>
-          <param name="which" type="wxEdge" default=""/>
-          <param name="thisWin" type="Window" default=""/>
-          <param name="other" type="Window" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="LayoutConstraints" oldname="wxLayoutConstraints" module="_core">
-      <docstring>**Note:** constraints are now deprecated and you should use sizers
-instead.
-
-Objects of this class can be associated with a window to define its
-layout constraints, with respect to siblings or its parent.
-
-The class consists of the following eight constraints of class
-wx.IndividualLayoutConstraint, some or all of which should be accessed
-directly to set the appropriate constraints.
-
-    * left: represents the left hand edge of the window
-    * right: represents the right hand edge of the window
-    * top: represents the top edge of the window
-    * bottom: represents the bottom edge of the window
-    * width: represents the width of the window
-    * height: represents the height of the window
-    * centreX: represents the horizontal centre point of the window
-    * centreY: represents the vertical centre point of the window 
-
-Most constraints are initially set to have the relationship
-wxUnconstrained, which means that their values should be calculated by
-looking at known constraints. The exceptions are width and height,
-which are set to wxAsIs to ensure that if the user does not specify a
-constraint, the existing width and height will be used, to be
-compatible with panel items which often have take a default size. If
-the constraint is ``wx.AsIs``, the dimension will not be changed.
-
-:see: `wx.IndividualLayoutConstraint`, `wx.Window.SetConstraints`
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="LayoutConstraints" overloaded="no">
-        <autodoc>__init__(self) -&gt; LayoutConstraints</autodoc>
-      </constructor>
-      <property name="left" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="top" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="right" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="bottom" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="width" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="height" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="centreX" type="IndividualLayoutConstraint" readonly="yes"/>
-      <property name="centreY" type="IndividualLayoutConstraint" readonly="yes"/>
-      <method name="SatisfyConstraints" type="bool" overloaded="no">
-        <autodoc>SatisfyConstraints(Window win) -&gt; (areSatisfied, noChanges)</autodoc>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AreSatisfied" type="bool" overloaded="no">
-        <autodoc>AreSatisfied(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>#----------------------------------------------------------------------------
-
-# Use Python's bool constants if available, make some if not
-try:
-    True
-except NameError:
-    __builtins__.True = 1==1
-    __builtins__.False = 1==0
-    def bool(value): return not not value
-    __builtins__.bool = bool
-
-
-
-# workarounds for bad wxRTTI names
-__wxPyPtrTypeMap['wxGauge95']    = 'wxGauge'
-__wxPyPtrTypeMap['wxSlider95']   = 'wxSlider'
-__wxPyPtrTypeMap['wxStatusBar95']   = 'wxStatusBar'
-
-
-#----------------------------------------------------------------------------
-# Load version numbers from __version__...  Ensure that major and minor
-# versions are the same for both wxPython and wxWidgets.
-
-from __version__ import *
-__version__ = VERSION_STRING
-
-assert MAJOR_VERSION == _core_.MAJOR_VERSION, "wxPython/wxWidgets version mismatch"
-assert MINOR_VERSION == _core_.MINOR_VERSION, "wxPython/wxWidgets version mismatch"
-if RELEASE_VERSION != _core_.RELEASE_VERSION:
-    import warnings
-    warnings.warn("wxPython/wxWidgets release number mismatch")
-
-#----------------------------------------------------------------------------
-
-class PyDeadObjectError(AttributeError):
-    pass
-
-class _wxPyDeadObject(object):
-    """
-    Instances of wx objects that are OOR capable will have their __class__
-    changed to this class when the C++ object is deleted.  This should help
-    prevent crashes due to referencing a bogus C++ pointer.
-    """
-    reprStr = "wxPython wrapper for DELETED %s object! (The C++ object no longer exists.)"
-    attrStr = "The C++ part of the %s object has been deleted, attribute access no longer allowed."
-
-    def __repr__(self):
-        if not hasattr(self, "_name"):
-            self._name = "[unknown]"
-        return self.reprStr % self._name
-
-    def __getattr__(self, *args):
-        if not hasattr(self, "_name"):
-            self._name = "[unknown]"
-        raise PyDeadObjectError(self.attrStr % self._name)
-
-    def __nonzero__(self):
-        return 0
-
-
-
-class PyUnbornObjectError(AttributeError):
-    pass
-
-class _wxPyUnbornObject(object):
-    """
-    Some stock objects are created when the wx._core module is
-    imported, but their C++ instance is not created until the wx.App
-    object is created and initialized.  These object instances will
-    temporarily have their __class__ changed to this class so an
-    exception will be raised if they are used before the C++ instance
-    is ready.
-    """
-
-    reprStr = "wxPython wrapper for UNBORN object! (The C++ object is not initialized yet.)"
-    attrStr = "The C++ part of this object has not been initialized, attribute access not allowed."
-
-    def __repr__(self):
-        #if not hasattr(self, "_name"):
-        #    self._name = "[unknown]"
-        return self.reprStr #% self._name
-
-    def __getattr__(self, *args):
-        #if not hasattr(self, "_name"):
-        #    self._name = "[unknown]"
-        raise PyUnbornObjectError(self.attrStr) # % self._name )
-
-    def __nonzero__(self):
-        return 0
-
-
-#----------------------------------------------------------------------------
-_wxPyCallAfterId = None
-
-def CallAfter(callable, *args, **kw):
-    """
-    Call the specified function after the current and pending event
-    handlers have been completed.  This is also good for making GUI
-    method calls from non-GUI threads.  Any extra positional or
-    keyword args are passed on to the callable when it is called.
-
-    :see: `wx.FutureCall`
-    """
-    app = wx.GetApp()
-    assert app is not None, 'No wx.App created yet'
-
-    global _wxPyCallAfterId
-    if _wxPyCallAfterId is None:
-        _wxPyCallAfterId = wx.NewEventType()
-        app.Connect(-1, -1, _wxPyCallAfterId,
-              lambda event: event.callable(*event.args, **event.kw) )
-    evt = wx.PyEvent()
-    evt.SetEventType(_wxPyCallAfterId)
-    evt.callable = callable
-    evt.args = args
-    evt.kw = kw
-    wx.PostEvent(app, evt)
-
-
-#----------------------------------------------------------------------------
-
-
-class FutureCall:
-    """
-    A convenience class for wx.Timer, that calls the given callable
-    object once after the given amount of milliseconds, passing any
-    positional or keyword args.  The return value of the callable is
-    availbale after it has been run with the `GetResult` method.
-
-    If you don't need to get the return value or restart the timer
-    then there is no need to hold a reference to this object.  It will
-    hold a reference to itself while the timer is running (the timer
-    has a reference to self.Notify) but the cycle will be broken when
-    the timer completes, automatically cleaning up the wx.FutureCall
-    object.
-
-    :see: `wx.CallAfter`
-    """
-    def __init__(self, millis, callable, *args, **kwargs):
-        self.millis = millis
-        self.callable = callable
-        self.SetArgs(*args, **kwargs)
-        self.runCount = 0
-        self.running = False
-        self.hasRun = False
-        self.result = None
-        self.timer = None
-        self.Start()
-
-    def __del__(self):
-        self.Stop()
-
-
-    def Start(self, millis=None, *args, **kwargs):
-        """
-        (Re)start the timer
-        """
-        self.hasRun = False
-        if millis is not None:
-            self.millis = millis
-        if args or kwargs:
-            self.SetArgs(*args, **kwargs)
-        self.Stop()
-        self.timer = wx.PyTimer(self.Notify)
-        self.timer.Start(self.millis, wx.TIMER_ONE_SHOT)
-        self.running = True
-    Restart = Start
-
-
-    def Stop(self):
-        """
-        Stop and destroy the timer.
-        """
-        if self.timer is not None:
-            self.timer.Stop()
-            self.timer = None
-
-
-    def GetInterval(self):
-        if self.timer is not None:
-            return self.timer.GetInterval()
-        else:
-            return 0
-
-
-    def IsRunning(self):
-        return self.timer is not None and self.timer.IsRunning()
-
-
-    def SetArgs(self, *args, **kwargs):
-        """
-        (Re)set the args passed to the callable object.  This is
-        useful in conjunction with Restart if you want to schedule a
-        new call to the same callable object but with different
-        parameters.
-        """
-        self.args = args
-        self.kwargs = kwargs
-
-
-    def HasRun(self):
-        return self.hasRun
-
-    def GetResult(self):
-        return self.result
-
-    def Notify(self):
-        """
-        The timer has expired so call the callable.
-        """
-        if self.callable and getattr(self.callable, 'im_self', True):
-            self.runCount += 1
-            self.running = False
-            self.result = self.callable(*self.args, **self.kwargs)
-        self.hasRun = True
-        if not self.running:
-            # if it wasn't restarted, then cleanup
-            wx.CallAfter(self.Stop)
-
-
-
-#----------------------------------------------------------------------------
-# Control which items in this module should be documented by epydoc.
-# We allow only classes and functions, which will help reduce the size
-# of the docs by filtering out the zillions of constants, EVT objects,
-# and etc that don't make much sense by themselves, but are instead
-# documented (or will be) as part of the classes/functions/methods
-# where they should be used.
-
-class __DocFilter:
-    """
-    A filter for epydoc that only allows non-Ptr classes and
-    fucntions, in order to reduce the clutter in the API docs.
-    """
-    def __init__(self, globals):
-        self._globals = globals
-        
-    def __call__(self, name):
-        import types
-        obj = self._globals.get(name, None)
-        if type(obj) not in [type, types.ClassType, types.FunctionType, types.BuiltinFunctionType]:
-            return False
-        if name.startswith('_') or name.endswith('Ptr') or name.startswith('EVT'):
-            return False
-        return True
-
-#----------------------------------------------------------------------------
-#----------------------------------------------------------------------------
-
-# Import other modules in this package that should show up in the
-# "core" wx namespace
-from _gdi import *
-from _windows import *
-from _controls import *
-from _misc import *
-
-
-# Fixup the stock objects since they can't be used yet.  (They will be
-# restored in wx.PyApp.OnInit.)
-_core_._wxPyFixStockObjects()
-
-#----------------------------------------------------------------------------
-#----------------------------------------------------------------------------
-</pythoncode>
-  </module>
-  <module name="_gdi">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="GDIObject" oldname="wxGDIObject" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="GDIObject" overloaded="no">
-        <autodoc>__init__(self) -&gt; GDIObject</autodoc>
-      </constructor>
-      <destructor name="~wxGDIObject" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetVisible" type="bool" overloaded="no">
-        <autodoc>GetVisible(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetVisible" type="" overloaded="no">
-        <autodoc>SetVisible(self, bool visible)</autodoc>
-        <paramlist>
-          <param name="visible" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsNull" type="bool" overloaded="no">
-        <autodoc>IsNull(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Colour" oldname="wxColour" module="_gdi">
-      <docstring>A colour is an object representing a combination of Red, Green, and
-Blue (RGB) intensity values, and is used to determine drawing colours,
-window colours, etc.  Valid RGB values are in the range 0 to 255.
-
-In wxPython there are typemaps that will automatically convert from a
-colour name, or from a '#RRGGBB' colour hex value string to a
-wx.Colour object when calling C++ methods that expect a wxColour.
-This means that the following are all equivallent::
-
-    win.SetBackgroundColour(wxColour(0,0,255))
-    win.SetBackgroundColour('BLUE')
-    win.SetBackgroundColour('#0000FF')
-
-Additional colour names and their coresponding values can be added
-using `wx.ColourDatabase`.  Various system colours (as set in the
-user's system preferences) can be retrieved with
-`wx.SystemSettings.GetColour`.
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="Colour" overloaded="no">
-        <autodoc>__init__(self, byte red=0, byte green=0, byte blue=0) -&gt; Colour</autodoc>
-        <docstring>Constructs a colour from red, green and blue values.
-
-:see: Alternate constructors `wx.NamedColour` and `wx.ColourRGB`.
-</docstring>
-        <paramlist>
-          <param name="red" type="byte" default="0"/>
-          <param name="green" type="byte" default="0"/>
-          <param name="blue" type="byte" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="NamedColour" overloaded="no">
-        <autodoc>NamedColour(String colorName) -&gt; Colour</autodoc>
-        <docstring>Constructs a colour object using a colour name listed in
-``wx.TheColourDatabase``.</docstring>
-        <paramlist>
-          <param name="colorName" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="ColourRGB" overloaded="no">
-        <autodoc>ColourRGB(unsigned long colRGB) -&gt; Colour</autodoc>
-        <docstring>Constructs a colour from a packed RGB value.</docstring>
-        <paramlist>
-          <param name="colRGB" type="unsigned long" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxColour" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Red" type="byte" overloaded="no">
-        <autodoc>Red(self) -&gt; byte</autodoc>
-        <docstring>Returns the red intensity.</docstring>
-      </method>
-      <method name="Green" type="byte" overloaded="no">
-        <autodoc>Green(self) -&gt; byte</autodoc>
-        <docstring>Returns the green intensity.</docstring>
-      </method>
-      <method name="Blue" type="byte" overloaded="no">
-        <autodoc>Blue(self) -&gt; byte</autodoc>
-        <docstring>Returns the blue intensity.</docstring>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-        <docstring>Returns True if the colour object is valid (the colour has been
-initialised with RGB values).</docstring>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, byte red, byte green, byte blue)</autodoc>
-        <docstring>Sets the RGB intensity values.</docstring>
-        <paramlist>
-          <param name="red" type="byte" default=""/>
-          <param name="green" type="byte" default=""/>
-          <param name="blue" type="byte" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRGB" type="" overloaded="no">
-        <autodoc>SetRGB(self, unsigned long colRGB)</autodoc>
-        <docstring>Sets the RGB intensity values from a packed RGB value.</docstring>
-        <paramlist>
-          <param name="colRGB" type="unsigned long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFromName" type="" overloaded="no">
-        <autodoc>SetFromName(self, String colourName)</autodoc>
-        <docstring>Sets the RGB intensity values using a colour name listed in
-``wx.TheColourDatabase``.</docstring>
-        <paramlist>
-          <param name="colourName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPixel" type="long" overloaded="no">
-        <autodoc>GetPixel(self) -&gt; long</autodoc>
-        <docstring>Returns a pixel value which is platform-dependent. On Windows, a
-COLORREF is returned. On X, an allocated pixel value is returned.  -1
-is returned if the pixel is invalid (on X, unallocated).</docstring>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Colour colour) -&gt; bool</autodoc>
-        <docstring>Compare colours for equality</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Colour colour) -&gt; bool</autodoc>
-        <docstring>Compare colours for inequality</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get() -&gt; (r, g, b)</autodoc>
-        <docstring>Returns the RGB intensity values as a tuple.</docstring>
-      </method>
-      <method name="GetRGB" type="unsigned long" overloaded="no">
-        <autodoc>GetRGB(self) -&gt; unsigned long</autodoc>
-        <docstring>Return the colour as a packed RGB value</docstring>
-      </method>
-    </class>
-    <pythoncode>
-    Color = Colour
-    NamedColor = NamedColour
-    ColorRGB = ColourRGB
-</pythoncode>
-    <class name="Palette" oldname="wxPalette" module="_gdi">
-      <baseclass name="GDIObject"/>
-      <constructor name="Palette" overloaded="no">
-        <autodoc>__init__(self, int n, unsigned char red, unsigned char green, unsigned char blue) -&gt; Palette</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="red" type="unsigned char" default=""/>
-          <param name="green" type="unsigned char" default=""/>
-          <param name="blue" type="unsigned char" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPalette" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetPixel" type="int" overloaded="no">
-        <autodoc>GetPixel(self, byte red, byte green, byte blue) -&gt; int</autodoc>
-        <paramlist>
-          <param name="red" type="byte" default=""/>
-          <param name="green" type="byte" default=""/>
-          <param name="blue" type="byte" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRGB" type="bool" overloaded="no">
-        <autodoc>GetRGB(int pixel) -&gt; (R,G,B)</autodoc>
-        <paramlist>
-          <param name="pixel" type="int" default=""/>
-          <param name="OUTPUT" type="byte" default=""/>
-          <param name="OUTPUT" type="byte" default=""/>
-          <param name="OUTPUT" type="byte" default=""/>
-        </paramlist>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Pen" oldname="wxPen" module="_gdi">
-      <baseclass name="GDIObject"/>
-      <constructor name="Pen" overloaded="no">
-        <autodoc>__init__(self, Colour colour, int width=1, int style=SOLID) -&gt; Pen</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-          <param name="width" type="int" default="1"/>
-          <param name="style" type="int" default="wxSOLID"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPen" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetCap" type="int" overloaded="no">
-        <autodoc>GetCap(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetJoin" type="int" overloaded="no">
-        <autodoc>GetJoin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStyle" type="int" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetCap" type="" overloaded="no">
-        <autodoc>SetCap(self, int cap_style)</autodoc>
-        <paramlist>
-          <param name="cap_style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetJoin" type="" overloaded="no">
-        <autodoc>SetJoin(self, int join_style)</autodoc>
-        <paramlist>
-          <param name="join_style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, int style)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDashes" type="" overloaded="no">
-        <autodoc>SetDashes(self, int dashes, wxDash dashes_array)</autodoc>
-        <paramlist>
-          <param name="dashes" type="int" default=""/>
-          <param name="dashes_array" type="wxDash" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDashes" type="PyObject" overloaded="no">
-        <autodoc>GetDashes(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="_SetDashes" type="" overloaded="no">
-        <autodoc>_SetDashes(self, PyObject _self, PyObject pyDashes)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-          <param name="pyDashes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDashCount" type="int" overloaded="no">
-        <autodoc>GetDashCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Pen other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Pen other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Pen" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Brush" oldname="wxBrush" module="_gdi">
-      <docstring>A brush is a drawing tool for filling in areas. It is used for
-painting the background of rectangles, ellipses, etc. when drawing on
-a `wx.DC`.  It has a colour and a style.
-
-:warning: Do not create instances of wx.Brush before the `wx.App`
-    object has been created because, depending on the platform,
-    required internal data structures may not have been initialized
-    yet.  Instead create your brushes in the app's OnInit or as they
-    are needed for drawing.
-
-:note: On monochrome displays all brushes are white, unless the colour
-    really is black.
-
-:see: `wx.BrushList`, `wx.DC`, `wx.DC.SetBrush`
-</docstring>
-      <baseclass name="GDIObject"/>
-      <constructor name="Brush" overloaded="no">
-        <autodoc>__init__(self, Colour colour, int style=SOLID) -&gt; Brush</autodoc>
-        <docstring>Constructs a brush from a `wx.Colour` object and a style.The style parameter may be one of the following:
-
-    ===================   =============================
-    Style                 Meaning
-    ===================   =============================
-    wx.TRANSPARENT        Transparent (no fill).
-    wx.SOLID              Solid.
-    wx.STIPPLE            Uses a bitmap as a stipple.
-    wx.BDIAGONAL_HATCH    Backward diagonal hatch.
-    wx.CROSSDIAG_HATCH    Cross-diagonal hatch.
-    wx.FDIAGONAL_HATCH    Forward diagonal hatch.
-    wx.CROSS_HATCH        Cross hatch.
-    wx.HORIZONTAL_HATCH   Horizontal hatch.
-    wx.VERTICAL_HATCH     Vertical hatch.
-    ===================   =============================
-
-</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-          <param name="style" type="int" default="wxSOLID"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxBrush" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, Colour col)</autodoc>
-        <docstring>Set the brush's `wx.Colour`.</docstring>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, int style)</autodoc>
-        <docstring>Sets the style of the brush. See `__init__` for a listing of styles.</docstring>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStipple" type="" overloaded="no">
-        <autodoc>SetStipple(self, Bitmap stipple)</autodoc>
-        <docstring>Sets the stipple `wx.Bitmap`.</docstring>
-        <paramlist>
-          <param name="stipple" type="wxBitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(self) -&gt; Colour</autodoc>
-        <docstring>Returns the `wx.Colour` of the brush.</docstring>
-      </method>
-      <method name="GetStyle" type="int" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; int</autodoc>
-        <docstring>Returns the style of the brush.  See `__init__` for a listing of
-styles.</docstring>
-      </method>
-      <method name="GetStipple" type="wxBitmap" overloaded="no">
-        <autodoc>GetStipple(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the stiple `wx.Bitmap` of the brush.  If the brush does not
-have a wx.STIPPLE style, then the return value may be non-None but an
-uninitialised bitmap (`wx.Bitmap.Ok` returns False).</docstring>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-        <docstring>Returns True if the brush is initialised and valid.</docstring>
-      </method>
-    </class>
-    <class name="Bitmap" oldname="wxBitmap" module="_gdi">
-      <docstring>The wx.Bitmap class encapsulates the concept of a platform-dependent
-bitmap.  It can be either monochrome or colour, and either loaded from
-a file or created dynamically.  A bitmap can be selected into a memory
-device context (instance of `wx.MemoryDC`). This enables the bitmap to
-be copied to a window or memory device context using `wx.DC.Blit`, or
-to be used as a drawing surface.
-
-The BMP and XMP image file formats are supported on all platforms by
-wx.Bitmap.  Other formats are automatically loaded by `wx.Image` and
-converted to a wx.Bitmap, so any image file format supported by
-`wx.Image` can be used.
-
-:todo: Add wrappers and support for raw bitmap data access.  Can this
-       be be put into Python without losing the speed benefits of the
-       teplates and iterators in rawbmp.h?
-
-:todo: Find a way to do very efficient PIL Image &lt;--&gt; wx.Bitmap
-       converstions.
-</docstring>
-      <baseclass name="GDIObject"/>
-      <constructor name="Bitmap" overloaded="no">
-        <autodoc>__init__(self, String name, int type=BITMAP_TYPE_ANY) -&gt; Bitmap</autodoc>
-        <docstring>Loads a bitmap from a file.
-    :param name:  Name of the file to load the bitmap from.
-    :param type: The type of image to expect.  Can be one of the following
-        constants (assuming that the neccessary `wx.Image` handlers are
-        loaded):
-
-        * wx.BITMAP_TYPE_ANY
-        * wx.BITMAP_TYPE_BMP
-        * wx.BITMAP_TYPE_ICO
-        * wx.BITMAP_TYPE_CUR
-        * wx.BITMAP_TYPE_XBM
-        * wx.BITMAP_TYPE_XPM
-        * wx.BITMAP_TYPE_TIF
-        * wx.BITMAP_TYPE_GIF
-        * wx.BITMAP_TYPE_PNG
-        * wx.BITMAP_TYPE_JPEG
-        * wx.BITMAP_TYPE_PNM
-        * wx.BITMAP_TYPE_PCX
-        * wx.BITMAP_TYPE_PICT
-        * wx.BITMAP_TYPE_ICON
-        * wx.BITMAP_TYPE_ANI
-        * wx.BITMAP_TYPE_IFF
-
-:see: Alternate constructors `wx.EmptyBitmap`, `wx.BitmapFromIcon`,
-      `wx.BitmapFromImage`, `wx.BitmapFromXPMData`,
-      `wx.BitmapFromBits`
-</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="wxBitmapType" default="wxBITMAP_TYPE_ANY"/>
-        </paramlist>
-      </constructor>
-      <constructor name="EmptyBitmap" overloaded="no">
-        <autodoc>EmptyBitmap(int width, int height, int depth=-1) -&gt; Bitmap</autodoc>
-        <docstring>Creates a new bitmap of the given size.  A depth of -1 indicates the
-depth of the current screen or visual. Some platforms only support 1
-for monochrome and -1 for the current colour setting.</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="depth" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="BitmapFromIcon" overloaded="no">
-        <autodoc>BitmapFromIcon(Icon icon) -&gt; Bitmap</autodoc>
-        <docstring>Create a new bitmap from a `wx.Icon` object.</docstring>
-        <paramlist>
-          <param name="icon" type="wxIcon" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="BitmapFromImage" overloaded="no">
-        <autodoc>BitmapFromImage(Image image, int depth=-1) -&gt; Bitmap</autodoc>
-        <docstring>Creates bitmap object from a `wx.Image`. This has to be done to
-actually display a `wx.Image` as you cannot draw an image directly on
-a window. The resulting bitmap will use the provided colour depth (or
-that of the current screen colour depth if depth is -1) which entails
-that a colour reduction may have to take place.</docstring>
-        <paramlist>
-          <param name="image" type="Image" default=""/>
-          <param name="depth" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="BitmapFromXPMData" overloaded="no">
-        <autodoc>BitmapFromXPMData(PyObject listOfStrings) -&gt; Bitmap</autodoc>
-        <docstring>Construct a Bitmap from a list of strings formatted as XPM data.</docstring>
-        <paramlist>
-          <param name="listOfStrings" type="PyObject" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="BitmapFromBits" overloaded="no">
-        <autodoc>BitmapFromBits(PyObject bits, int width, int height, int depth=1) -&gt; Bitmap</autodoc>
-        <docstring>Creates a bitmap from an array of bits.  You should only use this
-function for monochrome bitmaps (depth 1) in portable programs: in
-this case the bits parameter should contain an XBM image.  For other
-bit depths, the behaviour is platform dependent.</docstring>
-        <paramlist>
-          <param name="bits" type="PyObject" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="depth" type="int" default="1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxBitmap" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-        <docstring>Gets the width of the bitmap in pixels.</docstring>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-        <docstring>Gets the height of the bitmap in pixels.</docstring>
-      </method>
-      <method name="GetDepth" type="int" overloaded="no">
-        <autodoc>GetDepth(self) -&gt; int</autodoc>
-        <docstring>Gets the colour depth of the bitmap. A value of 1 indicates a
-monochrome bitmap.</docstring>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-        <docstring>Get the size of the bitmap.</docstring>
-      </method>
-      <method name="ConvertToImage" type="Image" overloaded="no">
-        <autodoc>ConvertToImage(self) -&gt; Image</autodoc>
-        <docstring>Creates a platform-independent image from a platform-dependent
-bitmap. This preserves mask information so that bitmaps and images can
-be converted back and forth without loss in that respect.</docstring>
-      </method>
-      <method name="GetMask" type="wxMask" overloaded="no">
-        <autodoc>GetMask(self) -&gt; Mask</autodoc>
-        <docstring>Gets the associated mask (if any) which may have been loaded from a
-file or explpicitly set for the bitmap.
-
-:see: `SetMask`, `wx.Mask`
-</docstring>
-      </method>
-      <method name="SetMask" type="" overloaded="no">
-        <autodoc>SetMask(self, Mask mask)</autodoc>
-        <docstring>Sets the mask for this bitmap.
-
-:see: `GetMask`, `wx.Mask`
-</docstring>
-        <paramlist>
-          <param name="mask" type="wxMask" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaskColour" type="" overloaded="no">
-        <autodoc>SetMaskColour(self, Colour colour)</autodoc>
-        <docstring>Create a Mask based on a specified colour in the Bitmap.</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSubBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetSubBitmap(self, Rect rect) -&gt; Bitmap</autodoc>
-        <docstring>Returns a sub-bitmap of the current one as long as the rect belongs
-entirely to the bitmap. This function preserves bit depth and mask
-information.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="SaveFile" type="bool" overloaded="no">
-        <autodoc>SaveFile(self, String name, int type, Palette palette=None) -&gt; bool</autodoc>
-        <docstring>Saves a bitmap in the named file.  See `__init__` for a description of
-the ``type`` parameter.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="wxBitmapType" default=""/>
-          <param name="palette" type="Palette" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String name, int type) -&gt; bool</autodoc>
-        <docstring>Loads a bitmap from a file.  See `__init__` for a description of the
-``type`` parameter.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="wxBitmapType" default=""/>
-        </paramlist>
-      </method>
-      <method name="CopyFromIcon" type="bool" overloaded="no">
-        <autodoc>CopyFromIcon(self, Icon icon) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="icon" type="wxIcon" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHeight" type="" overloaded="no">
-        <autodoc>SetHeight(self, int height)</autodoc>
-        <docstring>Set the height property (does not affect the existing bitmap data).</docstring>
-        <paramlist>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int width)</autodoc>
-        <docstring>Set the width property (does not affect the existing bitmap data).</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDepth" type="" overloaded="no">
-        <autodoc>SetDepth(self, int depth)</autodoc>
-        <docstring>Set the depth property (does not affect the existing bitmap data).</docstring>
-        <paramlist>
-          <param name="depth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size size)</autodoc>
-        <docstring>Set the bitmap size (does not affect the existing bitmap data).</docstring>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Bitmap other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Bitmap other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="Mask" oldname="wxMask" module="_gdi">
-      <docstring>This class encapsulates a monochrome mask bitmap, where the masked
-area is black and the unmasked area is white. When associated with a
-bitmap and drawn in a device context, the unmasked area of the bitmap
-will be drawn, and the masked area will not be drawn.
-
-A mask may be associated with a `wx.Bitmap`. It is used in
-`wx.DC.DrawBitmap` or `wx.DC.Blit` when the source device context is a
-`wx.MemoryDC` with a `wx.Bitmap` selected into it that contains a
-mask.</docstring>
-      <baseclass name="Object"/>
-      <constructor name="Mask" overloaded="no">
-        <autodoc>__init__(self, Bitmap bitmap, Colour colour=NullColour) -&gt; Mask</autodoc>
-        <docstring>Constructs a mask from a `wx.Bitmap` and a `wx.Colour` in that bitmap
-that indicates the transparent portions of the mask.  In other words,
-the pixels in ``bitmap`` that match ``colour`` will be the transparent
-portions of the mask.  If no ``colour`` or an invalid ``colour`` is
-passed then BLACK is used.
-
-:see: `wx.Bitmap`, `wx.Colour`</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="colour" type="Colour" default="wxNullColour"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode> MaskColour = wx._deprecated(Mask, "wx.MaskColour is deprecated, use `wx.Mask` instead.") </pythoncode>
-    <class name="Icon" oldname="wxIcon" module="_gdi">
-      <baseclass name="GDIObject"/>
-      <constructor name="Icon" overloaded="no">
-        <autodoc>__init__(self, String name, int type, int desiredWidth=-1, int desiredHeight=-1) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="wxBitmapType" default=""/>
-          <param name="desiredWidth" type="int" default="-1"/>
-          <param name="desiredHeight" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <constructor name="EmptyIcon" overloaded="no">
-        <autodoc>EmptyIcon() -&gt; Icon</autodoc>
-      </constructor>
-      <constructor name="IconFromLocation" overloaded="no">
-        <autodoc>IconFromLocation(IconLocation loc) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="loc" type="wxIconLocation" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="IconFromBitmap" overloaded="no">
-        <autodoc>IconFromBitmap(Bitmap bmp) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="IconFromXPMData" overloaded="no">
-        <autodoc>IconFromXPMData(PyObject listOfStrings) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="listOfStrings" type="PyObject" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxIcon" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String name, int type) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="type" type="wxBitmapType" default=""/>
-        </paramlist>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDepth" type="int" overloaded="no">
-        <autodoc>GetDepth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHeight" type="" overloaded="no">
-        <autodoc>SetHeight(self, int h)</autodoc>
-        <paramlist>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDepth" type="" overloaded="no">
-        <autodoc>SetDepth(self, int d)</autodoc>
-        <paramlist>
-          <param name="d" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CopyFromBitmap" type="" overloaded="no">
-        <autodoc>CopyFromBitmap(self, Bitmap bmp)</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="IconLocation" oldname="wxIconLocation" module="_gdi">
-      <constructor name="IconLocation" overloaded="no">
-        <autodoc>__init__(self, String filename=&amp;wxPyEmptyString, int num=0) -&gt; IconLocation</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default="&amp;wxPyEmptyString"/>
-          <param name="num" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxIconLocation" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetFileName" type="" overloaded="no">
-        <autodoc>SetFileName(self, String filename)</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFileName" type="String" overloaded="no">
-        <autodoc>GetFileName(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetIndex" type="" overloaded="no">
-        <autodoc>SetIndex(self, int num)</autodoc>
-        <paramlist>
-          <param name="num" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetIndex" type="int" overloaded="no">
-        <autodoc>GetIndex(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="IconBundle" oldname="wxIconBundle" module="_gdi">
-      <constructor name="IconBundle" overloaded="no">
-        <autodoc>__init__(self) -&gt; IconBundle</autodoc>
-      </constructor>
-      <constructor name="IconBundleFromFile" overloaded="no">
-        <autodoc>IconBundleFromFile(String file, long type) -&gt; IconBundle</autodoc>
-        <paramlist>
-          <param name="file" type="String" default=""/>
-          <param name="type" type="long" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="IconBundleFromIcon" overloaded="no">
-        <autodoc>IconBundleFromIcon(Icon icon) -&gt; IconBundle</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxIconBundle" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="AddIcon" type="" overloaded="no">
-        <autodoc>AddIcon(self, Icon icon)</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddIconFromFile" type="" overloaded="no">
-        <autodoc>AddIconFromFile(self, String file, long type)</autodoc>
-        <paramlist>
-          <param name="file" type="String" default=""/>
-          <param name="type" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetIcon" type="Icon" overloaded="no">
-        <autodoc>GetIcon(self, Size size) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="Cursor" oldname="wxCursor" module="_gdi">
-      <docstring>A cursor is a small bitmap usually used for denoting where the mouse
-pointer is, with a picture that might indicate the interpretation of a
-mouse click.
-
-A single cursor object may be used in many windows (any subwindow
-type). The wxWindows convention is to set the cursor for a window, as
-in X, rather than to set it globally as in MS Windows, although a
-global `wx.SetCursor` function is also available for use on MS Windows.
-
-
-Stock Cursor IDs
------------------
-    ========================    ======================================
-    wx.CURSOR_ARROW             A standard arrow cursor.
-    wx.CURSOR_RIGHT_ARROW       A standard arrow cursor pointing to the right.
-    wx.CURSOR_BLANK             Transparent cursor.
-    wx.CURSOR_BULLSEYE          Bullseye cursor.
-    wx.CURSOR_CHAR              Rectangular character cursor.
-    wx.CURSOR_CROSS             A cross cursor.
-    wx.CURSOR_HAND              A hand cursor.
-    wx.CURSOR_IBEAM             An I-beam cursor (vertical line).
-    wx.CURSOR_LEFT_BUTTON       Represents a mouse with the left button depressed.
-    wx.CURSOR_MAGNIFIER         A magnifier icon.
-    wx.CURSOR_MIDDLE_BUTTON     Represents a mouse with the middle button depressed.
-    wx.CURSOR_NO_ENTRY          A no-entry sign cursor.
-    wx.CURSOR_PAINT_BRUSH       A paintbrush cursor.
-    wx.CURSOR_PENCIL            A pencil cursor.
-    wx.CURSOR_POINT_LEFT        A cursor that points left.
-    wx.CURSOR_POINT_RIGHT       A cursor that points right.
-    wx.CURSOR_QUESTION_ARROW    An arrow and question mark.
-    wx.CURSOR_RIGHT_BUTTON      Represents a mouse with the right button depressed.
-    wx.CURSOR_SIZENESW          A sizing cursor pointing NE-SW.
-    wx.CURSOR_SIZENS            A sizing cursor pointing N-S.
-    wx.CURSOR_SIZENWSE          A sizing cursor pointing NW-SE.
-    wx.CURSOR_SIZEWE            A sizing cursor pointing W-E.
-    wx.CURSOR_SIZING            A general sizing cursor.
-    wx.CURSOR_SPRAYCAN          A spraycan cursor.
-    wx.CURSOR_WAIT              A wait cursor.
-    wx.CURSOR_WATCH             A watch cursor.
-    wx.CURSOR_ARROWWAIT         A cursor with both an arrow and an hourglass, (windows.)
-    ========================    ======================================
-
-</docstring>
-      <baseclass name="GDIObject"/>
-      <constructor name="Cursor" overloaded="no">
-        <autodoc>__init__(self, String cursorName, long type, int hotSpotX=0, int hotSpotY=0) -&gt; Cursor</autodoc>
-        <docstring>Construct a Cursor from a file.  Specify the type of file using
-wx.BITAMP_TYPE* constants, and specify the hotspot if not using a cur
-file.
-
-This constructor is not available on wxGTK, use ``wx.StockCursor``,
-``wx.CursorFromImage``, or ``wx.CursorFromBits`` instead.</docstring>
-        <paramlist>
-          <param name="cursorName" type="String" default=""/>
-          <param name="type" type="long" default=""/>
-          <param name="hotSpotX" type="int" default="0"/>
-          <param name="hotSpotY" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="StockCursor" overloaded="no">
-        <autodoc>StockCursor(int id) -&gt; Cursor</autodoc>
-        <docstring>Create a cursor using one of the stock cursors.  Note that not all
-cursors are available on all platforms.</docstring>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="CursorFromImage" overloaded="no">
-        <autodoc>CursorFromImage(Image image) -&gt; Cursor</autodoc>
-        <docstring>Constructs a cursor from a wxImage. The cursor is monochrome, colors
-with the RGB elements all greater than 127 will be foreground, colors
-less than this background. The mask (if any) will be used as
-transparent.
-In MSW the foreground will be white and the background
-black. The cursor is resized to 32x32.
-
-In GTK, the two most frequent colors will be used for foreground and
-background. The cursor will be displayed at the size of the image.
-
-On MacOS the cursor is resized to 16x16 and currently only shown as
-black/white (mask respected).</docstring>
-        <paramlist>
-          <param name="image" type="Image" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxCursor" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Region" oldname="wxRegion" module="_gdi">
-      <baseclass name="GDIObject"/>
-      <constructor name="Region" overloaded="no">
-        <autodoc>__init__(self, int x=0, int y=0, int width=0, int height=0) -&gt; Region</autodoc>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="RegionFromBitmap" overloaded="no">
-        <autodoc>RegionFromBitmap(Bitmap bmp) -&gt; Region</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="RegionFromBitmapColour" overloaded="no">
-        <autodoc>RegionFromBitmapColour(Bitmap bmp, Colour transColour, int tolerance=0) -&gt; Region</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-          <param name="transColour" type="Colour" default=""/>
-          <param name="tolerance" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="RegionFromPoints" overloaded="no">
-        <autodoc>RegionFromPoints(int points, Point points_array, int fillStyle=WINDING_RULE) -&gt; Region</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-          <param name="fillStyle" type="int" default="wxWINDING_RULE"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxRegion" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="Offset" type="bool" overloaded="no">
-        <autodoc>Offset(self, int x, int y) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Contains" type="wxRegionContain" overloaded="no">
-        <autodoc>Contains(self, int x, int y) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ContainsPoint" type="wxRegionContain" overloaded="no">
-        <autodoc>ContainsPoint(self, Point pt) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ContainsRect" type="wxRegionContain" overloaded="no">
-        <autodoc>ContainsRect(self, Rect rect) -&gt; int</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="ContainsRectDim" type="wxRegionContain" overloaded="no">
-        <autodoc>ContainsRectDim(self, int x, int y, int w, int h) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBox" type="Rect" overloaded="no">
-        <autodoc>GetBox(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="Intersect" type="bool" overloaded="no">
-        <autodoc>Intersect(self, int x, int y, int width, int height) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IntersectRect" type="bool" overloaded="no">
-        <autodoc>IntersectRect(self, Rect rect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="IntersectRegion" type="bool" overloaded="no">
-        <autodoc>IntersectRegion(self, Region region) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEmpty" type="bool" overloaded="no">
-        <autodoc>IsEmpty(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Union" type="bool" overloaded="no">
-        <autodoc>Union(self, int x, int y, int width, int height) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="UnionRect" type="bool" overloaded="no">
-        <autodoc>UnionRect(self, Rect rect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="UnionRegion" type="bool" overloaded="no">
-        <autodoc>UnionRegion(self, Region region) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-      <method name="Subtract" type="bool" overloaded="no">
-        <autodoc>Subtract(self, int x, int y, int width, int height) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SubtractRect" type="bool" overloaded="no">
-        <autodoc>SubtractRect(self, Rect rect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="SubtractRegion" type="bool" overloaded="no">
-        <autodoc>SubtractRegion(self, Region region) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-      <method name="Xor" type="bool" overloaded="no">
-        <autodoc>Xor(self, int x, int y, int width, int height) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="XorRect" type="bool" overloaded="no">
-        <autodoc>XorRect(self, Rect rect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="XorRegion" type="bool" overloaded="no">
-        <autodoc>XorRegion(self, Region region) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertToBitmap" type="Bitmap" overloaded="no">
-        <autodoc>ConvertToBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="UnionBitmap" type="bool" overloaded="no">
-        <autodoc>UnionBitmap(self, Bitmap bmp) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="UnionBitmapColour" type="bool" overloaded="no">
-        <autodoc>UnionBitmapColour(self, Bitmap bmp, Colour transColour, int tolerance=0) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-          <param name="transColour" type="Colour" default=""/>
-          <param name="tolerance" type="int" default="0"/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="RegionIterator" oldname="wxRegionIterator" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="RegionIterator" overloaded="no">
-        <autodoc>__init__(self, Region region) -&gt; RegionIterator</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxRegionIterator" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetW" type="int" overloaded="no">
-        <autodoc>GetW(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetH" type="int" overloaded="no">
-        <autodoc>GetH(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRect" type="Rect" overloaded="no">
-        <autodoc>GetRect(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="HaveRects" type="bool" overloaded="no">
-        <autodoc>HaveRects(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Reset" type="" overloaded="no">
-        <autodoc>Reset(self)</autodoc>
-      </method>
-      <method name="Next" type="" overloaded="no">
-        <autodoc>Next(self)</autodoc>
-      </method>
-      <method name="__nonzero__" type="bool" overloaded="no">
-        <autodoc>__nonzero__(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="NativeFontInfo" oldname="wxNativeFontInfo" module="_gdi">
-      <constructor name="NativeFontInfo" overloaded="no">
-        <autodoc>__init__(self) -&gt; NativeFontInfo</autodoc>
-      </constructor>
-      <destructor name="~wxNativeFontInfo" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Init" type="" overloaded="no">
-        <autodoc>Init(self)</autodoc>
-      </method>
-      <method name="InitFromFont" type="" overloaded="no">
-        <autodoc>InitFromFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="wxFont" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPointSize" type="int" overloaded="no">
-        <autodoc>GetPointSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStyle" type="wxFontStyle" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWeight" type="wxFontWeight" overloaded="no">
-        <autodoc>GetWeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUnderlined" type="bool" overloaded="no">
-        <autodoc>GetUnderlined(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetFaceName" type="String" overloaded="no">
-        <autodoc>GetFaceName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFamily" type="wxFontFamily" overloaded="no">
-        <autodoc>GetFamily(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetEncoding(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPointSize" type="" overloaded="no">
-        <autodoc>SetPointSize(self, int pointsize)</autodoc>
-        <paramlist>
-          <param name="pointsize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, int style)</autodoc>
-        <paramlist>
-          <param name="style" type="wxFontStyle" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWeight" type="" overloaded="no">
-        <autodoc>SetWeight(self, int weight)</autodoc>
-        <paramlist>
-          <param name="weight" type="wxFontWeight" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUnderlined" type="" overloaded="no">
-        <autodoc>SetUnderlined(self, bool underlined)</autodoc>
-        <paramlist>
-          <param name="underlined" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFaceName" type="" overloaded="no">
-        <autodoc>SetFaceName(self, String facename)</autodoc>
-        <paramlist>
-          <param name="facename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFamily" type="" overloaded="no">
-        <autodoc>SetFamily(self, int family)</autodoc>
-        <paramlist>
-          <param name="family" type="wxFontFamily" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEncoding" type="" overloaded="no">
-        <autodoc>SetEncoding(self, int encoding)</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </method>
-      <method name="FromString" type="bool" overloaded="no">
-        <autodoc>FromString(self, String s) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ToString" type="String" overloaded="no">
-        <autodoc>ToString(self) -&gt; String</autodoc>
-      </method>
-      <method name="__str__" type="String" overloaded="no">
-        <autodoc>__str__(self) -&gt; String</autodoc>
-      </method>
-      <method name="FromUserString" type="bool" overloaded="no">
-        <autodoc>FromUserString(self, String s) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ToUserString" type="String" overloaded="no">
-        <autodoc>ToUserString(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="NativeEncodingInfo" oldname="wxNativeEncodingInfo" module="_gdi">
-      <constructor name="NativeEncodingInfo" overloaded="no">
-        <autodoc>__init__(self) -&gt; NativeEncodingInfo</autodoc>
-      </constructor>
-      <destructor name="~wxNativeEncodingInfo" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <property name="facename" type="String" readonly="no"/>
-      <property name="encoding" type="wxFontEncoding" readonly="no"/>
-      <method name="FromString" type="bool" overloaded="no">
-        <autodoc>FromString(self, String s) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ToString" type="String" overloaded="no">
-        <autodoc>ToString(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <method name="GetNativeFontEncoding" oldname="wxGetNativeFontEncoding" type="NativeEncodingInfo" overloaded="no">
-      <autodoc>GetNativeFontEncoding(int encoding) -&gt; NativeEncodingInfo</autodoc>
-      <paramlist>
-        <param name="encoding" type="wxFontEncoding" default=""/>
-      </paramlist>
-    </method>
-    <method name="TestFontEncoding" oldname="wxTestFontEncoding" type="bool" overloaded="no">
-      <autodoc>TestFontEncoding(NativeEncodingInfo info) -&gt; bool</autodoc>
-      <paramlist>
-        <param name="info" type="NativeEncodingInfo" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FontMapper" oldname="wxFontMapper" module="_gdi">
-      <constructor name="FontMapper" overloaded="no">
-        <autodoc>__init__(self) -&gt; FontMapper</autodoc>
-      </constructor>
-      <destructor name="~wxFontMapper" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="Get" type="FontMapper" overloaded="no">
-        <autodoc>Get() -&gt; FontMapper</autodoc>
-      </staticmethod>
-      <staticmethod name="Set" type="FontMapper" overloaded="no">
-        <autodoc>Set(FontMapper mapper) -&gt; FontMapper</autodoc>
-        <paramlist>
-          <param name="mapper" type="FontMapper" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="CharsetToEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>CharsetToEncoding(self, String charset, bool interactive=True) -&gt; int</autodoc>
-        <paramlist>
-          <param name="charset" type="String" default=""/>
-          <param name="interactive" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetSupportedEncodingsCount" type="size_t" overloaded="no">
-        <autodoc>GetSupportedEncodingsCount() -&gt; size_t</autodoc>
-      </staticmethod>
-      <staticmethod name="GetEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetEncoding(size_t n) -&gt; int</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetEncodingName" type="String" overloaded="no">
-        <autodoc>GetEncodingName(int encoding) -&gt; String</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetEncodingDescription" type="String" overloaded="no">
-        <autodoc>GetEncodingDescription(int encoding) -&gt; String</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetEncodingFromName" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetEncodingFromName(String name) -&gt; int</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="SetConfig" type="" overloaded="no">
-        <autodoc>SetConfig(self, ConfigBase config)</autodoc>
-        <paramlist>
-          <param name="config" type="wxConfigBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetConfigPath" type="" overloaded="no">
-        <autodoc>SetConfigPath(self, String prefix)</autodoc>
-        <paramlist>
-          <param name="prefix" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetDefaultConfigPath" type="String" overloaded="no">
-        <autodoc>GetDefaultConfigPath() -&gt; String</autodoc>
-      </staticmethod>
-      <method name="GetAltForEncoding" type="PyObject" overloaded="no">
-        <autodoc>GetAltForEncoding(self, int encoding, String facename=EmptyString, bool interactive=True) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-          <param name="facename" type="String" default="wxPyEmptyString"/>
-          <param name="interactive" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsEncodingAvailable" type="bool" overloaded="no">
-        <autodoc>IsEncodingAvailable(self, int encoding, String facename=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-          <param name="facename" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="SetDialogParent" type="" overloaded="no">
-        <autodoc>SetDialogParent(self, Window parent)</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDialogTitle" type="" overloaded="no">
-        <autodoc>SetDialogTitle(self, String title)</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Font" oldname="wxFont" module="_gdi">
-      <baseclass name="GDIObject"/>
-      <constructor name="Font" overloaded="no">
-        <autodoc>__init__(self, int pointSize, int family, int style, int weight, bool underline=False, 
-    String face=EmptyString, 
-    int encoding=FONTENCODING_DEFAULT) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="pointSize" type="int" default=""/>
-          <param name="family" type="int" default=""/>
-          <param name="style" type="int" default=""/>
-          <param name="weight" type="int" default=""/>
-          <param name="underline" type="bool" default="False"/>
-          <param name="face" type="String" default="wxPyEmptyString"/>
-          <param name="encoding" type="wxFontEncoding" default="wxFONTENCODING_DEFAULT"/>
-        </paramlist>
-      </constructor>
-      <constructor name="FontFromNativeInfo" overloaded="no">
-        <autodoc>FontFromNativeInfo(NativeFontInfo info) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="info" type="NativeFontInfo" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="FontFromNativeInfoString" overloaded="no">
-        <autodoc>FontFromNativeInfoString(String info) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="info" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="Font2" overloaded="no">
-        <autodoc>Font2(int pointSize, int family, int flags=FONTFLAG_DEFAULT, 
-    String face=EmptyString, int encoding=FONTENCODING_DEFAULT) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="pointSize" type="int" default=""/>
-          <param name="family" type="wxFontFamily" default=""/>
-          <param name="flags" type="int" default="wxFONTFLAG_DEFAULT"/>
-          <param name="face" type="String" default="wxPyEmptyString"/>
-          <param name="encoding" type="wxFontEncoding" default="wxFONTENCODING_DEFAULT"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFont" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, Font other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, Font other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPointSize" type="int" overloaded="no">
-        <autodoc>GetPointSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetFamily" type="int" overloaded="no">
-        <autodoc>GetFamily(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStyle" type="int" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWeight" type="int" overloaded="no">
-        <autodoc>GetWeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUnderlined" type="bool" overloaded="no">
-        <autodoc>GetUnderlined(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetFaceName" type="String" overloaded="no">
-        <autodoc>GetFaceName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetEncoding(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNativeFontInfo" type="NativeFontInfo" overloaded="no">
-        <autodoc>GetNativeFontInfo(self) -&gt; NativeFontInfo</autodoc>
-      </method>
-      <method name="IsFixedWidth" type="bool" overloaded="no">
-        <autodoc>IsFixedWidth(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetNativeFontInfoDesc" type="String" overloaded="no">
-        <autodoc>GetNativeFontInfoDesc(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetNativeFontInfoUserDesc" type="String" overloaded="no">
-        <autodoc>GetNativeFontInfoUserDesc(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetPointSize" type="" overloaded="no">
-        <autodoc>SetPointSize(self, int pointSize)</autodoc>
-        <paramlist>
-          <param name="pointSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFamily" type="" overloaded="no">
-        <autodoc>SetFamily(self, int family)</autodoc>
-        <paramlist>
-          <param name="family" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, int style)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWeight" type="" overloaded="no">
-        <autodoc>SetWeight(self, int weight)</autodoc>
-        <paramlist>
-          <param name="weight" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFaceName" type="" overloaded="no">
-        <autodoc>SetFaceName(self, String faceName)</autodoc>
-        <paramlist>
-          <param name="faceName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUnderlined" type="" overloaded="no">
-        <autodoc>SetUnderlined(self, bool underlined)</autodoc>
-        <paramlist>
-          <param name="underlined" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEncoding" type="" overloaded="no">
-        <autodoc>SetEncoding(self, int encoding)</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNativeFontInfo" type="" overloaded="no">
-        <autodoc>SetNativeFontInfo(self, NativeFontInfo info)</autodoc>
-        <paramlist>
-          <param name="info" type="NativeFontInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNativeFontInfoFromString" type="" overloaded="no">
-        <autodoc>SetNativeFontInfoFromString(self, String info)</autodoc>
-        <paramlist>
-          <param name="info" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNativeFontInfoUserDesc" type="" overloaded="no">
-        <autodoc>SetNativeFontInfoUserDesc(self, String info)</autodoc>
-        <paramlist>
-          <param name="info" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFamilyString" type="String" overloaded="no">
-        <autodoc>GetFamilyString(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetStyleString" type="String" overloaded="no">
-        <autodoc>GetStyleString(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetWeightString" type="String" overloaded="no">
-        <autodoc>GetWeightString(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetNoAntiAliasing" type="" overloaded="no">
-        <autodoc>SetNoAntiAliasing(self, bool no=True)</autodoc>
-        <paramlist>
-          <param name="no" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetNoAntiAliasing" type="bool" overloaded="no">
-        <autodoc>GetNoAntiAliasing(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="GetDefaultEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetDefaultEncoding() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="SetDefaultEncoding" type="" overloaded="no">
-        <autodoc>SetDefaultEncoding(int encoding)</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FontEnumerator" oldname="wxPyFontEnumerator" module="_gdi">
-      <constructor name="wxPyFontEnumerator" overloaded="no">
-        <autodoc>__init__(self) -&gt; FontEnumerator</autodoc>
-      </constructor>
-      <destructor name="~wxPyFontEnumerator" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class, bool incref)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-          <param name="incref" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnumerateFacenames" type="bool" overloaded="no">
-        <autodoc>EnumerateFacenames(self, int encoding=FONTENCODING_SYSTEM, bool fixedWidthOnly=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="encoding" type="wxFontEncoding" default="wxFONTENCODING_SYSTEM"/>
-          <param name="fixedWidthOnly" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="EnumerateEncodings" type="bool" overloaded="no">
-        <autodoc>EnumerateEncodings(self, String facename=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="facename" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetEncodings" type="PyObject" overloaded="no">
-        <autodoc>GetEncodings(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetFacenames" type="PyObject" overloaded="no">
-        <autodoc>GetFacenames(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="LanguageInfo" oldname="wxLanguageInfo" module="_gdi">
-      <property name="Language" type="int" readonly="no"/>
-      <property name="CanonicalName" type="String" readonly="no"/>
-      <property name="Description" type="String" readonly="no"/>
-    </class>
-    <class name="Locale" oldname="wxLocale" module="_gdi">
-      <constructor name="Locale" overloaded="no">
-        <autodoc>__init__(self, int language=-1, int flags=wxLOCALE_LOAD_DEFAULT|wxLOCALE_CONV_ENCODING) -&gt; Locale</autodoc>
-        <paramlist>
-          <param name="language" type="int" default="-1"/>
-          <param name="flags" type="int" default="wxLOCALE_LOAD_DEFAULT|wxLOCALE_CONV_ENCODING"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxLocale" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Init1" type="bool" overloaded="no">
-        <autodoc>Init1(self, String szName, String szShort=EmptyString, String szLocale=EmptyString, 
-    bool bLoadDefault=True, 
-    bool bConvertEncoding=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="szName" type="String" default=""/>
-          <param name="szShort" type="String" default="wxPyEmptyString"/>
-          <param name="szLocale" type="String" default="wxPyEmptyString"/>
-          <param name="bLoadDefault" type="bool" default="True"/>
-          <param name="bConvertEncoding" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Init2" type="bool" overloaded="no">
-        <autodoc>Init2(self, int language=LANGUAGE_DEFAULT, int flags=wxLOCALE_LOAD_DEFAULT|wxLOCALE_CONV_ENCODING) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="language" type="int" default="wxLANGUAGE_DEFAULT"/>
-          <param name="flags" type="int" default="wxLOCALE_LOAD_DEFAULT|wxLOCALE_CONV_ENCODING"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetSystemLanguage" type="int" overloaded="no">
-        <autodoc>GetSystemLanguage() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="GetSystemEncoding" type="wxFontEncoding" overloaded="no">
-        <autodoc>GetSystemEncoding() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="GetSystemEncodingName" type="String" overloaded="no">
-        <autodoc>GetSystemEncodingName() -&gt; String</autodoc>
-      </staticmethod>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetLocale" type="String" overloaded="no">
-        <autodoc>GetLocale(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetLanguage" type="int" overloaded="no">
-        <autodoc>GetLanguage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetSysName" type="String" overloaded="no">
-        <autodoc>GetSysName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetCanonicalName" type="String" overloaded="no">
-        <autodoc>GetCanonicalName(self) -&gt; String</autodoc>
-      </method>
-      <staticmethod name="AddCatalogLookupPathPrefix" type="" overloaded="no">
-        <autodoc>AddCatalogLookupPathPrefix(String prefix)</autodoc>
-        <paramlist>
-          <param name="prefix" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="AddCatalog" type="bool" overloaded="no">
-        <autodoc>AddCatalog(self, String szDomain) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="szDomain" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsLoaded" type="bool" overloaded="no">
-        <autodoc>IsLoaded(self, String szDomain) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="szDomain" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetLanguageInfo" type="LanguageInfo" overloaded="no">
-        <autodoc>GetLanguageInfo(int lang) -&gt; LanguageInfo</autodoc>
-        <paramlist>
-          <param name="lang" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetLanguageName" type="String" overloaded="no">
-        <autodoc>GetLanguageName(int lang) -&gt; String</autodoc>
-        <paramlist>
-          <param name="lang" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="FindLanguageInfo" type="LanguageInfo" overloaded="no">
-        <autodoc>FindLanguageInfo(String locale) -&gt; LanguageInfo</autodoc>
-        <paramlist>
-          <param name="locale" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="AddLanguage" type="" overloaded="no">
-        <autodoc>AddLanguage(LanguageInfo info)</autodoc>
-        <paramlist>
-          <param name="info" type="LanguageInfo" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="GetString" type="String" overloaded="no">
-        <autodoc>GetString(self, String szOrigString, String szDomain=EmptyString) -&gt; String</autodoc>
-        <paramlist>
-          <param name="szOrigString" type="String" default=""/>
-          <param name="szDomain" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <method name="GetLocale" oldname="wxGetLocale" type="Locale" overloaded="no">
-      <autodoc>GetLocale() -&gt; Locale</autodoc>
-    </method>
-    <method name="GetTranslation" oldname="wxGetTranslation" type="String" overloaded="yes">
-      <paramlist>
-        <param name="str" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetTranslation" oldname="wxGetTranslation" type="String" overloaded="yes">
-      <autodoc>GetTranslation(String str) -&gt; String
-GetTranslation(String str, String strPlural, size_t n) -&gt; String</autodoc>
-      <paramlist>
-        <param name="str" type="String" default=""/>
-        <param name="strPlural" type="String" default=""/>
-        <param name="n" type="size_t" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="EncodingConverter" oldname="wxEncodingConverter" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="EncodingConverter" overloaded="no">
-        <autodoc>__init__(self) -&gt; EncodingConverter</autodoc>
-      </constructor>
-      <destructor name="~wxEncodingConverter" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Init" type="bool" overloaded="no">
-        <autodoc>Init(self, int input_enc, int output_enc, int method=CONVERT_STRICT) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="input_enc" type="wxFontEncoding" default=""/>
-          <param name="output_enc" type="wxFontEncoding" default=""/>
-          <param name="method" type="int" default="wxCONVERT_STRICT"/>
-        </paramlist>
-      </method>
-      <method name="Convert" type="String" overloaded="no">
-        <autodoc>Convert(self, String input) -&gt; String</autodoc>
-        <paramlist>
-          <param name="input" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetPlatformEquivalents" type="wxFontEncodingArray" overloaded="no">
-        <autodoc>GetPlatformEquivalents(int enc, int platform=PLATFORM_CURRENT) -&gt; wxFontEncodingArray</autodoc>
-        <paramlist>
-          <param name="enc" type="wxFontEncoding" default=""/>
-          <param name="platform" type="int" default="wxPLATFORM_CURRENT"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetAllEquivalents" type="wxFontEncodingArray" overloaded="no">
-        <autodoc>GetAllEquivalents(int enc) -&gt; wxFontEncodingArray</autodoc>
-        <paramlist>
-          <param name="enc" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="CanConvert" type="bool" overloaded="no">
-        <autodoc>CanConvert(int encIn, int encOut) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="encIn" type="wxFontEncoding" default=""/>
-          <param name="encOut" type="wxFontEncoding" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>#----------------------------------------------------------------------------
-# On MSW add the directory where the wxWidgets catalogs were installed
-# to the default catalog path.
-if wx.Platform == "__WXMSW__":
-    import os
-    localedir = os.path.join(os.path.split(__file__)[0], "locale")
-    Locale_AddCatalogLookupPathPrefix(localedir)
-    del os
-
-#----------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DC" oldname="wxDC" module="_gdi">
-      <docstring>A wx.DC is a device context onto which graphics and text can be
-drawn. It is intended to represent a number of output devices in a
-generic way, so a window can have a device context associated with it,
-and a printer also has a device context. In this way, the same piece
-of code may write to a number of different devices, if the device
-context is used as a parameter.
-
-Derived types of wxDC have documentation for specific features only,
-so refer to this section for most device context information.
-
-The wx.DC class is abstract and can not be instantiated, you must use
-one of the derived classes instead.  Which one will depend on the
-situation in which it is used.</docstring>
-      <baseclass name="Object"/>
-      <destructor name="~wxDC" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="BeginDrawing" type="" overloaded="no">
-        <autodoc>BeginDrawing(self)</autodoc>
-        <docstring>Allows for optimization of drawing code on platforms that need it.  On
-other platforms this is just an empty function and is harmless.  To
-take advantage of this postential optimization simply enclose each
-group of calls to the drawing primitives within calls to
-`BeginDrawing` and `EndDrawing`.</docstring>
-      </method>
-      <method name="EndDrawing" type="" overloaded="no">
-        <autodoc>EndDrawing(self)</autodoc>
-        <docstring>Ends the group of drawing primitives started with `BeginDrawing`, and
-invokes whatever optimization is available for this DC type on the
-current platform.</docstring>
-      </method>
-      <method name="FloodFill" type="bool" overloaded="no">
-        <autodoc>FloodFill(self, int x, int y, Colour col, int style=FLOOD_SURFACE) -&gt; bool</autodoc>
-        <docstring>Flood fills the device context starting from the given point, using
-the current brush colour, and using a style:
-
-    - **wxFLOOD_SURFACE**: the flooding occurs until a colour other than
-      the given colour is encountered.
-
-    - **wxFLOOD_BORDER**: the area to be flooded is bounded by the given
-      colour.
-
-Returns False if the operation failed.
-
-Note: The present implementation for non-Windows platforms may fail to
-find colour borders if the pixels do not match the colour
-exactly. However the function will still return true.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="col" type="Colour" default=""/>
-          <param name="style" type="int" default="wxFLOOD_SURFACE"/>
-        </paramlist>
-      </method>
-      <method name="FloodFillPoint" type="bool" overloaded="no">
-        <autodoc>FloodFillPoint(self, Point pt, Colour col, int style=FLOOD_SURFACE) -&gt; bool</autodoc>
-        <docstring>Flood fills the device context starting from the given point, using
-the current brush colour, and using a style:
-
-    - **wxFLOOD_SURFACE**: the flooding occurs until a colour other than
-      the given colour is encountered.
-
-    - **wxFLOOD_BORDER**: the area to be flooded is bounded by the given
-      colour.
-
-Returns False if the operation failed.
-
-Note: The present implementation for non-Windows platforms may fail to
-find colour borders if the pixels do not match the colour
-exactly. However the function will still return true.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="col" type="Colour" default=""/>
-          <param name="style" type="int" default="wxFLOOD_SURFACE"/>
-        </paramlist>
-      </method>
-      <method name="GetPixel" type="Colour" overloaded="no">
-        <autodoc>GetPixel(self, int x, int y) -&gt; Colour</autodoc>
-        <docstring>Gets the colour at the specified location on the DC.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPixelPoint" type="Colour" overloaded="no">
-        <autodoc>GetPixelPoint(self, Point pt) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLine" type="" overloaded="no">
-        <autodoc>DrawLine(self, int x1, int y1, int x2, int y2)</autodoc>
-        <docstring>Draws a line from the first point to the second. The current pen is
-used for drawing the line. Note that the second point is *not* part of
-the line and is not drawn by this function (this is consistent with
-the behaviour of many other toolkits).</docstring>
-        <paramlist>
-          <param name="x1" type="int" default=""/>
-          <param name="y1" type="int" default=""/>
-          <param name="x2" type="int" default=""/>
-          <param name="y2" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLinePoint" type="" overloaded="no">
-        <autodoc>DrawLinePoint(self, Point pt1, Point pt2)</autodoc>
-        <docstring>Draws a line from the first point to the second. The current pen is
-used for drawing the line. Note that the second point is *not* part of
-the line and is not drawn by this function (this is consistent with
-the behaviour of many other toolkits).</docstring>
-        <paramlist>
-          <param name="pt1" type="Point" default=""/>
-          <param name="pt2" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="CrossHair" type="" overloaded="no">
-        <autodoc>CrossHair(self, int x, int y)</autodoc>
-        <docstring>Displays a cross hair using the current pen. This is a vertical and
-horizontal line the height and width of the window, centred on the
-given point.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CrossHairPoint" type="" overloaded="no">
-        <autodoc>CrossHairPoint(self, Point pt)</autodoc>
-        <docstring>Displays a cross hair using the current pen. This is a vertical and
-horizontal line the height and width of the window, centred on the
-given point.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawArc" type="" overloaded="no">
-        <autodoc>DrawArc(self, int x1, int y1, int x2, int y2, int xc, int yc)</autodoc>
-        <docstring>Draws an arc of a circle, centred on the *center* point (xc, yc), from
-the first point to the second. The current pen is used for the outline
-and the current brush for filling the shape.
-
-The arc is drawn in an anticlockwise direction from the start point to
-the end point.</docstring>
-        <paramlist>
-          <param name="x1" type="int" default=""/>
-          <param name="y1" type="int" default=""/>
-          <param name="x2" type="int" default=""/>
-          <param name="y2" type="int" default=""/>
-          <param name="xc" type="int" default=""/>
-          <param name="yc" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawArcPoint" type="" overloaded="no">
-        <autodoc>DrawArcPoint(self, Point pt1, Point pt2, Point center)</autodoc>
-        <docstring>Draws an arc of a circle, centred on the *center* point (xc, yc), from
-the first point to the second. The current pen is used for the outline
-and the current brush for filling the shape.
-
-The arc is drawn in an anticlockwise direction from the start point to
-the end point.</docstring>
-        <paramlist>
-          <param name="pt1" type="Point" default=""/>
-          <param name="pt2" type="Point" default=""/>
-          <param name="center" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawCheckMark" type="" overloaded="no">
-        <autodoc>DrawCheckMark(self, int x, int y, int width, int height)</autodoc>
-        <docstring>Draws a check mark inside the given rectangle.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawCheckMarkRect" type="" overloaded="no">
-        <autodoc>DrawCheckMarkRect(self, Rect rect)</autodoc>
-        <docstring>Draws a check mark inside the given rectangle.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipticArc" type="" overloaded="no">
-        <autodoc>DrawEllipticArc(self, int x, int y, int w, int h, double start, double end)</autodoc>
-        <docstring>Draws an arc of an ellipse, with the given rectangle defining the
-bounds of the ellipse. The current pen is used for drawing the arc and
-the current brush is used for drawing the pie.
-
-The *start* and *end* parameters specify the start and end of the arc
-relative to the three-o'clock position from the center of the
-rectangle. Angles are specified in degrees (360 is a complete
-circle). Positive values mean counter-clockwise motion. If start is
-equal to end, a complete ellipse will be drawn.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-          <param name="start" type="double" default=""/>
-          <param name="end" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipticArcPointSize" type="" overloaded="no">
-        <autodoc>DrawEllipticArcPointSize(self, Point pt, Size sz, double start, double end)</autodoc>
-        <docstring>Draws an arc of an ellipse, with the given rectangle defining the
-bounds of the ellipse. The current pen is used for drawing the arc and
-the current brush is used for drawing the pie.
-
-The *start* and *end* parameters specify the start and end of the arc
-relative to the three-o'clock position from the center of the
-rectangle. Angles are specified in degrees (360 is a complete
-circle). Positive values mean counter-clockwise motion. If start is
-equal to end, a complete ellipse will be drawn.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-          <param name="start" type="double" default=""/>
-          <param name="end" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPoint" type="" overloaded="no">
-        <autodoc>DrawPoint(self, int x, int y)</autodoc>
-        <docstring>Draws a point using the current pen.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPointPoint" type="" overloaded="no">
-        <autodoc>DrawPointPoint(self, Point pt)</autodoc>
-        <docstring>Draws a point using the current pen.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRectangle" type="" overloaded="no">
-        <autodoc>DrawRectangle(self, int x, int y, int width, int height)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The current pen is used for the outline and the current brush
-for filling the shape.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRectangleRect" type="" overloaded="no">
-        <autodoc>DrawRectangleRect(self, Rect rect)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The current pen is used for the outline and the current brush
-for filling the shape.</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRectanglePointSize" type="" overloaded="no">
-        <autodoc>DrawRectanglePointSize(self, Point pt, Size sz)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The current pen is used for the outline and the current brush
-for filling the shape.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRoundedRectangle" type="" overloaded="no">
-        <autodoc>DrawRoundedRectangle(self, int x, int y, int width, int height, double radius)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The corners are quarter-circles using the given radius. The
-current pen is used for the outline and the current brush for filling
-the shape.
-
-If radius is positive, the value is assumed to be the radius of the
-rounded corner. If radius is negative, the absolute value is assumed
-to be the proportion of the smallest dimension of the rectangle. This
-means that the corner can be a sensible size relative to the size of
-the rectangle, and also avoids the strange effects X produces when the
-corners are too big for the rectangle.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRoundedRectangleRect" type="" overloaded="no">
-        <autodoc>DrawRoundedRectangleRect(self, Rect r, double radius)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The corners are quarter-circles using the given radius. The
-current pen is used for the outline and the current brush for filling
-the shape.
-
-If radius is positive, the value is assumed to be the radius of the
-rounded corner. If radius is negative, the absolute value is assumed
-to be the proportion of the smallest dimension of the rectangle. This
-means that the corner can be a sensible size relative to the size of
-the rectangle, and also avoids the strange effects X produces when the
-corners are too big for the rectangle.</docstring>
-        <paramlist>
-          <param name="r" type="Rect" default=""/>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRoundedRectanglePointSize" type="" overloaded="no">
-        <autodoc>DrawRoundedRectanglePointSize(self, Point pt, Size sz, double radius)</autodoc>
-        <docstring>Draws a rectangle with the given top left corner, and with the given
-size. The corners are quarter-circles using the given radius. The
-current pen is used for the outline and the current brush for filling
-the shape.
-
-If radius is positive, the value is assumed to be the radius of the
-rounded corner. If radius is negative, the absolute value is assumed
-to be the proportion of the smallest dimension of the rectangle. This
-means that the corner can be a sensible size relative to the size of
-the rectangle, and also avoids the strange effects X produces when the
-corners are too big for the rectangle.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawCircle" type="" overloaded="no">
-        <autodoc>DrawCircle(self, int x, int y, int radius)</autodoc>
-        <docstring>Draws a circle with the given center point and radius.  The current
-pen is used for the outline and the current brush for filling the
-shape.
-
-:see: `DrawEllipse`</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="radius" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawCirclePoint" type="" overloaded="no">
-        <autodoc>DrawCirclePoint(self, Point pt, int radius)</autodoc>
-        <docstring>Draws a circle with the given center point and radius.  The current
-pen is used for the outline and the current brush for filling the
-shape.
-
-:see: `DrawEllipse`</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="radius" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipse" type="" overloaded="no">
-        <autodoc>DrawEllipse(self, int x, int y, int width, int height)</autodoc>
-        <docstring>Draws an ellipse contained in the specified rectangle. The current pen
-is used for the outline and the current brush for filling the shape.
-
-:see: `DrawCircle`</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipseRect" type="" overloaded="no">
-        <autodoc>DrawEllipseRect(self, Rect rect)</autodoc>
-        <docstring>Draws an ellipse contained in the specified rectangle. The current pen
-is used for the outline and the current brush for filling the shape.
-
-:see: `DrawCircle`</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipsePointSize" type="" overloaded="no">
-        <autodoc>DrawEllipsePointSize(self, Point pt, Size sz)</autodoc>
-        <docstring>Draws an ellipse contained in the specified rectangle. The current pen
-is used for the outline and the current brush for filling the shape.
-
-:see: `DrawCircle`</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawIcon" type="" overloaded="no">
-        <autodoc>DrawIcon(self, Icon icon, int x, int y)</autodoc>
-        <docstring>Draw an icon on the display (does nothing if the device context is
-PostScript). This can be the simplest way of drawing bitmaps on a
-window.</docstring>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawIconPoint" type="" overloaded="no">
-        <autodoc>DrawIconPoint(self, Icon icon, Point pt)</autodoc>
-        <docstring>Draw an icon on the display (does nothing if the device context is
-PostScript). This can be the simplest way of drawing bitmaps on a
-window.</docstring>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawBitmap" type="" overloaded="no">
-        <autodoc>DrawBitmap(self, Bitmap bmp, int x, int y, bool useMask=False)</autodoc>
-        <docstring>Draw a bitmap on the device context at the specified point. If
-*transparent* is true and the bitmap has a transparency mask, (or
-alpha channel on the platforms that support it) then the bitmap will
-be drawn transparently.
-
-When drawing a mono-bitmap, the current text foreground colour will be
-used to draw the foreground of the bitmap (all bits set to 1), and the
-current text background colour to draw the background (all bits set to
-0).
-
-:see: `SetTextForeground`, `SetTextBackground` and `wx.MemoryDC`</docstring>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="useMask" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="DrawBitmapPoint" type="" overloaded="no">
-        <autodoc>DrawBitmapPoint(self, Bitmap bmp, Point pt, bool useMask=False)</autodoc>
-        <docstring>Draw a bitmap on the device context at the specified point. If
-*transparent* is true and the bitmap has a transparency mask, (or
-alpha channel on the platforms that support it) then the bitmap will
-be drawn transparently.
-
-When drawing a mono-bitmap, the current text foreground colour will be
-used to draw the foreground of the bitmap (all bits set to 1), and the
-current text background colour to draw the background (all bits set to
-0).
-
-:see: `SetTextForeground`, `SetTextBackground` and `wx.MemoryDC`</docstring>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-          <param name="pt" type="Point" default=""/>
-          <param name="useMask" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="DrawText" type="" overloaded="no">
-        <autodoc>DrawText(self, String text, int x, int y)</autodoc>
-        <docstring>Draws a text string at the specified point, using the current text
-font, and the current text foreground and background colours.
-
-The coordinates refer to the top-left corner of the rectangle bounding
-the string. See `GetTextExtent` for how to get the dimensions of a
-text string, which can be used to position the text more precisely.
-
-**NOTE**: under wxGTK the current logical function is used by this
-function but it is ignored by wxMSW. Thus, you should avoid using
-logical functions with this function in portable programs.
-
-:see: `DrawRotatedText`</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawTextPoint" type="" overloaded="no">
-        <autodoc>DrawTextPoint(self, String text, Point pt)</autodoc>
-        <docstring>Draws a text string at the specified point, using the current text
-font, and the current text foreground and background colours.
-
-The coordinates refer to the top-left corner of the rectangle bounding
-the string. See `GetTextExtent` for how to get the dimensions of a
-text string, which can be used to position the text more precisely.
-
-**NOTE**: under wxGTK the current logical function is used by this
-function but it is ignored by wxMSW. Thus, you should avoid using
-logical functions with this function in portable programs.
-
-:see: `DrawRotatedText`</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRotatedText" type="" overloaded="no">
-        <autodoc>DrawRotatedText(self, String text, int x, int y, double angle)</autodoc>
-        <docstring>Draws the text rotated by *angle* degrees, if supported by the platform.
-
-**NOTE**: Under Win9x only TrueType fonts can be drawn by this
-function. In particular, a font different from ``wx.NORMAL_FONT``
-should be used as the it is not normally a TrueType
-font. ``wx.SWISS_FONT`` is an example of a font which is.
-
-:see: `DrawText`</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="angle" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRotatedTextPoint" type="" overloaded="no">
-        <autodoc>DrawRotatedTextPoint(self, String text, Point pt, double angle)</autodoc>
-        <docstring>Draws the text rotated by *angle* degrees, if supported by the platform.
-
-**NOTE**: Under Win9x only TrueType fonts can be drawn by this
-function. In particular, a font different from ``wx.NORMAL_FONT``
-should be used as the it is not normally a TrueType
-font. ``wx.SWISS_FONT`` is an example of a font which is.
-
-:see: `DrawText`</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="pt" type="Point" default=""/>
-          <param name="angle" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Blit" type="bool" overloaded="no">
-        <autodoc>Blit(self, int xdest, int ydest, int width, int height, DC source, 
-    int xsrc, int ysrc, int rop=COPY, bool useMask=False, 
-    int xsrcMask=-1, int ysrcMask=-1) -&gt; bool</autodoc>
-        <docstring>Copy from a source DC to this DC.  Parameters specify the destination
-coordinates, size of area to copy, source DC, source coordinates,
-logical function, whether to use a bitmap mask, and mask source
-position.
-
-    :param xdest:       Destination device context x position.
-    :param ydest:       Destination device context y position.
-    :param width:       Width of source area to be copied.
-    :param height:      Height of source area to be copied.
-    :param source:      Source device context.
-    :param xsrc:        Source device context x position.
-    :param ysrc:        Source device context y position.
-    :param rop:         Logical function to use: see `SetLogicalFunction`.
-    :param useMask:     If true, Blit does a transparent blit using the mask
-                        that is associated with the bitmap selected into the
-                        source device context.
-    :param xsrcMask:    Source x position on the mask. If both xsrcMask and
-                        ysrcMask are -1, xsrc and ysrc will be assumed for
-                        the mask source position.
-    :param ysrcMask:    Source y position on the mask. 
-</docstring>
-        <paramlist>
-          <param name="xdest" type="int" default=""/>
-          <param name="ydest" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="source" type="DC" default=""/>
-          <param name="xsrc" type="int" default=""/>
-          <param name="ysrc" type="int" default=""/>
-          <param name="rop" type="int" default="wxCOPY"/>
-          <param name="useMask" type="bool" default="False"/>
-          <param name="xsrcMask" type="int" default="-1"/>
-          <param name="ysrcMask" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="BlitPointSize" type="bool" overloaded="no">
-        <autodoc>BlitPointSize(self, Point destPt, Size sz, DC source, Point srcPt, int rop=COPY, 
-    bool useMask=False, Point srcPtMask=DefaultPosition) -&gt; bool</autodoc>
-        <docstring>Copy from a source DC to this DC.  Parameters specify the destination
-coordinates, size of area to copy, source DC, source coordinates,
-logical function, whether to use a bitmap mask, and mask source
-position.
-
-    :param destPt:      Destination device context position.
-    :param sz:          Size of source area to be copied.
-    :param source:      Source device context.
-    :param srcPt:       Source device context position.
-    :param rop:         Logical function to use: see `SetLogicalFunction`.
-    :param useMask:     If true, Blit does a transparent blit using the mask
-                        that is associated with the bitmap selected into the
-                        source device context.
-    :param srcPtMask:   Source position on the mask. 
-</docstring>
-        <paramlist>
-          <param name="destPt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-          <param name="source" type="DC" default=""/>
-          <param name="srcPt" type="Point" default=""/>
-          <param name="rop" type="int" default="wxCOPY"/>
-          <param name="useMask" type="bool" default="False"/>
-          <param name="srcPtMask" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRegion" type="" overloaded="no">
-        <autodoc>SetClippingRegion(self, int x, int y, int width, int height)</autodoc>
-        <docstring>Sets the clipping region for this device context to the intersection
-of the given region described by the parameters of this method and the
-previously set clipping region. You should call `DestroyClippingRegion`
-if you want to set the clipping region exactly to the region
-specified.
-
-The clipping region is an area to which drawing is
-restricted. Possible uses for the clipping region are for clipping
-text or for speeding up window redraws when only a known area of the
-screen is damaged.
-
-:see: `DestroyClippingRegion`, `wx.Region`</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRegionPointSize" type="" overloaded="no">
-        <autodoc>SetClippingRegionPointSize(self, Point pt, Size sz)</autodoc>
-        <docstring>Sets the clipping region for this device context to the intersection
-of the given region described by the parameters of this method and the
-previously set clipping region. You should call `DestroyClippingRegion`
-if you want to set the clipping region exactly to the region
-specified.
-
-The clipping region is an area to which drawing is
-restricted. Possible uses for the clipping region are for clipping
-text or for speeding up window redraws when only a known area of the
-screen is damaged.
-
-:see: `DestroyClippingRegion`, `wx.Region`</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRegionAsRegion" type="" overloaded="no">
-        <autodoc>SetClippingRegionAsRegion(self, Region region)</autodoc>
-        <docstring>Sets the clipping region for this device context to the intersection
-of the given region described by the parameters of this method and the
-previously set clipping region. You should call `DestroyClippingRegion`
-if you want to set the clipping region exactly to the region
-specified.
-
-The clipping region is an area to which drawing is
-restricted. Possible uses for the clipping region are for clipping
-text or for speeding up window redraws when only a known area of the
-screen is damaged.
-
-:see: `DestroyClippingRegion`, `wx.Region`</docstring>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRect" type="" overloaded="no">
-        <autodoc>SetClippingRect(self, Rect rect)</autodoc>
-        <docstring>Sets the clipping region for this device context to the intersection
-of the given region described by the parameters of this method and the
-previously set clipping region. You should call `DestroyClippingRegion`
-if you want to set the clipping region exactly to the region
-specified.
-
-The clipping region is an area to which drawing is
-restricted. Possible uses for the clipping region are for clipping
-text or for speeding up window redraws when only a known area of the
-screen is damaged.
-
-:see: `DestroyClippingRegion`, `wx.Region`</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLines" type="" overloaded="no">
-        <autodoc>DrawLines(self, List points, int xoffset=0, int yoffset=0)</autodoc>
-        <docstring>Draws lines using a sequence of `wx.Point` objects, adding the
-optional offset coordinate. The current pen is used for drawing the
-lines.</docstring>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-          <param name="xoffset" type="int" default="0"/>
-          <param name="yoffset" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="DrawPolygon" type="" overloaded="no">
-        <autodoc>DrawPolygon(self, List points, int xoffset=0, int yoffset=0,
-    int fillStyle=ODDEVEN_RULE)</autodoc>
-        <docstring>Draws a filled polygon using a sequence of `wx.Point` objects, adding
-the optional offset coordinate.  The last argument specifies the fill
-rule: ``wx.ODDEVEN_RULE`` (the default) or ``wx.WINDING_RULE``.
-
-The current pen is used for drawing the outline, and the current brush
-for filling the shape. Using a transparent brush suppresses
-filling. Note that wxWidgets automatically closes the first and last
-points.</docstring>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-          <param name="xoffset" type="int" default="0"/>
-          <param name="yoffset" type="int" default="0"/>
-          <param name="fillStyle" type="int" default="wxODDEVEN_RULE"/>
-        </paramlist>
-      </method>
-      <method name="DrawLabel" type="" overloaded="no">
-        <autodoc>DrawLabel(self, String text, Rect rect, int alignment=wxALIGN_LEFT|wxALIGN_TOP, 
-    int indexAccel=-1)</autodoc>
-        <docstring>Draw *text* within the specified rectangle, abiding by the alignment
-flags.  Will additionally emphasize the character at *indexAccel* if
-it is not -1.
-
-:see: `DrawImageLabel`</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="rect" type="Rect" default=""/>
-          <param name="alignment" type="int" default="wxALIGN_LEFT|wxALIGN_TOP"/>
-          <param name="indexAccel" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="DrawImageLabel" type="Rect" overloaded="no">
-        <autodoc>DrawImageLabel(self, String text, Bitmap image, Rect rect, int alignment=wxALIGN_LEFT|wxALIGN_TOP, 
-    int indexAccel=-1) -&gt; Rect</autodoc>
-        <docstring>Draw *text* and an image (which may be ``wx.NullBitmap`` to skip
-drawing it) within the specified rectangle, abiding by the alignment
-flags.  Will additionally emphasize the character at *indexAccel* if
-it is not -1.  Returns the bounding rectangle.</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="Bitmap" default=""/>
-          <param name="rect" type="Rect" default=""/>
-          <param name="alignment" type="int" default="wxALIGN_LEFT|wxALIGN_TOP"/>
-          <param name="indexAccel" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="DrawSpline" type="" overloaded="no">
-        <autodoc>DrawSpline(self, List points)</autodoc>
-        <docstring>Draws a spline between all given control points, (a list of `wx.Point`
-objects) using the current pen. The spline is drawn using a series of
-lines, using an algorithm taken from the X drawing program 'XFIG'.</docstring>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-        <docstring>Clears the device context using the current background brush.</docstring>
-      </method>
-      <method name="StartDoc" type="bool" overloaded="no">
-        <autodoc>StartDoc(self, String message) -&gt; bool</autodoc>
-        <docstring>Starts a document (only relevant when outputting to a
-printer). *Message* is a message to show whilst printing.</docstring>
-        <paramlist>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EndDoc" type="" overloaded="no">
-        <autodoc>EndDoc(self)</autodoc>
-        <docstring>Ends a document (only relevant when outputting to a printer).</docstring>
-      </method>
-      <method name="StartPage" type="" overloaded="no">
-        <autodoc>StartPage(self)</autodoc>
-        <docstring>Starts a document page (only relevant when outputting to a printer).</docstring>
-      </method>
-      <method name="EndPage" type="" overloaded="no">
-        <autodoc>EndPage(self)</autodoc>
-        <docstring>Ends a document page (only relevant when outputting to a printer).</docstring>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <docstring>Sets the current font for the DC. It must be a valid font, in
-particular you should not pass ``wx.NullFont`` to this method.
-
-:see: `wx.Font`</docstring>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPen" type="" overloaded="no">
-        <autodoc>SetPen(self, Pen pen)</autodoc>
-        <docstring>Sets the current pen for the DC.
-
-If the argument is ``wx.NullPen``, the current pen is selected out of the
-device context, and the original pen restored.
-
-:see: `wx.Pen`</docstring>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBrush" type="" overloaded="no">
-        <autodoc>SetBrush(self, Brush brush)</autodoc>
-        <docstring>Sets the current brush for the DC.
-
-If the argument is ``wx.NullBrush``, the current brush is selected out
-of the device context, and the original brush restored, allowing the
-current brush to be destroyed safely.
-
-:see: `wx.Brush`</docstring>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackground" type="" overloaded="no">
-        <autodoc>SetBackground(self, Brush brush)</autodoc>
-        <docstring>Sets the current background brush for the DC.</docstring>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundMode" type="" overloaded="no">
-        <autodoc>SetBackgroundMode(self, int mode)</autodoc>
-        <docstring>*mode* may be one of ``wx.SOLID`` and ``wx.TRANSPARENT``. This setting
-determines whether text will be drawn with a background colour or
-not.</docstring>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPalette" type="" overloaded="no">
-        <autodoc>SetPalette(self, Palette palette)</autodoc>
-        <docstring>If this is a window DC or memory DC, assigns the given palette to the
-window or bitmap associated with the DC. If the argument is
-``wx.NullPalette``, the current palette is selected out of the device
-context, and the original palette restored.
-
-:see: `wx.Palette`</docstring>
-        <paramlist>
-          <param name="palette" type="Palette" default=""/>
-        </paramlist>
-      </method>
-      <method name="DestroyClippingRegion" type="" overloaded="no">
-        <autodoc>DestroyClippingRegion(self)</autodoc>
-        <docstring>Destroys the current clipping region so that none of the DC is
-clipped.
-
-:see: `SetClippingRegion`</docstring>
-      </method>
-      <method name="GetClippingBox" type="" overloaded="no">
-        <autodoc>GetClippingBox() -&gt; (x, y, width, height)</autodoc>
-        <docstring>Gets the rectangle surrounding the current clipping region.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetClippingRect" type="Rect" overloaded="no">
-        <autodoc>GetClippingRect(self) -&gt; Rect</autodoc>
-        <docstring>Gets the rectangle surrounding the current clipping region.</docstring>
-      </method>
-      <method name="GetCharHeight" type="int" overloaded="no">
-        <autodoc>GetCharHeight(self) -&gt; int</autodoc>
-        <docstring>Gets the character height of the currently set font.</docstring>
-      </method>
-      <method name="GetCharWidth" type="int" overloaded="no">
-        <autodoc>GetCharWidth(self) -&gt; int</autodoc>
-        <docstring>Gets the average character width of the currently set font.</docstring>
-      </method>
-      <method name="GetTextExtent" type="" overloaded="no">
-        <autodoc>GetTextExtent(wxString string) -&gt; (width, height)</autodoc>
-        <docstring>Get the width and height of the text using the current font. Only
-works for single line strings.</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFullTextExtent" type="" overloaded="no">
-        <autodoc>GetFullTextExtent(wxString string, Font font=None) -&gt;
-   (width, height, descent, externalLeading)</autodoc>
-        <docstring>Get the width, height, decent and leading of the text using the
-current or specified font. Only works for single line strings.</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="font" type="Font" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="GetMultiLineTextExtent" type="" overloaded="no">
-        <autodoc>GetMultiLineTextExtent(wxString string, Font font=None) -&gt;
-   (width, height, descent, externalLeading)</autodoc>
-        <docstring>Get the width, height, decent and leading of the text using the
-current or specified font. Works for single as well as multi-line
-strings.</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="font" type="Font" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="GetPartialTextExtents" type="wxArrayInt" overloaded="no">
-        <autodoc>GetPartialTextExtents(self, text) -&gt; [widths]</autodoc>
-        <docstring>Returns a list of integers such that each value is the distance in
-pixels from the begining of text to the coresponding character of
-*text*. The generic version simply builds a running total of the widths
-of each character using GetTextExtent, however if the various
-platforms have a native API function that is faster or more accurate
-than the generic implementation then it will be used instead.</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-        <docstring>This gets the horizontal and vertical resolution in device units. It
-can be used to scale graphics to fit the page. For example, if *maxX*
-and *maxY* represent the maximum horizontal and vertical 'pixel' values
-used in your application, the following code will scale the graphic to
-fit on the printer page::
-
-      w, h = dc.GetSize()
-      scaleX = maxX*1.0 / w
-      scaleY = maxY*1.0 / h
-      dc.SetUserScale(min(scaleX,scaleY),min(scaleX,scaleY))
-</docstring>
-      </method>
-      <method name="GetSizeTuple" type="" overloaded="no">
-        <autodoc>GetSizeTuple() -&gt; (width, height)</autodoc>
-        <docstring>This gets the horizontal and vertical resolution in device units. It
-can be used to scale graphics to fit the page. For example, if *maxX*
-and *maxY* represent the maximum horizontal and vertical 'pixel' values
-used in your application, the following code will scale the graphic to
-fit on the printer page::
-
-      w, h = dc.GetSize()
-      scaleX = maxX*1.0 / w
-      scaleY = maxY*1.0 / h
-      dc.SetUserScale(min(scaleX,scaleY),min(scaleX,scaleY))
-</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSizeMM" type="Size" overloaded="no">
-        <autodoc>GetSizeMM(self) -&gt; Size</autodoc>
-        <docstring>Get the DC size in milimeters.</docstring>
-      </method>
-      <method name="GetSizeMMTuple" type="" overloaded="no">
-        <autodoc>GetSizeMMTuple() -&gt; (width, height)</autodoc>
-        <docstring>Get the DC size in milimeters.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeviceToLogicalX" type="int" overloaded="no">
-        <autodoc>DeviceToLogicalX(self, int x) -&gt; int</autodoc>
-        <docstring>Convert device X coordinate to logical coordinate, using the current
-mapping mode.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeviceToLogicalY" type="int" overloaded="no">
-        <autodoc>DeviceToLogicalY(self, int y) -&gt; int</autodoc>
-        <docstring>Converts device Y coordinate to logical coordinate, using the current
-mapping mode.</docstring>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeviceToLogicalXRel" type="int" overloaded="no">
-        <autodoc>DeviceToLogicalXRel(self, int x) -&gt; int</autodoc>
-        <docstring>Convert device X coordinate to relative logical coordinate, using the
-current mapping mode but ignoring the x axis orientation. Use this
-function for converting a width, for example.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeviceToLogicalYRel" type="int" overloaded="no">
-        <autodoc>DeviceToLogicalYRel(self, int y) -&gt; int</autodoc>
-        <docstring>Convert device Y coordinate to relative logical coordinate, using the
-current mapping mode but ignoring the y axis orientation. Use this
-function for converting a height, for example.</docstring>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LogicalToDeviceX" type="int" overloaded="no">
-        <autodoc>LogicalToDeviceX(self, int x) -&gt; int</autodoc>
-        <docstring>Converts logical X coordinate to device coordinate, using the current
-mapping mode.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LogicalToDeviceY" type="int" overloaded="no">
-        <autodoc>LogicalToDeviceY(self, int y) -&gt; int</autodoc>
-        <docstring>Converts logical Y coordinate to device coordinate, using the current
-mapping mode.</docstring>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LogicalToDeviceXRel" type="int" overloaded="no">
-        <autodoc>LogicalToDeviceXRel(self, int x) -&gt; int</autodoc>
-        <docstring>Converts logical X coordinate to relative device coordinate, using the
-current mapping mode but ignoring the x axis orientation. Use this for
-converting a width, for example.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LogicalToDeviceYRel" type="int" overloaded="no">
-        <autodoc>LogicalToDeviceYRel(self, int y) -&gt; int</autodoc>
-        <docstring>Converts logical Y coordinate to relative device coordinate, using the
-current mapping mode but ignoring the y axis orientation. Use this for
-converting a height, for example.</docstring>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanDrawBitmap" type="bool" overloaded="no">
-        <autodoc>CanDrawBitmap(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanGetTextExtent" type="bool" overloaded="no">
-        <autodoc>CanGetTextExtent(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetDepth" type="int" overloaded="no">
-        <autodoc>GetDepth(self) -&gt; int</autodoc>
-        <docstring>Returns the colour depth of the DC.</docstring>
-      </method>
-      <method name="GetPPI" type="Size" overloaded="no">
-        <autodoc>GetPPI(self) -&gt; Size</autodoc>
-        <docstring>Resolution in Pixels per inch</docstring>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the DC is ok to use.</docstring>
-      </method>
-      <method name="GetBackgroundMode" type="int" overloaded="no">
-        <autodoc>GetBackgroundMode(self) -&gt; int</autodoc>
-        <docstring>Returns the current background mode, either ``wx.SOLID`` or
-``wx.TRANSPARENT``.
-
-:see: `SetBackgroundMode`</docstring>
-      </method>
-      <method name="GetBackground" type="Brush" overloaded="no">
-        <autodoc>GetBackground(self) -&gt; Brush</autodoc>
-        <docstring>Gets the brush used for painting the background.
-
-:see: `SetBackground`</docstring>
-      </method>
-      <method name="GetBrush" type="Brush" overloaded="no">
-        <autodoc>GetBrush(self) -&gt; Brush</autodoc>
-        <docstring>Gets the current brush</docstring>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-        <docstring>Gets the current font</docstring>
-      </method>
-      <method name="GetPen" type="Pen" overloaded="no">
-        <autodoc>GetPen(self) -&gt; Pen</autodoc>
-        <docstring>Gets the current pen</docstring>
-      </method>
-      <method name="GetTextBackground" type="Colour" overloaded="no">
-        <autodoc>GetTextBackground(self) -&gt; Colour</autodoc>
-        <docstring>Gets the current text background colour</docstring>
-      </method>
-      <method name="GetTextForeground" type="Colour" overloaded="no">
-        <autodoc>GetTextForeground(self) -&gt; Colour</autodoc>
-        <docstring>Gets the current text foreground colour</docstring>
-      </method>
-      <method name="SetTextForeground" type="" overloaded="no">
-        <autodoc>SetTextForeground(self, Colour colour)</autodoc>
-        <docstring>Sets the current text foreground colour for the DC.</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTextBackground" type="" overloaded="no">
-        <autodoc>SetTextBackground(self, Colour colour)</autodoc>
-        <docstring>Sets the current text background colour for the DC.</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMapMode" type="int" overloaded="no">
-        <autodoc>GetMapMode(self) -&gt; int</autodoc>
-        <docstring>Gets the current *mapping mode* for the device context </docstring>
-      </method>
-      <method name="SetMapMode" type="" overloaded="no">
-        <autodoc>SetMapMode(self, int mode)</autodoc>
-        <docstring>The *mapping mode* of the device context defines the unit of
-measurement used to convert logical units to device units.  The
-mapping mode can be one of the following:
-
-    ================    =============================================
-    wx.MM_TWIPS         Each logical unit is 1/20 of a point, or 1/1440
-                        of an inch.
-    wx.MM_POINTS        Each logical unit is a point, or 1/72 of an inch.
-    wx.MM_METRIC        Each logical unit is 1 mm.
-    wx.MM_LOMETRIC      Each logical unit is 1/10 of a mm.
-    wx.MM_TEXT          Each logical unit is 1 pixel.
-    ================    =============================================
-
-Note that in X, text drawing isn't handled consistently with the
-mapping mode; a font is always specified in point size. However,
-setting the user scale (see `SetUserScale`) scales the text
-appropriately. In Windows, scalable TrueType fonts are always used; in
-X, results depend on availability of fonts, but usually a reasonable
-match is found.
-
-The coordinate origin is always at the top left of the screen/printer.
-
-Drawing to a Windows printer device context uses the current mapping
-mode, but mapping mode is currently ignored for PostScript output.
-</docstring>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUserScale" type="" overloaded="no">
-        <autodoc>GetUserScale(self) -&gt; (xScale, yScale)</autodoc>
-        <docstring>Gets the current user scale factor (set by `SetUserScale`).</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUserScale" type="" overloaded="no">
-        <autodoc>SetUserScale(self, double x, double y)</autodoc>
-        <docstring>Sets the user scaling factor, useful for applications which require
-'zooming'.</docstring>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLogicalScale" type="" overloaded="no">
-        <autodoc>GetLogicalScale() -&gt; (xScale, yScale)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLogicalScale" type="" overloaded="no">
-        <autodoc>SetLogicalScale(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLogicalOrigin" type="Point" overloaded="no">
-        <autodoc>GetLogicalOrigin(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetLogicalOriginTuple" type="" overloaded="no">
-        <autodoc>GetLogicalOriginTuple() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLogicalOrigin" type="" overloaded="no">
-        <autodoc>SetLogicalOrigin(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLogicalOriginPoint" type="" overloaded="no">
-        <autodoc>SetLogicalOriginPoint(self, Point point)</autodoc>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDeviceOrigin" type="Point" overloaded="no">
-        <autodoc>GetDeviceOrigin(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetDeviceOriginTuple" type="" overloaded="no">
-        <autodoc>GetDeviceOriginTuple() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDeviceOrigin" type="" overloaded="no">
-        <autodoc>SetDeviceOrigin(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDeviceOriginPoint" type="" overloaded="no">
-        <autodoc>SetDeviceOriginPoint(self, Point point)</autodoc>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAxisOrientation" type="" overloaded="no">
-        <autodoc>SetAxisOrientation(self, bool xLeftRight, bool yBottomUp)</autodoc>
-        <docstring>Sets the x and y axis orientation (i.e., the direction from lowest to
-highest values on the axis). The default orientation is the natural
-orientation, e.g. x axis from left to right and y axis from bottom up.</docstring>
-        <paramlist>
-          <param name="xLeftRight" type="bool" default=""/>
-          <param name="yBottomUp" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLogicalFunction" type="int" overloaded="no">
-        <autodoc>GetLogicalFunction(self) -&gt; int</autodoc>
-        <docstring>Gets the current logical function (set by `SetLogicalFunction`).</docstring>
-      </method>
-      <method name="SetLogicalFunction" type="" overloaded="no">
-        <autodoc>SetLogicalFunction(self, int function)</autodoc>
-        <docstring>Sets the current logical function for the device context. This
-determines how a source pixel (from a pen or brush colour, or source
-device context if using `Blit`) combines with a destination pixel in
-the current device context.
-
-The possible values and their meaning in terms of source and
-destination pixel values are as follows:
-
-    ================       ==========================
-    wx.AND                 src AND dst
-    wx.AND_INVERT          (NOT src) AND dst
-    wx.AND_REVERSE         src AND (NOT dst)
-    wx.CLEAR               0
-    wx.COPY                src
-    wx.EQUIV               (NOT src) XOR dst
-    wx.INVERT              NOT dst
-    wx.NAND                (NOT src) OR (NOT dst)
-    wx.NOR                 (NOT src) AND (NOT dst)
-    wx.NO_OP               dst
-    wx.OR                  src OR dst
-    wx.OR_INVERT           (NOT src) OR dst
-    wx.OR_REVERSE          src OR (NOT dst)
-    wx.SET                 1
-    wx.SRC_INVERT          NOT src
-    wx.XOR                 src XOR dst
-    ================       ==========================
-
-The default is wx.COPY, which simply draws with the current
-colour. The others combine the current colour and the background using
-a logical operation. wx.INVERT is commonly used for drawing rubber
-bands or moving outlines, since drawing twice reverts to the original
-colour.
-</docstring>
-        <paramlist>
-          <param name="function" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOptimization" type="" overloaded="no">
-        <autodoc>SetOptimization(self, bool optimize)</autodoc>
-        <docstring>If *optimize* is true this function sets optimization mode on. This
-currently means that under X, the device context will not try to set a
-pen or brush property if it is known to be set already. This approach
-can fall down if non-wxWidgets code is using the same device context
-or window, for example when the window is a panel on which the
-windowing system draws panel items. The wxWidgets device context
-'memory' will now be out of step with reality.
-
-Setting optimization off, drawing, then setting it back on again, is a
-trick that must occasionally be employed.</docstring>
-        <paramlist>
-          <param name="optimize" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOptimization" type="bool" overloaded="no">
-        <autodoc>GetOptimization(self) -&gt; bool</autodoc>
-        <docstring>Returns true if device context optimization is on. See
-`SetOptimization` for .</docstring>
-      </method>
-      <method name="CalcBoundingBox" type="" overloaded="no">
-        <autodoc>CalcBoundingBox(self, int x, int y)</autodoc>
-        <docstring>Adds the specified point to the bounding box which can be retrieved
-with `MinX`, `MaxX` and `MinY`, `MaxY` or `GetBoundingBox` functions.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcBoundingBoxPoint" type="" overloaded="no">
-        <autodoc>CalcBoundingBoxPoint(self, Point point)</autodoc>
-        <docstring>Adds the specified point to the bounding box which can be retrieved
-with `MinX`, `MaxX` and `MinY`, `MaxY` or `GetBoundingBox` functions.</docstring>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ResetBoundingBox" type="" overloaded="no">
-        <autodoc>ResetBoundingBox(self)</autodoc>
-        <docstring>Resets the bounding box: after a call to this function, the bounding
-box doesn't contain anything.</docstring>
-      </method>
-      <method name="MinX" type="int" overloaded="no">
-        <autodoc>MinX(self) -&gt; int</autodoc>
-        <docstring>Gets the minimum horizontal extent used in drawing commands so far.</docstring>
-      </method>
-      <method name="MaxX" type="int" overloaded="no">
-        <autodoc>MaxX(self) -&gt; int</autodoc>
-        <docstring>Gets the maximum horizontal extent used in drawing commands so far.</docstring>
-      </method>
-      <method name="MinY" type="int" overloaded="no">
-        <autodoc>MinY(self) -&gt; int</autodoc>
-        <docstring>Gets the minimum vertical extent used in drawing commands so far.</docstring>
-      </method>
-      <method name="MaxY" type="int" overloaded="no">
-        <autodoc>MaxY(self) -&gt; int</autodoc>
-        <docstring>Gets the maximum vertical extent used in drawing commands so far.</docstring>
-      </method>
-      <method name="GetBoundingBox" type="" overloaded="no">
-        <autodoc>GetBoundingBox() -&gt; (x1,y1, x2,y2)</autodoc>
-        <docstring>Returns the min and max points used in drawing commands so far.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawPointList" type="PyObject" overloaded="no">
-        <autodoc>_DrawPointList(self, PyObject pyCoords, PyObject pyPens, PyObject pyBrushes) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="pyCoords" type="PyObject" default=""/>
-          <param name="pyPens" type="PyObject" default=""/>
-          <param name="pyBrushes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawLineList" type="PyObject" overloaded="no">
-        <autodoc>_DrawLineList(self, PyObject pyCoords, PyObject pyPens, PyObject pyBrushes) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="pyCoords" type="PyObject" default=""/>
-          <param name="pyPens" type="PyObject" default=""/>
-          <param name="pyBrushes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawRectangleList" type="PyObject" overloaded="no">
-        <autodoc>_DrawRectangleList(self, PyObject pyCoords, PyObject pyPens, PyObject pyBrushes) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="pyCoords" type="PyObject" default=""/>
-          <param name="pyPens" type="PyObject" default=""/>
-          <param name="pyBrushes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawEllipseList" type="PyObject" overloaded="no">
-        <autodoc>_DrawEllipseList(self, PyObject pyCoords, PyObject pyPens, PyObject pyBrushes) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="pyCoords" type="PyObject" default=""/>
-          <param name="pyPens" type="PyObject" default=""/>
-          <param name="pyBrushes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawPolygonList" type="PyObject" overloaded="no">
-        <autodoc>_DrawPolygonList(self, PyObject pyCoords, PyObject pyPens, PyObject pyBrushes) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="pyCoords" type="PyObject" default=""/>
-          <param name="pyPens" type="PyObject" default=""/>
-          <param name="pyBrushes" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_DrawTextList" type="PyObject" overloaded="no">
-        <autodoc>_DrawTextList(self, PyObject textList, PyObject pyPoints, PyObject foregroundList, 
-    PyObject backgroundList) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="textList" type="PyObject" default=""/>
-          <param name="pyPoints" type="PyObject" default=""/>
-          <param name="foregroundList" type="PyObject" default=""/>
-          <param name="backgroundList" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MemoryDC" oldname="wxMemoryDC" module="_gdi">
-      <docstring>A memory device context provides a means to draw graphics onto a
-bitmap. A bitmap must be selected into the new memory DC before it may
-be used for anything. Typical usage is as follows::
-
-    dc = wx.MemoryDC()
-    dc.SelectObject(bitmap)
-    # draw on the dc usign any of the Draw methods
-    dc.SelectObject(wx.NullBitmap)
-    # the bitmap now contains wahtever was drawn upon it
-
-Note that the memory DC *must* be deleted (or the bitmap selected out
-of it) before a bitmap can be reselected into another memory DC.
-</docstring>
-      <baseclass name="DC"/>
-      <constructor name="MemoryDC" overloaded="no">
-        <autodoc>__init__(self) -&gt; MemoryDC</autodoc>
-        <docstring>Constructs a new memory device context.
-
-Use the Ok member to test whether the constructor was successful in
-creating a usable device context. Don't forget to select a bitmap into
-the DC before drawing on it.
-
-:see: `MemoryDCFromDC`</docstring>
-      </constructor>
-      <constructor name="MemoryDCFromDC" overloaded="no">
-        <autodoc>MemoryDCFromDC(DC oldDC) -&gt; MemoryDC</autodoc>
-        <docstring>Creates a DC that is compatible with the oldDC.</docstring>
-        <paramlist>
-          <param name="oldDC" type="DC" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="SelectObject" type="" overloaded="no">
-        <autodoc>SelectObject(self, Bitmap bitmap)</autodoc>
-        <docstring>Selects the bitmap into the device context, to use as the memory
-bitmap. Selecting the bitmap into a memory DC allows you to draw into
-the DC, and therefore the bitmap, and also to use Blit to copy the
-bitmap to a window.
-
-If the argument is wx.NullBitmap (or some other uninitialised
-`wx.Bitmap`) the current bitmap is selected out of the device context,
-and the original bitmap restored, allowing the current bitmap to be
-destroyed safely.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="BufferedDC" oldname="wxBufferedDC" module="_gdi">
-      <docstring>This simple class provides a simple way to avoid flicker: when drawing
-on it, everything is in fact first drawn on an in-memory buffer (a
-`wx.Bitmap`) and then copied to the screen only once, when this object
-is destroyed.
-
-It can be used in the same way as any other device
-context. wx.BufferedDC itself typically replaces `wx.ClientDC`, if you
-want to use it in your EVT_PAINT handler, you should look at
-`wx.BufferedPaintDC`.
-</docstring>
-      <baseclass name="MemoryDC"/>
-      <constructor name="BufferedDC" overloaded="yes">
-        <docstring>Constructs a buffered DC.
-
-    :param dc: The underlying DC: everything drawn to this object will
-        be flushed to this DC when this object is destroyed. You may
-        pass ``None`` in order to just initialize the buffer, and not
-        flush it.
-
-    :param buffer: If a `wx.Size` object is passed as the 2nd arg then
-        it is the size of the bitmap that will be created internally
-        and used for an implicit buffer. If the 2nd arg is a
-        `wx.Bitmap` then it is the explicit buffer that will be
-        used. Using an explicit buffer is the most efficient solution
-        as the bitmap doesn't have to be recreated each time but it
-        also requires more memory as the bitmap is never freed. The
-        bitmap should have appropriate size, anything drawn outside of
-        its bounds is clipped.
-</docstring>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="buffer" type="Bitmap" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="BufferedDC" overloaded="yes">
-        <autodoc>__init__(self, DC dc, Bitmap buffer) -&gt; BufferedDC
-__init__(self, DC dc, Size area) -&gt; BufferedDC</autodoc>
-        <docstring>Constructs a buffered DC.
-
-    :param dc: The underlying DC: everything drawn to this object will
-        be flushed to this DC when this object is destroyed. You may
-        pass ``None`` in order to just initialize the buffer, and not
-        flush it.
-
-    :param buffer: If a `wx.Size` object is passed as the 2nd arg then
-        it is the size of the bitmap that will be created internally
-        and used for an implicit buffer. If the 2nd arg is a
-        `wx.Bitmap` then it is the explicit buffer that will be
-        used. Using an explicit buffer is the most efficient solution
-        as the bitmap doesn't have to be recreated each time but it
-        also requires more memory as the bitmap is never freed. The
-        bitmap should have appropriate size, anything drawn outside of
-        its bounds is clipped.
-</docstring>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="area" type="Size" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxBufferedDC" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-        <docstring>Copies everything drawn on the DC so far to the underlying DC
-associated with this object, if any.</docstring>
-      </destructor>
-      <method name="UnMask" type="" overloaded="no">
-        <autodoc>UnMask(self)</autodoc>
-        <docstring>Blits the buffer to the dc, and detaches the dc from the buffer (so it
-can be effectively used once only).  This is usually only called in
-the destructor.</docstring>
-      </method>
-    </class>
-    <class name="BufferedPaintDC" oldname="wxBufferedPaintDC" module="_gdi">
-      <docstring>This is a subclass of `wx.BufferedDC` which can be used inside of an
-EVT_PAINT event handler. Just create an object of this class instead
-of `wx.PaintDC` and that's all you have to do to (mostly) avoid
-flicker. The only thing to watch out for is that if you are using this
-class together with `wx.ScrolledWindow`, you probably do **not** want
-to call `wx.Window.PrepareDC` on it as it already does this internally
-for the real underlying `wx.PaintDC`.
-
-If your window is already fully buffered in a `wx.Bitmap` then your
-EVT_PAINT handler can be as simple as just creating a
-``wx.BufferedPaintDC`` as it will `Blit` the buffer to the window
-automatically when it is destroyed.  For example::
-
-    def OnPaint(self, event):
-        dc = wx.BufferedPaintDC(self, self.buffer)
-
-
-</docstring>
-      <baseclass name="BufferedDC"/>
-      <constructor name="BufferedPaintDC" overloaded="no">
-        <autodoc>__init__(self, Window window, Bitmap buffer=NullBitmap) -&gt; BufferedPaintDC</autodoc>
-        <docstring>Create a buffered paint DC.  As with `wx.BufferedDC`, you may either
-provide the bitmap to be used for buffering or let this object create
-one internally (in the latter case, the size of the client part of the
-window is automatically used).
-
-</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="buffer" type="Bitmap" default="wxNullBitmap"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ScreenDC" oldname="wxScreenDC" module="_gdi">
-      <docstring>A wxScreenDC can be used to paint anywhere on the screen. This should
-normally be constructed as a temporary stack object; don't store a
-wxScreenDC object.
-</docstring>
-      <baseclass name="DC"/>
-      <constructor name="ScreenDC" overloaded="no">
-        <autodoc>__init__(self) -&gt; ScreenDC</autodoc>
-        <docstring>A wxScreenDC can be used to paint anywhere on the screen. This should
-normally be constructed as a temporary stack object; don't store a
-wxScreenDC object.
-</docstring>
-      </constructor>
-      <method name="StartDrawingOnTopWin" type="bool" overloaded="no">
-        <autodoc>StartDrawingOnTopWin(self, Window window) -&gt; bool</autodoc>
-        <docstring>Specify that the area of the screen to be drawn upon coincides with
-the given window.
-
-:see: `EndDrawingOnTop`</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="StartDrawingOnTop" type="bool" overloaded="no">
-        <autodoc>StartDrawingOnTop(self, Rect rect=None) -&gt; bool</autodoc>
-        <docstring>Specify that the area is the given rectangle, or the whole screen if
-``None`` is passed.
-
-:see: `EndDrawingOnTop`</docstring>
-        <paramlist>
-          <param name="rect" type="Rect" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="EndDrawingOnTop" type="bool" overloaded="no">
-        <autodoc>EndDrawingOnTop(self) -&gt; bool</autodoc>
-        <docstring>Use this in conjunction with `StartDrawingOnTop` or
-`StartDrawingOnTopWin` to ensure that drawing to the screen occurs on
-top of existing windows. Without this, some window systems (such as X)
-only allow drawing to take place underneath other windows.
-
-You might use this pair of functions when implementing a drag feature,
-for example as in the `wx.SplitterWindow` implementation.
-
-These functions are probably obsolete since the X implementations
-allow drawing directly on the screen now. However, the fact that this
-function allows the screen to be refreshed afterwards may be useful
-to some applications.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ClientDC" oldname="wxClientDC" module="_gdi">
-      <docstring>A wx.ClientDC must be constructed if an application wishes to paint on
-the client area of a window from outside an EVT_PAINT event. This should
-normally be constructed as a temporary stack object; don't store a
-wx.ClientDC object long term.
-
-To draw on a window from within an EVT_PAINT handler, construct a
-`wx.PaintDC` object.
-
-To draw on the whole window including decorations, construct a
-`wx.WindowDC` object (Windows only).
-</docstring>
-      <baseclass name="DC"/>
-      <constructor name="ClientDC" overloaded="no">
-        <autodoc>__init__(self, Window win) -&gt; ClientDC</autodoc>
-        <docstring>Constructor. Pass the window on which you wish to paint.</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PaintDC" oldname="wxPaintDC" module="_gdi">
-      <docstring>A wx.PaintDC must be constructed if an application wishes to paint on
-the client area of a window from within an EVT_PAINT event
-handler. This should normally be constructed as a temporary stack
-object; don't store a wx.PaintDC object. If you have an EVT_PAINT
-handler, you **must** create a wx.PaintDC object within it even if you
-don't actually use it.
-
-Using wx.PaintDC within EVT_PAINT handlers is important because it
-automatically sets the clipping area to the damaged area of the
-window. Attempts to draw outside this area do not appear.
-
-To draw on a window from outside EVT_PAINT handlers, construct a
-`wx.ClientDC` object.
-</docstring>
-      <baseclass name="DC"/>
-      <constructor name="PaintDC" overloaded="no">
-        <autodoc>__init__(self, Window win) -&gt; PaintDC</autodoc>
-        <docstring>Constructor. Pass the window on which you wish to paint.</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="WindowDC" oldname="wxWindowDC" module="_gdi">
-      <docstring>A wx.WindowDC must be constructed if an application wishes to paint on
-the whole area of a window (client and decorations). This should
-normally be constructed as a temporary stack object; don't store a
-wx.WindowDC object.</docstring>
-      <baseclass name="DC"/>
-      <constructor name="WindowDC" overloaded="no">
-        <autodoc>__init__(self, Window win) -&gt; WindowDC</autodoc>
-        <docstring>Constructor. Pass the window on which you wish to paint.</docstring>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MirrorDC" oldname="wxMirrorDC" module="_gdi">
-      <docstring>wx.MirrorDC is a simple wrapper class which is always associated with a
-real `wx.DC` object and either forwards all of its operations to it
-without changes (no mirroring takes place) or exchanges x and y
-coordinates which makes it possible to reuse the same code to draw a
-figure and its mirror -- i.e. reflection related to the diagonal line
-x == y.</docstring>
-      <baseclass name="DC"/>
-      <constructor name="MirrorDC" overloaded="no">
-        <autodoc>__init__(self, DC dc, bool mirror) -&gt; MirrorDC</autodoc>
-        <docstring>Creates a mirrored DC associated with the real *dc*.  Everything drawn
-on the wx.MirrorDC will appear on the *dc*, and will be mirrored if
-*mirror* is True.</docstring>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="mirror" type="bool" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PostScriptDC" oldname="wxPostScriptDC" module="_gdi">
-      <docstring>This is a `wx.DC` that can write to PostScript files on any platform.</docstring>
-      <baseclass name="DC"/>
-      <constructor name="PostScriptDC" overloaded="no">
-        <autodoc>__init__(self, wxPrintData printData) -&gt; PostScriptDC</autodoc>
-        <docstring>Constructs a PostScript printer device context from a `wx.PrintData`
-object.</docstring>
-        <paramlist>
-          <param name="printData" type="wxPrintData" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetPrintData" type="wxPrintData" overloaded="no">
-        <autodoc>GetPrintData(self) -&gt; wxPrintData</autodoc>
-      </method>
-      <method name="SetPrintData" type="" overloaded="no">
-        <autodoc>SetPrintData(self, wxPrintData data)</autodoc>
-        <paramlist>
-          <param name="data" type="wxPrintData" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="SetResolution" type="" overloaded="no">
-        <autodoc>SetResolution(int ppi)</autodoc>
-        <docstring>Set resolution (in pixels per inch) that will be used in PostScript
-output. Default is 720ppi.</docstring>
-        <paramlist>
-          <param name="ppi" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetResolution" type="int" overloaded="no">
-        <autodoc>GetResolution() -&gt; int</autodoc>
-        <docstring>Return resolution used in PostScript output.</docstring>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MetaFile" oldname="wxMetaFile" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="MetaFile" overloaded="no">
-        <autodoc>__init__(self, String filename=EmptyString) -&gt; MetaFile</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="MetaFileDC" oldname="wxMetaFileDC" module="_gdi">
-      <baseclass name="DC"/>
-      <constructor name="MetaFileDC" overloaded="no">
-        <autodoc>__init__(self, String filename=EmptyString, int width=0, int height=0, 
-    String description=EmptyString) -&gt; MetaFileDC</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default="wxPyEmptyString"/>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-          <param name="description" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="PrinterDC" oldname="wxPrinterDC" module="_gdi">
-      <baseclass name="DC"/>
-      <constructor name="PrinterDC" overloaded="no">
-        <autodoc>__init__(self, wxPrintData printData) -&gt; PrinterDC</autodoc>
-        <paramlist>
-          <param name="printData" type="wxPrintData" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ImageList" oldname="wxImageList" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="ImageList" overloaded="no">
-        <autodoc>__init__(self, int width, int height, int mask=True, int initialCount=1) -&gt; ImageList</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="mask" type="int" default="True"/>
-          <param name="initialCount" type="int" default="1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxImageList" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Add" type="int" overloaded="no">
-        <autodoc>Add(self, Bitmap bitmap, Bitmap mask=NullBitmap) -&gt; int</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="mask" type="Bitmap" default="wxNullBitmap"/>
-        </paramlist>
-      </method>
-      <method name="AddWithColourMask" type="int" overloaded="no">
-        <autodoc>AddWithColourMask(self, Bitmap bitmap, Colour maskColour) -&gt; int</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="maskColour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddIcon" type="int" overloaded="no">
-        <autodoc>AddIcon(self, Icon icon) -&gt; int</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-        </paramlist>
-      </method>
-      <method name="Replace" type="bool" overloaded="no">
-        <autodoc>Replace(self, int index, Bitmap bitmap) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="Draw" type="bool" overloaded="no">
-        <autodoc>Draw(self, int index, DC dc, int x, int x, int flags=IMAGELIST_DRAW_NORMAL, 
-    bool solidBackground=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="flags" type="int" default="wxIMAGELIST_DRAW_NORMAL"/>
-          <param name="solidBackground" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetImageCount" type="int" overloaded="no">
-        <autodoc>GetImageCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="Remove" type="bool" overloaded="no">
-        <autodoc>Remove(self, int index) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveAll" type="bool" overloaded="no">
-        <autodoc>RemoveAll(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSize" type="" overloaded="no">
-        <autodoc>GetSize() -&gt; (width,height)</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PenList" oldname="wxPenList" module="_gdi">
-      <baseclass name="Object"/>
-      <method name="AddPen" type="" overloaded="no">
-        <autodoc>AddPen(self, Pen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindOrCreatePen" type="Pen" overloaded="no">
-        <autodoc>FindOrCreatePen(self, Colour colour, int width, int style) -&gt; Pen</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemovePen" type="" overloaded="no">
-        <autodoc>RemovePen(self, Pen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="BrushList" oldname="wxBrushList" module="_gdi">
-      <baseclass name="Object"/>
-      <method name="AddBrush" type="" overloaded="no">
-        <autodoc>AddBrush(self, Brush brush)</autodoc>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindOrCreateBrush" type="Brush" overloaded="no">
-        <autodoc>FindOrCreateBrush(self, Colour colour, int style) -&gt; Brush</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveBrush" type="" overloaded="no">
-        <autodoc>RemoveBrush(self, Brush brush)</autodoc>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="ColourDatabase" oldname="wxColourDatabase" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="ColourDatabase" overloaded="no">
-        <autodoc>__init__(self) -&gt; ColourDatabase</autodoc>
-      </constructor>
-      <destructor name="~wxColourDatabase" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Find" type="Colour" overloaded="no">
-        <autodoc>Find(self, String name) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindName" type="String" overloaded="no">
-        <autodoc>FindName(self, Colour colour) -&gt; String</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddColour" type="" overloaded="no">
-        <autodoc>AddColour(self, String name, Colour colour)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="Append" type="" overloaded="no">
-        <autodoc>Append(self, String name, int red, int green, int blue)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="red" type="int" default=""/>
-          <param name="green" type="int" default=""/>
-          <param name="blue" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FontList" oldname="wxFontList" module="_gdi">
-      <baseclass name="Object"/>
-      <method name="AddFont" type="" overloaded="no">
-        <autodoc>AddFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindOrCreateFont" type="Font" overloaded="no">
-        <autodoc>FindOrCreateFont(self, int point_size, int family, int style, int weight, 
-    bool underline=False, String facename=EmptyString, 
-    int encoding=FONTENCODING_DEFAULT) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="point_size" type="int" default=""/>
-          <param name="family" type="int" default=""/>
-          <param name="style" type="int" default=""/>
-          <param name="weight" type="int" default=""/>
-          <param name="underline" type="bool" default="False"/>
-          <param name="facename" type="String" default="wxPyEmptyString"/>
-          <param name="encoding" type="wxFontEncoding" default="wxFONTENCODING_DEFAULT"/>
-        </paramlist>
-      </method>
-      <method name="RemoveFont" type="" overloaded="no">
-        <autodoc>RemoveFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode> NullColor = NullColour </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Effects" oldname="wxEffects" module="_gdi">
-      <baseclass name="Object"/>
-      <constructor name="Effects" overloaded="no">
-        <autodoc>__init__(self) -&gt; Effects</autodoc>
-      </constructor>
-      <method name="GetHighlightColour" type="Colour" overloaded="no">
-        <autodoc>GetHighlightColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetLightShadow" type="Colour" overloaded="no">
-        <autodoc>GetLightShadow(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFaceColour" type="Colour" overloaded="no">
-        <autodoc>GetFaceColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetMediumShadow" type="Colour" overloaded="no">
-        <autodoc>GetMediumShadow(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetDarkShadow" type="Colour" overloaded="no">
-        <autodoc>GetDarkShadow(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetHighlightColour" type="" overloaded="no">
-        <autodoc>SetHighlightColour(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLightShadow" type="" overloaded="no">
-        <autodoc>SetLightShadow(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFaceColour" type="" overloaded="no">
-        <autodoc>SetFaceColour(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMediumShadow" type="" overloaded="no">
-        <autodoc>SetMediumShadow(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDarkShadow" type="" overloaded="no">
-        <autodoc>SetDarkShadow(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, Colour highlightColour, Colour lightShadow, Colour faceColour, 
-    Colour mediumShadow, Colour darkShadow)</autodoc>
-        <paramlist>
-          <param name="highlightColour" type="Colour" default=""/>
-          <param name="lightShadow" type="Colour" default=""/>
-          <param name="faceColour" type="Colour" default=""/>
-          <param name="mediumShadow" type="Colour" default=""/>
-          <param name="darkShadow" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawSunkenEdge" type="" overloaded="no">
-        <autodoc>DrawSunkenEdge(self, DC dc, Rect rect, int borderSize=1)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="rect" type="Rect" default=""/>
-          <param name="borderSize" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="TileBitmap" type="bool" overloaded="no">
-        <autodoc>TileBitmap(self, Rect rect, DC dc, Bitmap bitmap) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="dc" type="DC" default=""/>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-    </class>
-  </module>
-  <module name="_windows">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Panel" oldname="wxPanel" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="Panel" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxTAB_TRAVERSAL|wxNO_BORDER, 
-    String name=PanelNameStr) -&gt; Panel</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTAB_TRAVERSAL|wxNO_BORDER"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePanel" overloaded="no">
-        <autodoc>PrePanel() -&gt; Panel</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxTAB_TRAVERSAL|wxNO_BORDER, 
-    String name=PanelNameStr) -&gt; bool</autodoc>
-        <docstring>Create the GUI part of the Window for 2-phase creation mode.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTAB_TRAVERSAL|wxNO_BORDER"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </method>
-      <method name="InitDialog" type="" overloaded="no">
-        <autodoc>InitDialog(self)</autodoc>
-        <docstring>Sends an EVT_INIT_DIALOG event, whose handler usually transfers data
-to the dialog via validators.</docstring>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ScrolledWindow" oldname="wxScrolledWindow" module="_windows">
-      <baseclass name="Panel"/>
-      <constructor name="ScrolledWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxHSCROLL|wxVSCROLL, 
-    String name=PanelNameStr) -&gt; ScrolledWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxHSCROLL|wxVSCROLL"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreScrolledWindow" overloaded="no">
-        <autodoc>PreScrolledWindow() -&gt; ScrolledWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxHSCROLL|wxVSCROLL, 
-    String name=PanelNameStr) -&gt; bool</autodoc>
-        <docstring>Create the GUI part of the Window for 2-phase creation mode.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxHSCROLL|wxVSCROLL"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetScrollbars" type="" overloaded="no">
-        <autodoc>SetScrollbars(self, int pixelsPerUnitX, int pixelsPerUnitY, int noUnitsX, 
-    int noUnitsY, int xPos=0, int yPos=0, bool noRefresh=False)</autodoc>
-        <paramlist>
-          <param name="pixelsPerUnitX" type="int" default=""/>
-          <param name="pixelsPerUnitY" type="int" default=""/>
-          <param name="noUnitsX" type="int" default=""/>
-          <param name="noUnitsY" type="int" default=""/>
-          <param name="xPos" type="int" default="0"/>
-          <param name="yPos" type="int" default="0"/>
-          <param name="noRefresh" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Scroll" type="" overloaded="no">
-        <autodoc>Scroll(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScrollPageSize" type="int" overloaded="no">
-        <autodoc>GetScrollPageSize(self, int orient) -&gt; int</autodoc>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetScrollPageSize" type="" overloaded="no">
-        <autodoc>SetScrollPageSize(self, int orient, int pageSize)</autodoc>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-          <param name="pageSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetScrollRate" type="" overloaded="no">
-        <autodoc>SetScrollRate(self, int xstep, int ystep)</autodoc>
-        <paramlist>
-          <param name="xstep" type="int" default=""/>
-          <param name="ystep" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScrollPixelsPerUnit" type="" overloaded="no">
-        <autodoc>GetScrollPixelsPerUnit() -&gt; (xUnit, yUnit)</autodoc>
-        <docstring>Get the size of one logical unit in physical units.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableScrolling" type="" overloaded="no">
-        <autodoc>EnableScrolling(self, bool x_scrolling, bool y_scrolling)</autodoc>
-        <paramlist>
-          <param name="x_scrolling" type="bool" default=""/>
-          <param name="y_scrolling" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetViewStart" type="" overloaded="no">
-        <autodoc>GetViewStart() -&gt; (x,y)</autodoc>
-        <docstring>Get the view start</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetScale" type="" overloaded="no">
-        <autodoc>SetScale(self, double xs, double ys)</autodoc>
-        <paramlist>
-          <param name="xs" type="double" default=""/>
-          <param name="ys" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScaleX" type="double" overloaded="no">
-        <autodoc>GetScaleX(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetScaleY" type="double" overloaded="no">
-        <autodoc>GetScaleY(self) -&gt; double</autodoc>
-      </method>
-      <method name="CalcScrolledPosition" type="Point" overloaded="yes">
-        <docstring>Translate between scrolled and unscrolled coordinates.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcScrolledPosition" type="" overloaded="yes">
-        <autodoc>CalcScrolledPosition(self, Point pt) -&gt; Point
-CalcScrolledPosition(int x, int y) -&gt; (sx, sy)</autodoc>
-        <docstring>Translate between scrolled and unscrolled coordinates.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcUnscrolledPosition" type="Point" overloaded="yes">
-        <docstring>Translate between scrolled and unscrolled coordinates.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcUnscrolledPosition" type="" overloaded="yes">
-        <autodoc>CalcUnscrolledPosition(self, Point pt) -&gt; Point
-CalcUnscrolledPosition(int x, int y) -&gt; (ux, uy)</autodoc>
-        <docstring>Translate between scrolled and unscrolled coordinates.</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustScrollbars" type="" overloaded="no">
-        <autodoc>AdjustScrollbars(self)</autodoc>
-      </method>
-      <method name="CalcScrollInc" type="int" overloaded="no">
-        <autodoc>CalcScrollInc(self, ScrollWinEvent event) -&gt; int</autodoc>
-        <paramlist>
-          <param name="event" type="ScrollWinEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTargetWindow" type="" overloaded="no">
-        <autodoc>SetTargetWindow(self, Window target)</autodoc>
-        <paramlist>
-          <param name="target" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTargetWindow" type="Window" overloaded="no">
-        <autodoc>GetTargetWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="DoPrepareDC" type="" overloaded="no">
-        <autodoc>DoPrepareDC(self, DC dc)</autodoc>
-        <docstring>Normally what is called by `PrepareDC`.</docstring>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TopLevelWindow" oldname="wxTopLevelWindow" module="_windows">
-      <baseclass name="Window"/>
-      <method name="Maximize" type="" overloaded="no">
-        <autodoc>Maximize(self, bool maximize=True)</autodoc>
-        <paramlist>
-          <param name="maximize" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Restore" type="" overloaded="no">
-        <autodoc>Restore(self)</autodoc>
-      </method>
-      <method name="Iconize" type="" overloaded="no">
-        <autodoc>Iconize(self, bool iconize=True)</autodoc>
-        <paramlist>
-          <param name="iconize" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsMaximized" type="bool" overloaded="no">
-        <autodoc>IsMaximized(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsIconized" type="bool" overloaded="no">
-        <autodoc>IsIconized(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetIcon" type="Icon" overloaded="no">
-        <autodoc>GetIcon(self) -&gt; Icon</autodoc>
-      </method>
-      <method name="SetIcon" type="" overloaded="no">
-        <autodoc>SetIcon(self, Icon icon)</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetIcons" type="" overloaded="no">
-        <autodoc>SetIcons(self, wxIconBundle icons)</autodoc>
-        <paramlist>
-          <param name="icons" type="IconBundle" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowFullScreen" type="bool" overloaded="no">
-        <autodoc>ShowFullScreen(self, bool show, long style=FULLSCREEN_ALL) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-          <param name="style" type="long" default="wxFULLSCREEN_ALL"/>
-        </paramlist>
-      </method>
-      <method name="IsFullScreen" type="bool" overloaded="no">
-        <autodoc>IsFullScreen(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetTitle" type="" overloaded="no">
-        <autodoc>SetTitle(self, String title)</autodoc>
-        <docstring>Sets the window's title. Applicable only to frames and dialogs.</docstring>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTitle" type="String" overloaded="no">
-        <autodoc>GetTitle(self) -&gt; String</autodoc>
-        <docstring>Gets the window's title. Applicable only to frames and dialogs.</docstring>
-      </method>
-      <method name="SetShape" type="bool" overloaded="no">
-        <autodoc>SetShape(self, Region region) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="region" type="Region" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Frame" oldname="wxFrame" module="_windows">
-      <baseclass name="TopLevelWindow"/>
-      <constructor name="Frame" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; Frame</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreFrame" overloaded="no">
-        <autodoc>PreFrame() -&gt; Frame</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetClientAreaOrigin" type="Point" overloaded="no">
-        <autodoc>GetClientAreaOrigin(self) -&gt; Point</autodoc>
-        <docstring>Get the origin of the client area of the window relative to the
-window's top left corner (the client area may be shifted because of
-the borders, scrollbars, other decorations...)</docstring>
-      </method>
-      <method name="SendSizeEvent" type="" overloaded="no">
-        <autodoc>SendSizeEvent(self)</autodoc>
-      </method>
-      <method name="SetMenuBar" type="" overloaded="no">
-        <autodoc>SetMenuBar(self, MenuBar menubar)</autodoc>
-        <paramlist>
-          <param name="menubar" type="MenuBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMenuBar" type="MenuBar" overloaded="no">
-        <autodoc>GetMenuBar(self) -&gt; MenuBar</autodoc>
-      </method>
-      <method name="ProcessCommand" type="bool" overloaded="no">
-        <autodoc>ProcessCommand(self, int winid) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateStatusBar" type="wxStatusBar" overloaded="no">
-        <autodoc>CreateStatusBar(self, int number=1, long style=wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, 
-    int winid=0, String name=StatusLineNameStr) -&gt; StatusBar</autodoc>
-        <paramlist>
-          <param name="number" type="int" default="1"/>
-          <param name="style" type="long" default="wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE"/>
-          <param name="winid" type="int" default="0"/>
-          <param name="name" type="String" default="wxPyStatusLineNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetStatusBar" type="wxStatusBar" overloaded="no">
-        <autodoc>GetStatusBar(self) -&gt; StatusBar</autodoc>
-      </method>
-      <method name="SetStatusBar" type="" overloaded="no">
-        <autodoc>SetStatusBar(self, StatusBar statBar)</autodoc>
-        <paramlist>
-          <param name="statBar" type="wxStatusBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStatusText" type="" overloaded="no">
-        <autodoc>SetStatusText(self, String text, int number=0)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetStatusWidths" type="" overloaded="no">
-        <autodoc>SetStatusWidths(self, int widths, int widths_field)</autodoc>
-        <paramlist>
-          <param name="widths" type="int" default=""/>
-          <param name="widths_field" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="PushStatusText" type="" overloaded="no">
-        <autodoc>PushStatusText(self, String text, int number=0)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="PopStatusText" type="" overloaded="no">
-        <autodoc>PopStatusText(self, int number=0)</autodoc>
-        <paramlist>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetStatusBarPane" type="" overloaded="no">
-        <autodoc>SetStatusBarPane(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStatusBarPane" type="int" overloaded="no">
-        <autodoc>GetStatusBarPane(self) -&gt; int</autodoc>
-      </method>
-      <method name="CreateToolBar" type="wxToolBar" overloaded="no">
-        <autodoc>CreateToolBar(self, long style=-1, int winid=-1, String name=ToolBarNameStr) -&gt; wxToolBar</autodoc>
-        <paramlist>
-          <param name="style" type="long" default="-1"/>
-          <param name="winid" type="int" default="-1"/>
-          <param name="name" type="String" default="wxPyToolBarNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetToolBar" type="wxToolBar" overloaded="no">
-        <autodoc>GetToolBar(self) -&gt; wxToolBar</autodoc>
-      </method>
-      <method name="SetToolBar" type="" overloaded="no">
-        <autodoc>SetToolBar(self, wxToolBar toolbar)</autodoc>
-        <paramlist>
-          <param name="toolbar" type="wxToolBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoGiveHelp" type="" overloaded="no">
-        <autodoc>DoGiveHelp(self, String text, bool show)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoMenuUpdates" type="" overloaded="no">
-        <autodoc>DoMenuUpdates(self, Menu menu=None)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default="NULL"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Dialog" oldname="wxDialog" module="_windows">
-      <baseclass name="TopLevelWindow"/>
-      <constructor name="Dialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_DIALOG_STYLE, String name=DialogNameStr) -&gt; Dialog</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_DIALOG_STYLE"/>
-          <param name="name" type="String" default="wxPyDialogNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreDialog" overloaded="no">
-        <autodoc>PreDialog() -&gt; Dialog</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_DIALOG_STYLE, String name=DialogNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_DIALOG_STYLE"/>
-          <param name="name" type="String" default="wxPyDialogNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetReturnCode" type="" overloaded="no">
-        <autodoc>SetReturnCode(self, int returnCode)</autodoc>
-        <paramlist>
-          <param name="returnCode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetReturnCode" type="int" overloaded="no">
-        <autodoc>GetReturnCode(self) -&gt; int</autodoc>
-      </method>
-      <method name="CreateTextSizer" type="Sizer" overloaded="no">
-        <autodoc>CreateTextSizer(self, String message) -&gt; Sizer</autodoc>
-        <paramlist>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateButtonSizer" type="Sizer" overloaded="no">
-        <autodoc>CreateButtonSizer(self, long flags) -&gt; Sizer</autodoc>
-        <paramlist>
-          <param name="flags" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsModal" type="bool" overloaded="no">
-        <autodoc>IsModal(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShowModal" type="int" overloaded="no">
-        <autodoc>ShowModal(self) -&gt; int</autodoc>
-      </method>
-      <method name="EndModal" type="" overloaded="no">
-        <autodoc>EndModal(self, int retCode)</autodoc>
-        <paramlist>
-          <param name="retCode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MiniFrame" oldname="wxMiniFrame" module="_windows">
-      <baseclass name="Frame"/>
-      <constructor name="MiniFrame" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; MiniFrame</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreMiniFrame" overloaded="no">
-        <autodoc>PreMiniFrame() -&gt; MiniFrame</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SplashScreenWindow" oldname="wxSplashScreenWindow" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="SplashScreenWindow" overloaded="no">
-        <autodoc>__init__(self, Bitmap bitmap, Window parent, int id, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=NO_BORDER) -&gt; SplashScreenWindow</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxNO_BORDER"/>
-        </paramlist>
-      </constructor>
-      <method name="SetBitmap" type="" overloaded="no">
-        <autodoc>SetBitmap(self, Bitmap bitmap)</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-    </class>
-    <class name="SplashScreen" oldname="wxSplashScreen" module="_windows">
-      <baseclass name="Frame"/>
-      <constructor name="SplashScreen" overloaded="no">
-        <autodoc>__init__(self, Bitmap bitmap, long splashStyle, int milliseconds, 
-    Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP) -&gt; SplashScreen</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="splashStyle" type="long" default=""/>
-          <param name="milliseconds" type="int" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP"/>
-        </paramlist>
-      </constructor>
-      <method name="GetSplashStyle" type="long" overloaded="no">
-        <autodoc>GetSplashStyle(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetSplashWindow" type="SplashScreenWindow" overloaded="no">
-        <autodoc>GetSplashWindow(self) -&gt; SplashScreenWindow</autodoc>
-      </method>
-      <method name="GetTimeout" type="int" overloaded="no">
-        <autodoc>GetTimeout(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StatusBar" oldname="wxStatusBar" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="StatusBar" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, long style=wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, 
-    String name=StatusLineNameStr) -&gt; StatusBar</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="style" type="long" default="wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE"/>
-          <param name="name" type="String" default="wxPyStatusLineNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStatusBar" overloaded="no">
-        <autodoc>PreStatusBar() -&gt; StatusBar</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, long style=ST_SIZEGRIP, String name=StatusLineNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="style" type="long" default="wxST_SIZEGRIP"/>
-          <param name="name" type="String" default="wxPyStatusLineNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetFieldsCount" type="" overloaded="no">
-        <autodoc>SetFieldsCount(self, int number=1)</autodoc>
-        <paramlist>
-          <param name="number" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="GetFieldsCount" type="int" overloaded="no">
-        <autodoc>GetFieldsCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetStatusText" type="" overloaded="no">
-        <autodoc>SetStatusText(self, String text, int number=0)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetStatusText" type="String" overloaded="no">
-        <autodoc>GetStatusText(self, int number=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="PushStatusText" type="" overloaded="no">
-        <autodoc>PushStatusText(self, String text, int number=0)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="PopStatusText" type="" overloaded="no">
-        <autodoc>PopStatusText(self, int number=0)</autodoc>
-        <paramlist>
-          <param name="number" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetStatusWidths" type="" overloaded="no">
-        <autodoc>SetStatusWidths(self, int widths, int widths_field)</autodoc>
-        <paramlist>
-          <param name="widths" type="int" default=""/>
-          <param name="widths_field" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStatusStyles" type="" overloaded="no">
-        <autodoc>SetStatusStyles(self, int styles, int styles_field)</autodoc>
-        <paramlist>
-          <param name="styles" type="int" default=""/>
-          <param name="styles_field" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFieldRect" type="Rect" overloaded="no">
-        <autodoc>GetFieldRect(self, int i) -&gt; Rect</autodoc>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinHeight" type="" overloaded="no">
-        <autodoc>SetMinHeight(self, int height)</autodoc>
-        <paramlist>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBorderX" type="int" overloaded="no">
-        <autodoc>GetBorderX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetBorderY" type="int" overloaded="no">
-        <autodoc>GetBorderY(self) -&gt; int</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SplitterWindow" oldname="wxSplitterWindow" module="_windows">
-      <docstring>wx.SplitterWindow manages up to two subwindows or panes, with an
-optional vertical or horizontal split which can be used with the mouse
-or programmatically.
-
-Styles
--------
-    ====================   ======================================
-    wx.SP_3D               Draws a 3D effect border and sash.
-    wx.SP_3DSASH           Draws a 3D effect sash.
-    wx.SP_3DBORDER         Synonym for wxSP_BORDER.
-    wx.SP_BORDER           Draws a standard border.
-    wx.SP_NOBORDER         No border (default).
-    wx.SP_NO_XP_THEME      Under Windows XP, switches off the
-                           attempt to draw the splitter
-                           using Windows XP theming, so the
-                           borders and sash will take on the
-                           pre-XP look.
-    wx.SP_PERMIT_UNSPLIT   Always allow to unsplit, even with
-                           the minimum pane size other than zero.
-    wx.SP_LIVE_UPDATE      Don't draw XOR line but resize the
-                           child windows immediately.
-    ====================   ======================================
-
-Events
-------
-    ==============================  =======================================
-    EVT_SPLITTER_SASH_POS_CHANGING  The sash position is in the
-                                    process of being changed. May be
-                                    used to modify the position of
-                                    the tracking bar to properly
-                                    reflect the position that would
-                                    be set if the drag were to be
-                                    completed at this point.
-
-    EVT_SPLITTER_SASH_POS_CHANGED
-                                    The sash position was
-                                    changed. May be used to modify
-                                    the sash position before it is
-                                    set, or to prevent the change
-                                    from taking place. 
-
-    EVT_SPLITTER_UNSPLIT            The splitter has been just unsplit.
-
-    EVT_SPLITTER_DCLICK             The sash was double clicked. The
-                                    default behaviour is to unsplit
-                                    the window when this happens
-                                    (unless the minimum pane size has
-                                    been set to a value greater than
-                                    zero.)
-    ==============================  =======================================
-
-</docstring>
-      <baseclass name="Window"/>
-      <constructor name="SplitterWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SP_3D, String name=SplitterNameStr) -&gt; SplitterWindow</autodoc>
-        <docstring>Constructor.  Creates and shows a SplitterWindow.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_3D"/>
-          <param name="name" type="String" default="wxPySplitterNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSplitterWindow" overloaded="no">
-        <autodoc>PreSplitterWindow() -&gt; SplitterWindow</autodoc>
-        <docstring>Precreate a SplitterWindow for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SP_3D, String name=SplitterNameStr) -&gt; bool</autodoc>
-        <docstring>Create the GUI part of the SplitterWindow for the 2-phase create.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_3D"/>
-          <param name="name" type="String" default="wxPySplitterNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetWindow1" type="Window" overloaded="no">
-        <autodoc>GetWindow1(self) -&gt; Window</autodoc>
-        <docstring>Gets the only or left/top pane.</docstring>
-      </method>
-      <method name="GetWindow2" type="Window" overloaded="no">
-        <autodoc>GetWindow2(self) -&gt; Window</autodoc>
-        <docstring>Gets the right/bottom pane.</docstring>
-      </method>
-      <method name="SetSplitMode" type="" overloaded="no">
-        <autodoc>SetSplitMode(self, int mode)</autodoc>
-        <docstring>Sets the split mode.  The mode can be wx.SPLIT_VERTICAL or
-wx.SPLIT_HORIZONTAL.  This only sets the internal variable; does not
-update the display.</docstring>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSplitMode" type="wxSplitMode" overloaded="no">
-        <autodoc>GetSplitMode(self) -&gt; int</autodoc>
-        <docstring>Gets the split mode</docstring>
-      </method>
-      <method name="Initialize" type="" overloaded="no">
-        <autodoc>Initialize(self, Window window)</autodoc>
-        <docstring>Initializes the splitter window to have one pane.  This should be
-called if you wish to initially view only a single pane in the
-splitter window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="SplitVertically" type="bool" overloaded="no">
-        <autodoc>SplitVertically(self, Window window1, Window window2, int sashPosition=0) -&gt; bool</autodoc>
-        <docstring>Initializes the left and right panes of the splitter window.
-    :param window1:       The left pane.
-    :param window2:       The right pane.
-    :param sashPosition:  The initial position of the sash. If this
-                  value is positive, it specifies the size of the left
-                  pane. If it is negative, it is absolute value gives
-                  the size of the right pane. Finally, specify 0
-                  (default) to choose the default position (half of
-                  the total window width).
-
-Returns True if successful, False otherwise (the window was already
-split).
-
-SplitVertically should be called if you wish to initially view two
-panes. It can also be called at any subsequent time, but the
-application should check that the window is not currently split using
-IsSplit.
-</docstring>
-        <paramlist>
-          <param name="window1" type="Window" default=""/>
-          <param name="window2" type="Window" default=""/>
-          <param name="sashPosition" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SplitHorizontally" type="bool" overloaded="no">
-        <autodoc>SplitHorizontally(self, Window window1, Window window2, int sashPosition=0) -&gt; bool</autodoc>
-        <docstring>Initializes the top and bottom panes of the splitter window.
-    :param window1:       The top pane.
-    :param window2:       The bottom pane.
-    :param sashPosition:  The initial position of the sash. If this
-                  value is positive, it specifies the size of the
-                  upper pane. If it is negative, it is absolute value
-                  gives the size of the lower pane. Finally, specify 0
-                  (default) to choose the default position (half of
-                  the total window height).
-
-Returns True if successful, False otherwise (the window was already
-split).
-
-SplitHorizontally should be called if you wish to initially view two
-panes. It can also be called at any subsequent time, but the
-application should check that the window is not currently split using
-IsSplit.
-</docstring>
-        <paramlist>
-          <param name="window1" type="Window" default=""/>
-          <param name="window2" type="Window" default=""/>
-          <param name="sashPosition" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Unsplit" type="bool" overloaded="no">
-        <autodoc>Unsplit(self, Window toRemove=None) -&gt; bool</autodoc>
-        <docstring>Unsplits the window.  Pass the pane to remove, or None to remove the
-right or bottom pane.  Returns True if successful, False otherwise (the
-window was not split).
-
-This function will not actually delete the pane being
-removed; it sends EVT_SPLITTER_UNSPLIT which can be handled
-for the desired behaviour. By default, the pane being
-removed is only hidden.</docstring>
-        <paramlist>
-          <param name="toRemove" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="ReplaceWindow" type="bool" overloaded="no">
-        <autodoc>ReplaceWindow(self, Window winOld, Window winNew) -&gt; bool</autodoc>
-        <docstring>This function replaces one of the windows managed by the
-SplitterWindow with another one. It is in general better to use it
-instead of calling Unsplit() and then resplitting the window back
-because it will provoke much less flicker. It is valid to call this
-function whether the splitter has two windows or only one.
-
-Both parameters should be non-None and winOld must specify one of the
-windows managed by the splitter. If the parameters are incorrect or
-the window couldn't be replaced, False is returned. Otherwise the
-function will return True, but please notice that it will not Destroy
-the replaced window and you may wish to do it yourself.</docstring>
-        <paramlist>
-          <param name="winOld" type="Window" default=""/>
-          <param name="winNew" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="UpdateSize" type="" overloaded="no">
-        <autodoc>UpdateSize(self)</autodoc>
-        <docstring>Causes any pending sizing of the sash and child panes to take place
-immediately.
-
-Such resizing normally takes place in idle time, in order to wait for
-layout to be completed. However, this can cause unacceptable flicker
-as the panes are resized after the window has been shown. To work
-around this, you can perform window layout (for example by sending a
-size event to the parent window), and then call this function, before
-showing the top-level window.</docstring>
-      </method>
-      <method name="IsSplit" type="bool" overloaded="no">
-        <autodoc>IsSplit(self) -&gt; bool</autodoc>
-        <docstring>Is the window split?</docstring>
-      </method>
-      <method name="SetSashSize" type="" overloaded="no">
-        <autodoc>SetSashSize(self, int width)</autodoc>
-        <docstring>Sets the sash size</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBorderSize" type="" overloaded="no">
-        <autodoc>SetBorderSize(self, int width)</autodoc>
-        <docstring>Sets the border size</docstring>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSashSize" type="int" overloaded="no">
-        <autodoc>GetSashSize(self) -&gt; int</autodoc>
-        <docstring>Gets the sash size</docstring>
-      </method>
-      <method name="GetBorderSize" type="int" overloaded="no">
-        <autodoc>GetBorderSize(self) -&gt; int</autodoc>
-        <docstring>Gets the border size</docstring>
-      </method>
-      <method name="SetSashPosition" type="" overloaded="no">
-        <autodoc>SetSashPosition(self, int position, bool redraw=True)</autodoc>
-        <docstring>Sets the sash position, in pixels.  If redraw is Ttrue then the panes
-are resized and the sash and border are redrawn.</docstring>
-        <paramlist>
-          <param name="position" type="int" default=""/>
-          <param name="redraw" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetSashPosition" type="int" overloaded="no">
-        <autodoc>GetSashPosition(self) -&gt; int</autodoc>
-        <docstring>Returns the surrent sash position.</docstring>
-      </method>
-      <method name="SetMinimumPaneSize" type="" overloaded="no">
-        <autodoc>SetMinimumPaneSize(self, int min)</autodoc>
-        <docstring>Sets the minimum pane size in pixels.
-
-The default minimum pane size is zero, which means that either pane
-can be reduced to zero by dragging the sash, thus removing one of the
-panes. To prevent this behaviour (and veto out-of-range sash
-dragging), set a minimum size, for example 20 pixels. If the
-wx.SP_PERMIT_UNSPLIT style is used when a splitter window is created,
-the window may be unsplit even if minimum size is non-zero.</docstring>
-        <paramlist>
-          <param name="min" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMinimumPaneSize" type="int" overloaded="no">
-        <autodoc>GetMinimumPaneSize(self) -&gt; int</autodoc>
-        <docstring>Gets the minimum pane size in pixels.</docstring>
-      </method>
-      <method name="SashHitTest" type="bool" overloaded="no">
-        <autodoc>SashHitTest(self, int x, int y, int tolerance=5) -&gt; bool</autodoc>
-        <docstring>Tests for x, y over the sash</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="tolerance" type="int" default="5"/>
-        </paramlist>
-      </method>
-      <method name="SizeWindows" type="" overloaded="no">
-        <autodoc>SizeWindows(self)</autodoc>
-        <docstring>Resizes subwindows</docstring>
-      </method>
-      <method name="SetNeedUpdating" type="" overloaded="no">
-        <autodoc>SetNeedUpdating(self, bool needUpdating)</autodoc>
-        <paramlist>
-          <param name="needUpdating" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNeedUpdating" type="bool" overloaded="no">
-        <autodoc>GetNeedUpdating(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="SplitterEvent" oldname="wxSplitterEvent" module="_windows">
-      <docstring>This class represents the events generated by a splitter control.</docstring>
-      <baseclass name="NotifyEvent"/>
-      <constructor name="SplitterEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, SplitterWindow splitter=(wxSplitterWindow *) NULL) -&gt; SplitterEvent</autodoc>
-        <docstring>This class represents the events generated by a splitter control.</docstring>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="splitter" type="SplitterWindow" default="(wxSplitterWindow *) NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="SetSashPosition" type="" overloaded="no">
-        <autodoc>SetSashPosition(self, int pos)</autodoc>
-        <docstring>This funciton is only meaningful during EVT_SPLITTER_SASH_POS_CHANGING
-and EVT_SPLITTER_SASH_POS_CHANGED events.  In the case of _CHANGED
-events, sets the the new sash position. In the case of _CHANGING
-events, sets the new tracking bar position so visual feedback during
-dragging will represent that change that will actually take place. Set
-to -1 from the event handler code to prevent repositioning.</docstring>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSashPosition" type="int" overloaded="no">
-        <autodoc>GetSashPosition(self) -&gt; int</autodoc>
-        <docstring>Returns the new sash position while in EVT_SPLITTER_SASH_POS_CHANGING
-and EVT_SPLITTER_SASH_POS_CHANGED events.</docstring>
-      </method>
-      <method name="GetWindowBeingRemoved" type="Window" overloaded="no">
-        <autodoc>GetWindowBeingRemoved(self) -&gt; Window</autodoc>
-        <docstring>Returns a pointer to the window being removed when a splitter window
-is unsplit.</docstring>
-      </method>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-        <docstring>Returns the x coordinate of the double-click point in a
-EVT_SPLITTER_DCLICK event.</docstring>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-        <docstring>Returns the y coordinate of the double-click point in a
-EVT_SPLITTER_DCLICK event.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-EVT_SPLITTER_SASH_POS_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 1 )
-EVT_SPLITTER_SASH_POS_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 1 )
-EVT_SPLITTER_DOUBLECLICKED = wx.PyEventBinder( wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 1 )
-EVT_SPLITTER_UNSPLIT = wx.PyEventBinder( wxEVT_COMMAND_SPLITTER_UNSPLIT, 1 )
-EVT_SPLITTER_DCLICK = EVT_SPLITTER_DOUBLECLICKED
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SashWindow" oldname="wxSashWindow" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="SashWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxSW_3D, 
-    String name=SashNameStr) -&gt; SashWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxSW_3D"/>
-          <param name="name" type="String" default="wxPySashNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSashWindow" overloaded="no">
-        <autodoc>PreSashWindow() -&gt; SashWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxSW_3D, 
-    String name=SashNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxSW_3D"/>
-          <param name="name" type="String" default="wxPySashNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetSashVisible" type="" overloaded="no">
-        <autodoc>SetSashVisible(self, int edge, bool sash)</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-          <param name="sash" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSashVisible" type="bool" overloaded="no">
-        <autodoc>GetSashVisible(self, int edge) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSashBorder" type="" overloaded="no">
-        <autodoc>SetSashBorder(self, int edge, bool border)</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-          <param name="border" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasBorder" type="bool" overloaded="no">
-        <autodoc>HasBorder(self, int edge) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdgeMargin" type="int" overloaded="no">
-        <autodoc>GetEdgeMargin(self, int edge) -&gt; int</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultBorderSize" type="" overloaded="no">
-        <autodoc>SetDefaultBorderSize(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultBorderSize" type="int" overloaded="no">
-        <autodoc>GetDefaultBorderSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetExtraBorderSize" type="" overloaded="no">
-        <autodoc>SetExtraBorderSize(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetExtraBorderSize" type="int" overloaded="no">
-        <autodoc>GetExtraBorderSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMinimumSizeX" type="" overloaded="no">
-        <autodoc>SetMinimumSizeX(self, int min)</autodoc>
-        <paramlist>
-          <param name="min" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinimumSizeY" type="" overloaded="no">
-        <autodoc>SetMinimumSizeY(self, int min)</autodoc>
-        <paramlist>
-          <param name="min" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMinimumSizeX" type="int" overloaded="no">
-        <autodoc>GetMinimumSizeX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMinimumSizeY" type="int" overloaded="no">
-        <autodoc>GetMinimumSizeY(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMaximumSizeX" type="" overloaded="no">
-        <autodoc>SetMaximumSizeX(self, int max)</autodoc>
-        <paramlist>
-          <param name="max" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaximumSizeY" type="" overloaded="no">
-        <autodoc>SetMaximumSizeY(self, int max)</autodoc>
-        <paramlist>
-          <param name="max" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaximumSizeX" type="int" overloaded="no">
-        <autodoc>GetMaximumSizeX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaximumSizeY" type="int" overloaded="no">
-        <autodoc>GetMaximumSizeY(self) -&gt; int</autodoc>
-      </method>
-      <method name="SashHitTest" type="wxSashEdgePosition" overloaded="no">
-        <autodoc>SashHitTest(self, int x, int y, int tolerance=2) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="tolerance" type="int" default="2"/>
-        </paramlist>
-      </method>
-      <method name="SizeWindows" type="" overloaded="no">
-        <autodoc>SizeWindows(self)</autodoc>
-      </method>
-    </class>
-    <class name="SashEvent" oldname="wxSashEvent" module="_windows">
-      <baseclass name="CommandEvent"/>
-      <constructor name="SashEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0, int edge=SASH_NONE) -&gt; SashEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-          <param name="edge" type="wxSashEdgePosition" default="wxSASH_NONE"/>
-        </paramlist>
-      </constructor>
-      <method name="SetEdge" type="" overloaded="no">
-        <autodoc>SetEdge(self, int edge)</autodoc>
-        <paramlist>
-          <param name="edge" type="wxSashEdgePosition" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdge" type="wxSashEdgePosition" overloaded="no">
-        <autodoc>GetEdge(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetDragRect" type="" overloaded="no">
-        <autodoc>SetDragRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDragRect" type="Rect" overloaded="no">
-        <autodoc>GetDragRect(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="SetDragStatus" type="" overloaded="no">
-        <autodoc>SetDragStatus(self, int status)</autodoc>
-        <paramlist>
-          <param name="status" type="wxSashDragStatus" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDragStatus" type="wxSashDragStatus" overloaded="no">
-        <autodoc>GetDragStatus(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-    EVT_SASH_DRAGGED = wx.PyEventBinder( wxEVT_SASH_DRAGGED, 1 )
-    EVT_SASH_DRAGGED_RANGE = wx.PyEventBinder( wxEVT_SASH_DRAGGED, 2 )
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="QueryLayoutInfoEvent" oldname="wxQueryLayoutInfoEvent" module="_windows">
-      <baseclass name="Event"/>
-      <constructor name="QueryLayoutInfoEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0) -&gt; QueryLayoutInfoEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetRequestedLength" type="" overloaded="no">
-        <autodoc>SetRequestedLength(self, int length)</autodoc>
-        <paramlist>
-          <param name="length" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRequestedLength" type="int" overloaded="no">
-        <autodoc>GetRequestedLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orient)</autodoc>
-        <paramlist>
-          <param name="orient" type="wxLayoutOrientation" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOrientation" type="wxLayoutOrientation" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int align)</autodoc>
-        <paramlist>
-          <param name="align" type="wxLayoutAlignment" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignment" type="wxLayoutAlignment" overloaded="no">
-        <autodoc>GetAlignment(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="CalculateLayoutEvent" oldname="wxCalculateLayoutEvent" module="_windows">
-      <baseclass name="Event"/>
-      <constructor name="CalculateLayoutEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0) -&gt; CalculateLayoutEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRect" type="" overloaded="no">
-        <autodoc>SetRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRect" type="Rect" overloaded="no">
-        <autodoc>GetRect(self) -&gt; Rect</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-    EVT_QUERY_LAYOUT_INFO = wx.PyEventBinder( wxEVT_QUERY_LAYOUT_INFO )
-    EVT_CALCULATE_LAYOUT = wx.PyEventBinder( wxEVT_CALCULATE_LAYOUT )
-</pythoncode>
-    <class name="SashLayoutWindow" oldname="wxSashLayoutWindow" module="_windows">
-      <baseclass name="SashWindow"/>
-      <constructor name="SashLayoutWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxSW_3D, 
-    String name=SashLayoutNameStr) -&gt; SashLayoutWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxSW_3D"/>
-          <param name="name" type="String" default="wxPySashLayoutNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSashLayoutWindow" overloaded="no">
-        <autodoc>PreSashLayoutWindow() -&gt; SashLayoutWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxSW_3D, 
-    String name=SashLayoutNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxSW_3D"/>
-          <param name="name" type="String" default="wxPySashLayoutNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetAlignment" type="wxLayoutAlignment" overloaded="no">
-        <autodoc>GetAlignment(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetOrientation" type="wxLayoutOrientation" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int alignment)</autodoc>
-        <paramlist>
-          <param name="alignment" type="wxLayoutAlignment" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultSize" type="" overloaded="no">
-        <autodoc>SetDefaultSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orientation)</autodoc>
-        <paramlist>
-          <param name="orientation" type="wxLayoutOrientation" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="LayoutAlgorithm" oldname="wxLayoutAlgorithm" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="LayoutAlgorithm" overloaded="no">
-        <autodoc>__init__(self) -&gt; LayoutAlgorithm</autodoc>
-      </constructor>
-      <destructor name="~wxLayoutAlgorithm" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="LayoutMDIFrame" type="bool" overloaded="no">
-        <autodoc>LayoutMDIFrame(self, MDIParentFrame frame, Rect rect=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="frame" type="wxMDIParentFrame" default=""/>
-          <param name="rect" type="Rect" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="LayoutFrame" type="bool" overloaded="no">
-        <autodoc>LayoutFrame(self, Frame frame, Window mainWindow=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="frame" type="Frame" default=""/>
-          <param name="mainWindow" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="LayoutWindow" type="bool" overloaded="no">
-        <autodoc>LayoutWindow(self, Window parent, Window mainWindow=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="mainWindow" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PopupWindow" oldname="wxPopupWindow" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="PopupWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int flags=BORDER_NONE) -&gt; PopupWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="flags" type="int" default="wxBORDER_NONE"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePopupWindow" overloaded="no">
-        <autodoc>PrePopupWindow() -&gt; PopupWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int flags=BORDER_NONE) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="flags" type="int" default="wxBORDER_NONE"/>
-        </paramlist>
-      </method>
-      <method name="Position" type="" overloaded="no">
-        <autodoc>Position(self, Point ptOrigin, Size size)</autodoc>
-        <paramlist>
-          <param name="ptOrigin" type="Point" default=""/>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PopupTransientWindow" oldname="wxPyPopupTransientWindow" module="_windows">
-      <baseclass name="PopupWindow"/>
-      <constructor name="wxPyPopupTransientWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int style=BORDER_NONE) -&gt; PopupTransientWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="style" type="int" default="wxBORDER_NONE"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePopupTransientWindow" overloaded="no">
-        <autodoc>PrePopupTransientWindow() -&gt; PopupTransientWindow</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Popup" type="" overloaded="no">
-        <autodoc>Popup(self, Window focus=None)</autodoc>
-        <paramlist>
-          <param name="focus" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Dismiss" type="" overloaded="no">
-        <autodoc>Dismiss(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TipWindow" oldname="wxTipWindow" module="_windows">
-      <baseclass name="PopupTransientWindow"/>
-      <constructor name="TipWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, String text, int maxLength=100, Rect rectBound=None) -&gt; TipWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="maxLength" type="int" default="100"/>
-          <param name="rectBound" type="Rect" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="SetBoundingRect" type="" overloaded="no">
-        <autodoc>SetBoundingRect(self, Rect rectBound)</autodoc>
-        <paramlist>
-          <param name="rectBound" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="Close" type="" overloaded="no">
-        <autodoc>Close(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="VScrolledWindow" oldname="wxPyVScrolledWindow" module="_windows">
-      <baseclass name="Panel"/>
-      <constructor name="wxPyVScrolledWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; VScrolledWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreVScrolledWindow" overloaded="no">
-        <autodoc>PreVScrolledWindow() -&gt; VScrolledWindow</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetLineCount" type="" overloaded="no">
-        <autodoc>SetLineCount(self, size_t count)</autodoc>
-        <paramlist>
-          <param name="count" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollToLine" type="bool" overloaded="no">
-        <autodoc>ScrollToLine(self, size_t line) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="line" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollLines" type="bool" overloaded="no">
-        <autodoc>ScrollLines(self, int lines) -&gt; bool</autodoc>
-        <docstring>If the platform and window class supports it, scrolls the window by
-the given number of lines down, if lines is positive, or up if lines
-is negative.  Returns True if the window was scrolled, False if it was
-already on top/bottom and nothing was done.</docstring>
-        <paramlist>
-          <param name="lines" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollPages" type="bool" overloaded="no">
-        <autodoc>ScrollPages(self, int pages) -&gt; bool</autodoc>
-        <docstring>If the platform and window class supports it, scrolls the window by
-the given number of pages down, if pages is positive, or up if pages
-is negative.  Returns True if the window was scrolled, False if it was
-already on top/bottom and nothing was done.</docstring>
-        <paramlist>
-          <param name="pages" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="RefreshLine" type="" overloaded="no">
-        <autodoc>RefreshLine(self, size_t line)</autodoc>
-        <paramlist>
-          <param name="line" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="RefreshLines" type="" overloaded="no">
-        <autodoc>RefreshLines(self, size_t from, size_t to)</autodoc>
-        <paramlist>
-          <param name="from" type="size_t" default=""/>
-          <param name="to" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTestXY" type="int" overloaded="no">
-        <autodoc>HitTestXY(self, int x, int y) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="int" overloaded="no">
-        <autodoc>HitTest(self, Point pt) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="RefreshAll" type="" overloaded="no">
-        <autodoc>RefreshAll(self)</autodoc>
-      </method>
-      <method name="GetLineCount" type="size_t" overloaded="no">
-        <autodoc>GetLineCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetFirstVisibleLine" type="size_t" overloaded="no">
-        <autodoc>GetFirstVisibleLine(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetLastVisibleLine" type="size_t" overloaded="no">
-        <autodoc>GetLastVisibleLine(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="IsVisible" type="bool" overloaded="no">
-        <autodoc>IsVisible(self, size_t line) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="line" type="size_t" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="VListBox" oldname="wxPyVListBox" module="_windows">
-      <baseclass name="VScrolledWindow"/>
-      <constructor name="wxPyVListBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=VListBoxNameStr) -&gt; VListBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyVListBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreVListBox" overloaded="no">
-        <autodoc>PreVListBox() -&gt; VListBox</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=VListBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyVListBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetItemCount" type="size_t" overloaded="no">
-        <autodoc>GetItemCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="HasMultipleSelection" type="bool" overloaded="no">
-        <autodoc>HasMultipleSelection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsCurrent" type="bool" overloaded="no">
-        <autodoc>IsCurrent(self, size_t item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSelected" type="bool" overloaded="no">
-        <autodoc>IsSelected(self, size_t item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedCount" type="size_t" overloaded="no">
-        <autodoc>GetSelectedCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetFirstSelected" type="PyObject" overloaded="no">
-        <autodoc>GetFirstSelected(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetNextSelected" type="PyObject" overloaded="no">
-        <autodoc>GetNextSelected(self, unsigned long cookie) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="cookie" type="unsigned long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMargins" type="Point" overloaded="no">
-        <autodoc>GetMargins(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetSelectionBackground" type="Colour" overloaded="no">
-        <autodoc>GetSelectionBackground(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetItemCount" type="" overloaded="no">
-        <autodoc>SetItemCount(self, size_t count)</autodoc>
-        <paramlist>
-          <param name="count" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int selection)</autodoc>
-        <paramlist>
-          <param name="selection" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Select" type="bool" overloaded="no">
-        <autodoc>Select(self, size_t item, bool select=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="size_t" default=""/>
-          <param name="select" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SelectRange" type="bool" overloaded="no">
-        <autodoc>SelectRange(self, size_t from, size_t to) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="from" type="size_t" default=""/>
-          <param name="to" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="Toggle" type="" overloaded="no">
-        <autodoc>Toggle(self, size_t item)</autodoc>
-        <paramlist>
-          <param name="item" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="bool" overloaded="no">
-        <autodoc>SelectAll(self) -&gt; bool</autodoc>
-      </method>
-      <method name="DeselectAll" type="bool" overloaded="no">
-        <autodoc>DeselectAll(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginsXY" type="" overloaded="no">
-        <autodoc>SetMarginsXY(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelectionBackground" type="" overloaded="no">
-        <autodoc>SetSelectionBackground(self, Colour col)</autodoc>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlListBox" oldname="wxPyHtmlListBox" module="_windows">
-      <baseclass name="VListBox"/>
-      <constructor name="wxPyHtmlListBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=VListBoxNameStr) -&gt; HtmlListBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyVListBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreHtmlListBox" overloaded="no">
-        <autodoc>PreHtmlListBox() -&gt; HtmlListBox</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=VListBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyVListBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="RefreshAll" type="" overloaded="no">
-        <autodoc>RefreshAll(self)</autodoc>
-      </method>
-      <method name="SetItemCount" type="" overloaded="no">
-        <autodoc>SetItemCount(self, size_t count)</autodoc>
-        <paramlist>
-          <param name="count" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFileSystem" type="FileSystem" overloaded="no">
-        <autodoc>GetFileSystem(self) -&gt; FileSystem</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TaskBarIcon" oldname="wxTaskBarIcon" module="_windows">
-      <baseclass name="EvtHandler"/>
-      <constructor name="TaskBarIcon" overloaded="no">
-        <autodoc>__init__(self) -&gt; TaskBarIcon</autodoc>
-      </constructor>
-      <destructor name="~wxTaskBarIcon" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-      </method>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsIconInstalled" type="bool" overloaded="no">
-        <autodoc>IsIconInstalled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetIcon" type="bool" overloaded="no">
-        <autodoc>SetIcon(self, Icon icon, String tooltip=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-          <param name="tooltip" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="RemoveIcon" type="bool" overloaded="no">
-        <autodoc>RemoveIcon(self) -&gt; bool</autodoc>
-      </method>
-      <method name="PopupMenu" type="bool" overloaded="no">
-        <autodoc>PopupMenu(self, Menu menu) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="TaskBarIconEvent" oldname="wxTaskBarIconEvent" module="_windows">
-      <baseclass name="Event"/>
-      <constructor name="TaskBarIconEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType evtType, TaskBarIcon tbIcon) -&gt; TaskBarIconEvent</autodoc>
-        <paramlist>
-          <param name="evtType" type="wxEventType" default=""/>
-          <param name="tbIcon" type="TaskBarIcon" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-EVT_TASKBAR_MOVE = wx.PyEventBinder (         wxEVT_TASKBAR_MOVE )
-EVT_TASKBAR_LEFT_DOWN = wx.PyEventBinder (    wxEVT_TASKBAR_LEFT_DOWN )
-EVT_TASKBAR_LEFT_UP = wx.PyEventBinder (      wxEVT_TASKBAR_LEFT_UP )
-EVT_TASKBAR_RIGHT_DOWN = wx.PyEventBinder (   wxEVT_TASKBAR_RIGHT_DOWN )
-EVT_TASKBAR_RIGHT_UP = wx.PyEventBinder (     wxEVT_TASKBAR_RIGHT_UP )
-EVT_TASKBAR_LEFT_DCLICK = wx.PyEventBinder (  wxEVT_TASKBAR_LEFT_DCLICK )
-EVT_TASKBAR_RIGHT_DCLICK = wx.PyEventBinder ( wxEVT_TASKBAR_RIGHT_DCLICK )
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ColourData" oldname="wxColourData" module="_windows">
-      <docstring>This class holds a variety of information related to the colour
-chooser dialog, used to transfer settings and results to and from the
-`wx.ColourDialog`.</docstring>
-      <baseclass name="Object"/>
-      <constructor name="ColourData" overloaded="no">
-        <autodoc>__init__(self) -&gt; ColourData</autodoc>
-        <docstring>Constructor, sets default values.</docstring>
-      </constructor>
-      <destructor name="~wxColourData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetChooseFull" type="bool" overloaded="no">
-        <autodoc>GetChooseFull(self) -&gt; bool</autodoc>
-        <docstring>Under Windows, determines whether the Windows colour dialog will
-display the full dialog with custom colour selection controls. Has no
-meaning under other platforms.  The default value is true.</docstring>
-      </method>
-      <method name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(self) -&gt; Colour</autodoc>
-        <docstring>Gets the colour (pre)selected by the dialog.</docstring>
-      </method>
-      <method name="GetCustomColour" type="Colour" overloaded="no">
-        <autodoc>GetCustomColour(self, int i) -&gt; Colour</autodoc>
-        <docstring>Gets the i'th custom colour associated with the colour dialog. i
-should be an integer between 0 and 15. The default custom colours are
-all invalid colours.</docstring>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetChooseFull" type="" overloaded="no">
-        <autodoc>SetChooseFull(self, int flag)</autodoc>
-        <docstring>Under Windows, tells the Windows colour dialog to display the full
-dialog with custom colour selection controls. Under other platforms,
-has no effect.  The default value is true.</docstring>
-        <paramlist>
-          <param name="flag" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, Colour colour)</autodoc>
-        <docstring>Sets the default colour for the colour dialog.  The default colour is
-black.</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCustomColour" type="" overloaded="no">
-        <autodoc>SetCustomColour(self, int i, Colour colour)</autodoc>
-        <docstring>Sets the i'th custom colour for the colour dialog. i should be an
-integer between 0 and 15. The default custom colours are all invalid colours.</docstring>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ColourDialog" oldname="wxColourDialog" module="_windows">
-      <docstring>This class represents the colour chooser dialog.</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="ColourDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, ColourData data=None) -&gt; ColourDialog</autodoc>
-        <docstring>Constructor. Pass a parent window, and optionally a `wx.ColourData`,
-which will be copied to the colour dialog's internal ColourData
-instance.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="ColourData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetColourData" type="ColourData" overloaded="no">
-        <autodoc>GetColourData(self) -&gt; ColourData</autodoc>
-        <docstring>Returns a reference to the `wx.ColourData` used by the dialog.</docstring>
-      </method>
-    </class>
-    <class name="DirDialog" oldname="wxDirDialog" module="_windows">
-      <docstring>wx.DirDialog allows the user to select a directory by browising the
-file system.
-
-Window  Styles
---------------
-    ====================  ==========================================
-    wx.DD_NEW_DIR_BUTTON  Add 'Create new directory' button and allow
-                          directory names to be editable. On Windows
-                          the new directory button is only available
-                          with recent versions of the common dialogs.
-    ====================  ==========================================
-</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="DirDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, String message=DirSelectorPromptStr, 
-    String defaultPath=EmptyString, long style=0, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    String name=DirDialogNameStr) -&gt; DirDialog</autodoc>
-        <docstring>Constructor.  Use ShowModal method to show the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default="wxPyDirSelectorPromptStr"/>
-          <param name="defaultPath" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="long" default="0"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="name" type="String" default="wxPyDirDialogNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPath" type="String" overloaded="no">
-        <autodoc>GetPath(self) -&gt; String</autodoc>
-        <docstring>Returns the default or user-selected path.</docstring>
-      </method>
-      <method name="GetMessage" type="String" overloaded="no">
-        <autodoc>GetMessage(self) -&gt; String</autodoc>
-        <docstring>Returns the message that will be displayed on the dialog.</docstring>
-      </method>
-      <method name="GetStyle" type="long" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; long</autodoc>
-        <docstring>Returns the dialog style.</docstring>
-      </method>
-      <method name="SetMessage" type="" overloaded="no">
-        <autodoc>SetMessage(self, String message)</autodoc>
-        <docstring>Sets the message that will be displayed on the dialog.</docstring>
-        <paramlist>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPath" type="" overloaded="no">
-        <autodoc>SetPath(self, String path)</autodoc>
-        <docstring>Sets the default path.</docstring>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FileDialog" oldname="wxFileDialog" module="_windows">
-      <docstring>wx.FileDialog allows the user to select one or more files from the
-filesystem.
-
-In Windows, this is the common file selector dialog. On X based
-platforms a generic alternative is used.  The path and filename are
-distinct elements of a full file pathname. If path is "", the
-current directory will be used. If filename is "", no default
-filename will be supplied. The wildcard determines what files are
-displayed in the file selector, and file extension supplies a type
-extension for the required filename.
-
-Both the X and Windows versions implement a wildcard filter. Typing a
-filename containing wildcards (\\*, ?) in the filename text item, and
-clicking on Ok, will result in only those files matching the pattern
-being displayed. The wildcard may be a specification for multiple
-types of file with a description for each, such as::
-
-   "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"
-
-
-Window  Styles
---------------
-    ===================   ==========================================
-    wx.OPEN               This is an open dialog.
-
-    wx.SAVE               This is a save dialog.
-
-    wx.HIDE_READONLY      For open dialog only: hide the checkbox
-                          allowing to open the file in read-only mode.
-
-    wx.OVERWRITE_PROMPT   For save dialog only: prompt for a confirmation
-                          if a file will be overwritten.
-
-    wx.MULTIPLE           For open dialog only: allows selecting multiple
-                          files.
-
-    wx.CHANGE_DIR         Change the current working directory to the
-                          directory  where the file(s) chosen by the user
-                          are.
-    ===================   ==========================================
-</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="FileDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, String message=FileSelectorPromptStr, 
-    String defaultDir=EmptyString, String defaultFile=EmptyString, 
-    String wildcard=FileSelectorDefaultWildcardStr, 
-    long style=0, Point pos=DefaultPosition) -&gt; FileDialog</autodoc>
-        <docstring>Constructor.  Use ShowModal method to show the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default="wxPyFileSelectorPromptStr"/>
-          <param name="defaultDir" type="String" default="wxPyEmptyString"/>
-          <param name="defaultFile" type="String" default="wxPyEmptyString"/>
-          <param name="wildcard" type="String" default="wxPyFileSelectorDefaultWildcardStr"/>
-          <param name="style" type="long" default="0"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="SetMessage" type="" overloaded="no">
-        <autodoc>SetMessage(self, String message)</autodoc>
-        <docstring>Sets the message that will be displayed on the dialog.</docstring>
-        <paramlist>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPath" type="" overloaded="no">
-        <autodoc>SetPath(self, String path)</autodoc>
-        <docstring>Sets the path (the combined directory and filename that will be
-returned when the dialog is dismissed).</docstring>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDirectory" type="" overloaded="no">
-        <autodoc>SetDirectory(self, String dir)</autodoc>
-        <docstring>Sets the default directory.</docstring>
-        <paramlist>
-          <param name="dir" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFilename" type="" overloaded="no">
-        <autodoc>SetFilename(self, String name)</autodoc>
-        <docstring>Sets the default filename.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWildcard" type="" overloaded="no">
-        <autodoc>SetWildcard(self, String wildCard)</autodoc>
-        <docstring>Sets the wildcard, which can contain multiple file types, for
-example::
-
-    "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"
-</docstring>
-        <paramlist>
-          <param name="wildCard" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, long style)</autodoc>
-        <docstring>Sets the dialog style.</docstring>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFilterIndex" type="" overloaded="no">
-        <autodoc>SetFilterIndex(self, int filterIndex)</autodoc>
-        <docstring>Sets the default filter index, starting from zero.</docstring>
-        <paramlist>
-          <param name="filterIndex" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMessage" type="String" overloaded="no">
-        <autodoc>GetMessage(self) -&gt; String</autodoc>
-        <docstring>Returns the message that will be displayed on the dialog.</docstring>
-      </method>
-      <method name="GetPath" type="String" overloaded="no">
-        <autodoc>GetPath(self) -&gt; String</autodoc>
-        <docstring>Returns the full path (directory and filename) of the selected file.</docstring>
-      </method>
-      <method name="GetDirectory" type="String" overloaded="no">
-        <autodoc>GetDirectory(self) -&gt; String</autodoc>
-        <docstring>Returns the default directory.</docstring>
-      </method>
-      <method name="GetFilename" type="String" overloaded="no">
-        <autodoc>GetFilename(self) -&gt; String</autodoc>
-        <docstring>Returns the default filename.</docstring>
-      </method>
-      <method name="GetWildcard" type="String" overloaded="no">
-        <autodoc>GetWildcard(self) -&gt; String</autodoc>
-        <docstring>Returns the file dialog wildcard.</docstring>
-      </method>
-      <method name="GetStyle" type="long" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; long</autodoc>
-        <docstring>Returns the dialog style.</docstring>
-      </method>
-      <method name="GetFilterIndex" type="int" overloaded="no">
-        <autodoc>GetFilterIndex(self) -&gt; int</autodoc>
-        <docstring>Returns the index into the list of filters supplied, optionally, in
-the wildcard parameter. Before the dialog is shown, this is the index
-which will be used when the dialog is first displayed. After the
-dialog is shown, this is the index selected by the user.</docstring>
-      </method>
-      <method name="GetFilenames" type="PyObject" overloaded="no">
-        <autodoc>GetFilenames(self) -&gt; PyObject</autodoc>
-        <docstring>Returns a list of filenames chosen in the dialog.  This function
-should only be used with the dialogs which have wx.MULTIPLE style, use
-GetFilename for the others.</docstring>
-      </method>
-      <method name="GetPaths" type="PyObject" overloaded="no">
-        <autodoc>GetPaths(self) -&gt; PyObject</autodoc>
-        <docstring>Fills the array paths with the full paths of the files chosen. This
-function should only be used with the dialogs which have wx.MULTIPLE
-style, use GetPath for the others.</docstring>
-      </method>
-    </class>
-    <class name="MultiChoiceDialog" oldname="wxMultiChoiceDialog" module="_windows">
-      <docstring>A simple dialog with a multi selection listbox.</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="MultiChoiceDialog" overloaded="no">
-        <autodoc>__init__(Window parent, String message, String caption,
-    List choices=[], long style=CHOICEDLG_STYLE,
-    Point pos=DefaultPosition) -&gt; MultiChoiceDialog</autodoc>
-        <docstring>Constructor.  Use ShowModal method to show the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default=""/>
-          <param name="caption" type="String" default=""/>
-          <param name="choices" type="int" default="0"/>
-          <param name="choices_array" type="String" default="NULL"/>
-          <param name="style" type="long" default="wxCHOICEDLG_STYLE"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="SetSelections" type="" overloaded="no">
-        <autodoc>SetSelections(List selections)</autodoc>
-        <docstring>Specify the items in the list that should be selected, using a list of
-integers.</docstring>
-        <paramlist>
-          <param name="selections" type="wxArrayInt" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelections" type="PyObject" overloaded="no">
-        <autodoc>GetSelections() -&gt; [selections]</autodoc>
-        <docstring>Returns a list of integers representing the items that are selected.</docstring>
-      </method>
-    </class>
-    <class name="SingleChoiceDialog" oldname="wxSingleChoiceDialog" module="_windows">
-      <docstring>A simple dialog with a single selection listbox.</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="SingleChoiceDialog" overloaded="no">
-        <autodoc>__init__(Window parent, String message, String caption,
-    List choices=[], long style=CHOICEDLG_STYLE,
-    Point pos=DefaultPosition) -&gt; SingleChoiceDialog</autodoc>
-        <docstring>Constructor.  Use ShowModal method to show the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default=""/>
-          <param name="caption" type="String" default=""/>
-          <param name="choices" type="int" default=""/>
-          <param name="choices_array" type="String" default=""/>
-          <param name="style" type="long" default="wxCHOICEDLG_STYLE"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-        <docstring>Get the index of teh currently selected item.</docstring>
-      </method>
-      <method name="GetStringSelection" type="String" overloaded="no">
-        <autodoc>GetStringSelection(self) -&gt; String</autodoc>
-        <docstring>Returns the string value of the currently selected item</docstring>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int sel)</autodoc>
-        <docstring>Set the current selected item to sel</docstring>
-        <paramlist>
-          <param name="sel" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="TextEntryDialog" oldname="wxTextEntryDialog" module="_windows">
-      <docstring>A dialog with text control, [ok] and [cancel] buttons</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="TextEntryDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, String message, String caption=GetTextFromUserPromptStr, 
-    String defaultValue=EmptyString, 
-    long style=wxOK|wxCANCEL|wxCENTRE, Point pos=DefaultPosition) -&gt; TextEntryDialog</autodoc>
-        <docstring>Constructor.  Use ShowModal method to show the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default=""/>
-          <param name="caption" type="String" default="wxPyGetTextFromUserPromptStr"/>
-          <param name="defaultValue" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="long" default="wxOK|wxCANCEL|wxCENTRE"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-        <docstring>Returns the text that the user has entered if the user has pressed OK,
-or the original value if the user has pressed Cancel.</docstring>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, String value)</autodoc>
-        <docstring>Sets the default text value.</docstring>
-        <paramlist>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FontData" oldname="wxFontData" module="_windows">
-      <docstring>This class holds a variety of information related to font dialogs and
-is used to transfer settings to and results from a `wx.FontDialog`.</docstring>
-      <baseclass name="Object"/>
-      <constructor name="FontData" overloaded="no">
-        <autodoc>__init__(self) -&gt; FontData</autodoc>
-        <docstring>This class holds a variety of information related to font dialogs and
-is used to transfer settings to and results from a `wx.FontDialog`.</docstring>
-      </constructor>
-      <destructor name="~wxFontData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="EnableEffects" type="" overloaded="no">
-        <autodoc>EnableEffects(self, bool enable)</autodoc>
-        <docstring>Enables or disables 'effects' under MS Windows only. This refers to
-the controls for manipulating colour, strikeout and underline
-properties.  The default value is true.</docstring>
-        <paramlist>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAllowSymbols" type="bool" overloaded="no">
-        <autodoc>GetAllowSymbols(self) -&gt; bool</autodoc>
-        <docstring>Under MS Windows, returns a flag determining whether symbol fonts can
-be selected. Has no effect on other platforms. The default value is
-true.</docstring>
-      </method>
-      <method name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(self) -&gt; Colour</autodoc>
-        <docstring>Gets the colour associated with the font dialog. The default value is
-black.</docstring>
-      </method>
-      <method name="GetChosenFont" type="Font" overloaded="no">
-        <autodoc>GetChosenFont(self) -&gt; Font</autodoc>
-        <docstring>Gets the font chosen by the user.</docstring>
-      </method>
-      <method name="GetEnableEffects" type="bool" overloaded="no">
-        <autodoc>GetEnableEffects(self) -&gt; bool</autodoc>
-        <docstring>Determines whether 'effects' are enabled under Windows.</docstring>
-      </method>
-      <method name="GetInitialFont" type="Font" overloaded="no">
-        <autodoc>GetInitialFont(self) -&gt; Font</autodoc>
-        <docstring>Gets the font that will be initially used by the font dialog. This
-should have previously been set by the application.</docstring>
-      </method>
-      <method name="GetShowHelp" type="bool" overloaded="no">
-        <autodoc>GetShowHelp(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the Help button will be shown (Windows only).  The
-default value is false.</docstring>
-      </method>
-      <method name="SetAllowSymbols" type="" overloaded="no">
-        <autodoc>SetAllowSymbols(self, bool allowSymbols)</autodoc>
-        <docstring>Under MS Windows, determines whether symbol fonts can be selected. Has
-no effect on other platforms.  The default value is true.</docstring>
-        <paramlist>
-          <param name="allowSymbols" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetChosenFont" type="" overloaded="no">
-        <autodoc>SetChosenFont(self, Font font)</autodoc>
-        <docstring>Sets the font that will be returned to the user (normally for internal
-use only).</docstring>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, Colour colour)</autodoc>
-        <docstring>Sets the colour that will be used for the font foreground colour.  The
-default colour is black.</docstring>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetInitialFont" type="" overloaded="no">
-        <autodoc>SetInitialFont(self, Font font)</autodoc>
-        <docstring>Sets the font that will be initially used by the font dialog.</docstring>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRange" type="" overloaded="no">
-        <autodoc>SetRange(self, int min, int max)</autodoc>
-        <docstring>Sets the valid range for the font point size (Windows only).  The
-default is 0, 0 (unrestricted range).</docstring>
-        <paramlist>
-          <param name="min" type="int" default=""/>
-          <param name="max" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetShowHelp" type="" overloaded="no">
-        <autodoc>SetShowHelp(self, bool showHelp)</autodoc>
-        <docstring>Determines whether the Help button will be displayed in the font
-dialog (Windows only).  The default value is false.</docstring>
-        <paramlist>
-          <param name="showHelp" type="bool" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FontDialog" oldname="wxFontDialog" module="_windows">
-      <docstring>wx.FontDialog allows the user to select a system font and its attributes.
-
-:see: `wx.FontData`
-</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="FontDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, FontData data) -&gt; FontDialog</autodoc>
-        <docstring>Constructor. Pass a parent window and the `wx.FontData` object to be
-used to initialize the dialog controls.  Call `ShowModal` to display
-the dialog.  If ShowModal returns ``wx.ID_OK`` then you can fetch the
-results with via the `wx.FontData` returned by `GetFontData`.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="FontData" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetFontData" type="FontData" overloaded="no">
-        <autodoc>GetFontData(self) -&gt; FontData</autodoc>
-        <docstring>Returns a reference to the internal `wx.FontData` used by the
-wx.FontDialog.</docstring>
-      </method>
-    </class>
-    <class name="MessageDialog" oldname="wxMessageDialog" module="_windows">
-      <docstring>This class provides a simple dialog that shows a single or multi-line
-message, with a choice of OK, Yes, No and/or Cancel buttons.
-
-Window Styles
---------------
-    ===================    =============================================
-    wx.OK                  Show an OK button.
-    wx.CANCEL              Show a Cancel button.
-    wx.YES_NO              Show Yes and No buttons.
-    wx.YES_DEFAULT         Used with wxYES_NO, makes Yes button the
-                           default - which is the default behaviour.
-    wx.NO_DEFAULT          Used with wxYES_NO, makes No button the default.
-    wx.ICON_EXCLAMATION    Shows an exclamation mark icon.
-    wx.ICON_HAND           Shows an error icon.
-    wx.ICON_ERROR          Shows an error icon - the same as wxICON_HAND.
-    wx.ICON_QUESTION       Shows a question mark icon.
-    wx.ICON_INFORMATION    Shows an information (i) icon.
-    wx.STAY_ON_TOP         The message box stays on top of all other
-                           window, even those of the other applications
-                           (Windows only).
-    ===================    =============================================
-</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="MessageDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, String message, String caption=MessageBoxCaptionStr, 
-    long style=wxOK|wxCANCEL|wxCENTRE, 
-    Point pos=DefaultPosition) -&gt; MessageDialog</autodoc>
-        <docstring>Constructor, use `ShowModal` to display the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="message" type="String" default=""/>
-          <param name="caption" type="String" default="wxPyMessageBoxCaptionStr"/>
-          <param name="style" type="long" default="wxOK|wxCANCEL|wxCENTRE"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="ProgressDialog" oldname="wxProgressDialog" module="_windows">
-      <docstring>A dialog that shows a short message and a progress bar. Optionally, it
-can display an ABORT button.
-
-Window Styles
---------------
-    ====================     =============================================
-    wx.PD_APP_MODAL          Make the progress dialog modal. If this flag is
-                             not given, it is only "locally" modal -
-                             that is the input to the parent window is
-                             disabled, but not to the other ones.
-
-    wx.PD_AUTO_HIDE          Causes the progress dialog to disappear from
-                             screen as soon as the maximum value of the
-                             progress meter has been reached.
-
-    wx.PD_CAN_ABORT          This flag tells the dialog that it should have
-                             a "Cancel" button which the user may press. If
-                             this happens, the next call to Update() will
-                             return false.
-
-    wx.PD_ELAPSED_TIME       This flag tells the dialog that it should show
-                             elapsed time (since creating the dialog).
-
-    wx.PD_ESTIMATED_TIME     This flag tells the dialog that it should show
-                             estimated time.
-
-    wx.PD_REMAINING_TIME     This flag tells the dialog that it should show
-                             remaining time.
-    ====================     =============================================
-</docstring>
-      <baseclass name="Frame"/>
-      <constructor name="ProgressDialog" overloaded="no">
-        <autodoc>__init__(self, String title, String message, int maximum=100, Window parent=None, 
-    int style=wxPD_AUTO_HIDE|wxPD_APP_MODAL) -&gt; ProgressDialog</autodoc>
-        <docstring>Constructor. Creates the dialog, displays it and disables user input
-for other windows, or, if wx.PD_APP_MODAL flag is not given, for its
-parent window only.</docstring>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-          <param name="message" type="String" default=""/>
-          <param name="maximum" type="int" default="100"/>
-          <param name="parent" type="Window" default="NULL"/>
-          <param name="style" type="int" default="wxPD_AUTO_HIDE|wxPD_APP_MODAL"/>
-        </paramlist>
-      </constructor>
-      <method name="Update" type="bool" overloaded="no">
-        <autodoc>Update(self, int value, String newmsg=EmptyString) -&gt; bool</autodoc>
-        <docstring>Updates the dialog, setting the progress bar to the new value and, if
-given changes the message above it. The value given should be less
-than or equal to the maximum value given to the constructor and the
-dialog is closed if it is equal to the maximum.  Returns true unless
-the Cancel button has been pressed.
-
-If false is returned, the application can either immediately destroy
-the dialog or ask the user for the confirmation and if the abort is
-not confirmed the dialog may be resumed with Resume function.</docstring>
-        <paramlist>
-          <param name="value" type="int" default=""/>
-          <param name="newmsg" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="Resume" type="" overloaded="no">
-        <autodoc>Resume(self)</autodoc>
-        <docstring>Can be used to continue with the dialog, after the user had chosen to
-abort.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-EVT_FIND = wx.PyEventBinder( wxEVT_COMMAND_FIND, 1 )
-EVT_FIND_NEXT = wx.PyEventBinder( wxEVT_COMMAND_FIND_NEXT, 1 )
-EVT_FIND_REPLACE = wx.PyEventBinder( wxEVT_COMMAND_FIND_REPLACE, 1 )
-EVT_FIND_REPLACE_ALL = wx.PyEventBinder( wxEVT_COMMAND_FIND_REPLACE_ALL, 1 )
-EVT_FIND_CLOSE = wx.PyEventBinder( wxEVT_COMMAND_FIND_CLOSE, 1 )
-
-# For backwards compatibility.  Should they be removed?
-EVT_COMMAND_FIND             = EVT_FIND 
-EVT_COMMAND_FIND_NEXT        = EVT_FIND_NEXT
-EVT_COMMAND_FIND_REPLACE     = EVT_FIND_REPLACE
-EVT_COMMAND_FIND_REPLACE_ALL = EVT_FIND_REPLACE_ALL
-EVT_COMMAND_FIND_CLOSE       = EVT_FIND_CLOSE        
-</pythoncode>
-    <class name="FindDialogEvent" oldname="wxFindDialogEvent" module="_windows">
-      <docstring>Events for the FindReplaceDialog</docstring>
-      <baseclass name="CommandEvent"/>
-      <constructor name="FindDialogEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0) -&gt; FindDialogEvent</autodoc>
-        <docstring>Events for the FindReplaceDialog</docstring>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-        <docstring>Get the currently selected flags: this is the combination of
-wx.FR_DOWN, wx.FR_WHOLEWORD and wx.FR_MATCHCASE flags.</docstring>
-      </method>
-      <method name="GetFindString" type="String" overloaded="no">
-        <autodoc>GetFindString(self) -&gt; String</autodoc>
-        <docstring>Return the string to find (never empty).</docstring>
-      </method>
-      <method name="GetReplaceString" type="String" overloaded="no">
-        <autodoc>GetReplaceString(self) -&gt; String</autodoc>
-        <docstring>Return the string to replace the search string with (only for replace
-and replace all events).</docstring>
-      </method>
-      <method name="GetDialog" type="wxFindReplaceDialog" overloaded="no">
-        <autodoc>GetDialog(self) -&gt; FindReplaceDialog</autodoc>
-        <docstring>Return the pointer to the dialog which generated this event.</docstring>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFindString" type="" overloaded="no">
-        <autodoc>SetFindString(self, String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetReplaceString" type="" overloaded="no">
-        <autodoc>SetReplaceString(self, String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FindReplaceData" oldname="wxFindReplaceData" module="_windows">
-      <docstring>wx.FindReplaceData holds the data for wx.FindReplaceDialog. It is used
-to initialize the dialog with the default values and will keep the
-last values from the dialog when it is closed. It is also updated each
-time a `wx.FindDialogEvent` is generated so instead of using the
-`wx.FindDialogEvent` methods you can also directly query this object.
-
-Note that all SetXXX() methods may only be called before showing the
-dialog and calling them has no effect later.
-
-Flags
------
-    ================   ===============================================  
-    wx.FR_DOWN         Downward search/replace selected (otherwise,
-                       upwards)
-
-    wx.FR_WHOLEWORD    Whole word search/replace selected
-
-    wx.FR_MATCHCASE    Case sensitive search/replace selected
-                       (otherwise, case insensitive)
-    ================   ===============================================  
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="FindReplaceData" overloaded="no">
-        <autodoc>__init__(self, int flags=0) -&gt; FindReplaceData</autodoc>
-        <docstring>Constuctor initializes the flags to default value (0).</docstring>
-        <paramlist>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFindReplaceData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetFindString" type="String" overloaded="no">
-        <autodoc>GetFindString(self) -&gt; String</autodoc>
-        <docstring>Get the string to find.</docstring>
-      </method>
-      <method name="GetReplaceString" type="String" overloaded="no">
-        <autodoc>GetReplaceString(self) -&gt; String</autodoc>
-        <docstring>Get the replacement string.</docstring>
-      </method>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-        <docstring>Get the combination of flag values.</docstring>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, int flags)</autodoc>
-        <docstring>Set the flags to use to initialize the controls of the dialog.</docstring>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFindString" type="" overloaded="no">
-        <autodoc>SetFindString(self, String str)</autodoc>
-        <docstring>Set the string to find (used as initial value by the dialog).</docstring>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetReplaceString" type="" overloaded="no">
-        <autodoc>SetReplaceString(self, String str)</autodoc>
-        <docstring>Set the replacement string (used as initial value by the dialog).</docstring>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FindReplaceDialog" oldname="wxFindReplaceDialog" module="_windows">
-      <docstring>wx.FindReplaceDialog is a standard modeless dialog which is used to
-allow the user to search for some text (and possibly replace it with
-something else). The actual searching is supposed to be done in the
-owner window which is the parent of this dialog. Note that it means
-that unlike for the other standard dialogs this one must have a parent
-window. Also note that there is no way to use this dialog in a modal
-way; it is always, by design and implementation, modeless.
-
-
-Window Styles
--------------
-
-    =====================  =========================================
-    wx.FR_REPLACEDIALOG    replace dialog (otherwise find dialog)
-
-    wx.FR_NOUPDOWN         don't allow changing the search direction
-
-    wx.FR_NOMATCHCASE      don't allow case sensitive searching
-
-    wx.FR_NOWHOLEWORD      don't allow whole word searching
-    =====================  =========================================
-</docstring>
-      <baseclass name="Dialog"/>
-      <constructor name="FindReplaceDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, FindReplaceData data, String title, 
-    int style=0) -&gt; FindReplaceDialog</autodoc>
-        <docstring>Create a FindReplaceDialog.  The parent and data parameters must be
-non-None.  Use Show to display the dialog.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="FindReplaceData" default=""/>
-          <param name="title" type="String" default=""/>
-          <param name="style" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreFindReplaceDialog" overloaded="no">
-        <autodoc>PreFindReplaceDialog() -&gt; FindReplaceDialog</autodoc>
-        <docstring>Precreate a FindReplaceDialog for 2-phase creation</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, FindReplaceData data, String title, 
-    int style=0) -&gt; bool</autodoc>
-        <docstring>Create the dialog, for 2-phase create.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="FindReplaceData" default=""/>
-          <param name="title" type="String" default=""/>
-          <param name="style" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetData" type="FindReplaceData" overloaded="no">
-        <autodoc>GetData(self) -&gt; FindReplaceData</autodoc>
-        <docstring>Get the FindReplaceData object used by this dialog.</docstring>
-      </method>
-      <method name="SetData" type="" overloaded="no">
-        <autodoc>SetData(self, FindReplaceData data)</autodoc>
-        <docstring>Set the FindReplaceData object used by this dialog.</docstring>
-        <paramlist>
-          <param name="data" type="FindReplaceData" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="MDIParentFrame" oldname="wxMDIParentFrame" module="_windows">
-      <baseclass name="Frame"/>
-      <constructor name="MDIParentFrame" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxDEFAULT_FRAME_STYLE|wxVSCROLL|wxHSCROLL, 
-    String name=FrameNameStr) -&gt; MDIParentFrame</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE|wxVSCROLL|wxHSCROLL"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreMDIParentFrame" overloaded="no">
-        <autodoc>PreMDIParentFrame() -&gt; MDIParentFrame</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxDEFAULT_FRAME_STYLE|wxVSCROLL|wxHSCROLL, 
-    String name=FrameNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE|wxVSCROLL|wxHSCROLL"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </method>
-      <method name="ActivateNext" type="" overloaded="no">
-        <autodoc>ActivateNext(self)</autodoc>
-      </method>
-      <method name="ActivatePrevious" type="" overloaded="no">
-        <autodoc>ActivatePrevious(self)</autodoc>
-      </method>
-      <method name="ArrangeIcons" type="" overloaded="no">
-        <autodoc>ArrangeIcons(self)</autodoc>
-      </method>
-      <method name="Cascade" type="" overloaded="no">
-        <autodoc>Cascade(self)</autodoc>
-      </method>
-      <method name="GetActiveChild" type="wxMDIChildFrame" overloaded="no">
-        <autodoc>GetActiveChild(self) -&gt; MDIChildFrame</autodoc>
-      </method>
-      <method name="GetClientWindow" type="wxMDIClientWindow" overloaded="no">
-        <autodoc>GetClientWindow(self) -&gt; MDIClientWindow</autodoc>
-      </method>
-      <method name="GetToolBar" type="Window" overloaded="no">
-        <autodoc>GetToolBar(self) -&gt; Window</autodoc>
-      </method>
-      <method name="Tile" type="" overloaded="no">
-        <autodoc>Tile(self)</autodoc>
-      </method>
-    </class>
-    <class name="MDIChildFrame" oldname="wxMDIChildFrame" module="_windows">
-      <baseclass name="Frame"/>
-      <constructor name="MDIChildFrame" overloaded="no">
-        <autodoc>__init__(self, MDIParentFrame parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, 
-    String name=FrameNameStr) -&gt; MDIChildFrame</autodoc>
-        <paramlist>
-          <param name="parent" type="MDIParentFrame" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreMDIChildFrame" overloaded="no">
-        <autodoc>PreMDIChildFrame() -&gt; MDIChildFrame</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, MDIParentFrame parent, int id=-1, String title=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, 
-    String name=FrameNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="MDIParentFrame" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </method>
-      <method name="Activate" type="" overloaded="no">
-        <autodoc>Activate(self)</autodoc>
-      </method>
-      <method name="Maximize" type="" overloaded="no">
-        <autodoc>Maximize(self, bool maximize)</autodoc>
-        <paramlist>
-          <param name="maximize" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Restore" type="" overloaded="no">
-        <autodoc>Restore(self)</autodoc>
-      </method>
-    </class>
-    <class name="MDIClientWindow" oldname="wxMDIClientWindow" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="MDIClientWindow" overloaded="no">
-        <autodoc>__init__(self, MDIParentFrame parent, long style=0) -&gt; MDIClientWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="MDIParentFrame" default=""/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreMDIClientWindow" overloaded="no">
-        <autodoc>PreMDIClientWindow() -&gt; MDIClientWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, MDIParentFrame parent, long style=0) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="MDIParentFrame" default=""/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PyWindow" oldname="wxPyWindow" module="_windows">
-      <baseclass name="Window"/>
-      <constructor name="PyWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; PyWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePyWindow" overloaded="no">
-        <autodoc>PrePyWindow() -&gt; PyWindow</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBestSize" type="" overloaded="no">
-        <autodoc>SetBestSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoMoveWindow" type="" overloaded="no">
-        <autodoc>base_DoMoveWindow(self, int x, int y, int width, int height)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetSize" type="" overloaded="no">
-        <autodoc>base_DoSetSize(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetClientSize" type="" overloaded="no">
-        <autodoc>base_DoSetClientSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetVirtualSize" type="" overloaded="no">
-        <autodoc>base_DoSetVirtualSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetSize" type="" overloaded="no">
-        <autodoc>base_DoGetSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetClientSize" type="" overloaded="no">
-        <autodoc>base_DoGetClientSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetPosition" type="" overloaded="no">
-        <autodoc>base_DoGetPosition() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetVirtualSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetVirtualSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_DoGetBestSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetBestSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_InitDialog" type="" overloaded="no">
-        <autodoc>base_InitDialog(self)</autodoc>
-      </method>
-      <method name="base_TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_Validate" type="bool" overloaded="no">
-        <autodoc>base_Validate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetMaxSize" type="Size" overloaded="no">
-        <autodoc>base_GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_AddChild" type="" overloaded="no">
-        <autodoc>base_AddChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RemoveChild" type="" overloaded="no">
-        <autodoc>base_RemoveChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_ShouldInheritColours" type="bool" overloaded="no">
-        <autodoc>base_ShouldInheritColours(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_ApplyParentThemeBackground" type="" overloaded="no">
-        <autodoc>base_ApplyParentThemeBackground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>base_GetDefaultAttributes(self) -&gt; VisualAttributes</autodoc>
-      </method>
-    </class>
-    <class name="PyPanel" oldname="wxPyPanel" module="_windows">
-      <baseclass name="Panel"/>
-      <constructor name="PyPanel" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; PyPanel</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePyPanel" overloaded="no">
-        <autodoc>PrePyPanel() -&gt; PyPanel</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBestSize" type="" overloaded="no">
-        <autodoc>SetBestSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoMoveWindow" type="" overloaded="no">
-        <autodoc>base_DoMoveWindow(self, int x, int y, int width, int height)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetSize" type="" overloaded="no">
-        <autodoc>base_DoSetSize(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetClientSize" type="" overloaded="no">
-        <autodoc>base_DoSetClientSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetVirtualSize" type="" overloaded="no">
-        <autodoc>base_DoSetVirtualSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetSize" type="" overloaded="no">
-        <autodoc>base_DoGetSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetClientSize" type="" overloaded="no">
-        <autodoc>base_DoGetClientSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetPosition" type="" overloaded="no">
-        <autodoc>base_DoGetPosition() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetVirtualSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetVirtualSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_DoGetBestSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetBestSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_InitDialog" type="" overloaded="no">
-        <autodoc>base_InitDialog(self)</autodoc>
-      </method>
-      <method name="base_TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_Validate" type="bool" overloaded="no">
-        <autodoc>base_Validate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetMaxSize" type="Size" overloaded="no">
-        <autodoc>base_GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_AddChild" type="" overloaded="no">
-        <autodoc>base_AddChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RemoveChild" type="" overloaded="no">
-        <autodoc>base_RemoveChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_ShouldInheritColours" type="bool" overloaded="no">
-        <autodoc>base_ShouldInheritColours(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_ApplyParentThemeBackground" type="" overloaded="no">
-        <autodoc>base_ApplyParentThemeBackground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>base_GetDefaultAttributes(self) -&gt; VisualAttributes</autodoc>
-      </method>
-    </class>
-    <class name="PyScrolledWindow" oldname="wxPyScrolledWindow" module="_windows">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="PyScrolledWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=PanelNameStr) -&gt; PyScrolledWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePyScrolledWindow" overloaded="no">
-        <autodoc>PrePyScrolledWindow() -&gt; PyScrolledWindow</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBestSize" type="" overloaded="no">
-        <autodoc>SetBestSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoMoveWindow" type="" overloaded="no">
-        <autodoc>base_DoMoveWindow(self, int x, int y, int width, int height)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetSize" type="" overloaded="no">
-        <autodoc>base_DoSetSize(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetClientSize" type="" overloaded="no">
-        <autodoc>base_DoSetClientSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetVirtualSize" type="" overloaded="no">
-        <autodoc>base_DoSetVirtualSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetSize" type="" overloaded="no">
-        <autodoc>base_DoGetSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetClientSize" type="" overloaded="no">
-        <autodoc>base_DoGetClientSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetPosition" type="" overloaded="no">
-        <autodoc>base_DoGetPosition() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetVirtualSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetVirtualSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_DoGetBestSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetBestSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_InitDialog" type="" overloaded="no">
-        <autodoc>base_InitDialog(self)</autodoc>
-      </method>
-      <method name="base_TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_Validate" type="bool" overloaded="no">
-        <autodoc>base_Validate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetMaxSize" type="Size" overloaded="no">
-        <autodoc>base_GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_AddChild" type="" overloaded="no">
-        <autodoc>base_AddChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RemoveChild" type="" overloaded="no">
-        <autodoc>base_RemoveChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_ShouldInheritColours" type="bool" overloaded="no">
-        <autodoc>base_ShouldInheritColours(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_ApplyParentThemeBackground" type="" overloaded="no">
-        <autodoc>base_ApplyParentThemeBackground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>base_GetDefaultAttributes(self) -&gt; VisualAttributes</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PrintData" oldname="wxPrintData" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="PrintData" overloaded="yes"/>
-      <constructor name="PrintData" overloaded="yes">
-        <autodoc>__init__(self) -&gt; PrintData
-__init__(self, PrintData data) -&gt; PrintData</autodoc>
-        <paramlist>
-          <param name="data" type="PrintData" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPrintData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetNoCopies" type="int" overloaded="no">
-        <autodoc>GetNoCopies(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCollate" type="bool" overloaded="no">
-        <autodoc>GetCollate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetOrientation" type="int" overloaded="no">
-        <autodoc>GetOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPrinterName" type="String" overloaded="no">
-        <autodoc>GetPrinterName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetColour" type="bool" overloaded="no">
-        <autodoc>GetColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetDuplex" type="wxDuplexMode" overloaded="no">
-        <autodoc>GetDuplex(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPaperId" type="wxPaperSize" overloaded="no">
-        <autodoc>GetPaperId(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPaperSize" type="Size" overloaded="no">
-        <autodoc>GetPaperSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetQuality" type="int" overloaded="no">
-        <autodoc>GetQuality(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetNoCopies" type="" overloaded="no">
-        <autodoc>SetNoCopies(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCollate" type="" overloaded="no">
-        <autodoc>SetCollate(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOrientation" type="" overloaded="no">
-        <autodoc>SetOrientation(self, int orient)</autodoc>
-        <paramlist>
-          <param name="orient" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterName" type="" overloaded="no">
-        <autodoc>SetPrinterName(self, String name)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, bool colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDuplex" type="" overloaded="no">
-        <autodoc>SetDuplex(self, int duplex)</autodoc>
-        <paramlist>
-          <param name="duplex" type="wxDuplexMode" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPaperId" type="" overloaded="no">
-        <autodoc>SetPaperId(self, int sizeId)</autodoc>
-        <paramlist>
-          <param name="sizeId" type="wxPaperSize" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPaperSize" type="" overloaded="no">
-        <autodoc>SetPaperSize(self, Size sz)</autodoc>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetQuality" type="" overloaded="no">
-        <autodoc>SetQuality(self, int quality)</autodoc>
-        <paramlist>
-          <param name="quality" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrinterCommand" type="String" overloaded="no">
-        <autodoc>GetPrinterCommand(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPrinterOptions" type="String" overloaded="no">
-        <autodoc>GetPrinterOptions(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPreviewCommand" type="String" overloaded="no">
-        <autodoc>GetPreviewCommand(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFilename" type="String" overloaded="no">
-        <autodoc>GetFilename(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFontMetricPath" type="String" overloaded="no">
-        <autodoc>GetFontMetricPath(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPrinterScaleX" type="double" overloaded="no">
-        <autodoc>GetPrinterScaleX(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetPrinterScaleY" type="double" overloaded="no">
-        <autodoc>GetPrinterScaleY(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetPrinterTranslateX" type="long" overloaded="no">
-        <autodoc>GetPrinterTranslateX(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetPrinterTranslateY" type="long" overloaded="no">
-        <autodoc>GetPrinterTranslateY(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetPrintMode" type="wxPrintMode" overloaded="no">
-        <autodoc>GetPrintMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPrinterCommand" type="" overloaded="no">
-        <autodoc>SetPrinterCommand(self, String command)</autodoc>
-        <paramlist>
-          <param name="command" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterOptions" type="" overloaded="no">
-        <autodoc>SetPrinterOptions(self, String options)</autodoc>
-        <paramlist>
-          <param name="options" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPreviewCommand" type="" overloaded="no">
-        <autodoc>SetPreviewCommand(self, String command)</autodoc>
-        <paramlist>
-          <param name="command" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFilename" type="" overloaded="no">
-        <autodoc>SetFilename(self, String filename)</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFontMetricPath" type="" overloaded="no">
-        <autodoc>SetFontMetricPath(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterScaleX" type="" overloaded="no">
-        <autodoc>SetPrinterScaleX(self, double x)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterScaleY" type="" overloaded="no">
-        <autodoc>SetPrinterScaleY(self, double y)</autodoc>
-        <paramlist>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterScaling" type="" overloaded="no">
-        <autodoc>SetPrinterScaling(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterTranslateX" type="" overloaded="no">
-        <autodoc>SetPrinterTranslateX(self, long x)</autodoc>
-        <paramlist>
-          <param name="x" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterTranslateY" type="" overloaded="no">
-        <autodoc>SetPrinterTranslateY(self, long y)</autodoc>
-        <paramlist>
-          <param name="y" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrinterTranslation" type="" overloaded="no">
-        <autodoc>SetPrinterTranslation(self, long x, long y)</autodoc>
-        <paramlist>
-          <param name="x" type="long" default=""/>
-          <param name="y" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrintMode" type="" overloaded="no">
-        <autodoc>SetPrintMode(self, int printMode)</autodoc>
-        <paramlist>
-          <param name="printMode" type="wxPrintMode" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOutputStream" type="OutputStream" overloaded="no">
-        <autodoc>GetOutputStream(self) -&gt; OutputStream</autodoc>
-      </method>
-      <method name="SetOutputStream" type="" overloaded="no">
-        <autodoc>SetOutputStream(self, OutputStream outputstream)</autodoc>
-        <paramlist>
-          <param name="outputstream" type="OutputStream" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PageSetupDialogData" oldname="wxPageSetupDialogData" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="PageSetupDialogData" overloaded="yes"/>
-      <constructor name="PageSetupDialogData" overloaded="yes">
-        <autodoc>__init__(self) -&gt; PageSetupDialogData
-__init__(self, PageSetupDialogData data) -&gt; PageSetupDialogData</autodoc>
-        <paramlist>
-          <param name="data" type="PageSetupDialogData" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPageSetupDialogData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="EnableHelp" type="" overloaded="no">
-        <autodoc>EnableHelp(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableMargins" type="" overloaded="no">
-        <autodoc>EnableMargins(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableOrientation" type="" overloaded="no">
-        <autodoc>EnableOrientation(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnablePaper" type="" overloaded="no">
-        <autodoc>EnablePaper(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnablePrinter" type="" overloaded="no">
-        <autodoc>EnablePrinter(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultMinMargins" type="bool" overloaded="no">
-        <autodoc>GetDefaultMinMargins(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnableMargins" type="bool" overloaded="no">
-        <autodoc>GetEnableMargins(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnableOrientation" type="bool" overloaded="no">
-        <autodoc>GetEnableOrientation(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnablePaper" type="bool" overloaded="no">
-        <autodoc>GetEnablePaper(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnablePrinter" type="bool" overloaded="no">
-        <autodoc>GetEnablePrinter(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnableHelp" type="bool" overloaded="no">
-        <autodoc>GetEnableHelp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetDefaultInfo" type="bool" overloaded="no">
-        <autodoc>GetDefaultInfo(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetMarginTopLeft" type="Point" overloaded="no">
-        <autodoc>GetMarginTopLeft(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetMarginBottomRight" type="Point" overloaded="no">
-        <autodoc>GetMarginBottomRight(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetMinMarginTopLeft" type="Point" overloaded="no">
-        <autodoc>GetMinMarginTopLeft(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetMinMarginBottomRight" type="Point" overloaded="no">
-        <autodoc>GetMinMarginBottomRight(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetPaperId" type="wxPaperSize" overloaded="no">
-        <autodoc>GetPaperId(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPaperSize" type="Size" overloaded="no">
-        <autodoc>GetPaperSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetPrintData" type="PrintData" overloaded="no">
-        <autodoc>GetPrintData(self) -&gt; PrintData</autodoc>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetDefaultInfo" type="" overloaded="no">
-        <autodoc>SetDefaultInfo(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultMinMargins" type="" overloaded="no">
-        <autodoc>SetDefaultMinMargins(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginTopLeft" type="" overloaded="no">
-        <autodoc>SetMarginTopLeft(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginBottomRight" type="" overloaded="no">
-        <autodoc>SetMarginBottomRight(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinMarginTopLeft" type="" overloaded="no">
-        <autodoc>SetMinMarginTopLeft(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinMarginBottomRight" type="" overloaded="no">
-        <autodoc>SetMinMarginBottomRight(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPaperId" type="" overloaded="no">
-        <autodoc>SetPaperId(self, int id)</autodoc>
-        <paramlist>
-          <param name="id" type="wxPaperSize" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPaperSize" type="" overloaded="no">
-        <autodoc>SetPaperSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrintData" type="" overloaded="no">
-        <autodoc>SetPrintData(self, PrintData printData)</autodoc>
-        <paramlist>
-          <param name="printData" type="PrintData" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PageSetupDialog" oldname="wxPageSetupDialog" module="_windows">
-      <baseclass name="Dialog"/>
-      <constructor name="PageSetupDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, PageSetupDialogData data=None) -&gt; PageSetupDialog</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="PageSetupDialogData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPageSetupData" type="PageSetupDialogData" overloaded="no">
-        <autodoc>GetPageSetupData(self) -&gt; PageSetupDialogData</autodoc>
-      </method>
-      <method name="ShowModal" type="int" overloaded="no">
-        <autodoc>ShowModal(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="PrintDialogData" oldname="wxPrintDialogData" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="PrintDialogData" overloaded="yes"/>
-      <constructor name="PrintDialogData" overloaded="yes">
-        <autodoc>__init__(self) -&gt; PrintDialogData
-__init__(self, PrintData printData) -&gt; PrintDialogData</autodoc>
-        <paramlist>
-          <param name="printData" type="PrintData" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPrintDialogData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetFromPage" type="int" overloaded="no">
-        <autodoc>GetFromPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetToPage" type="int" overloaded="no">
-        <autodoc>GetToPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMinPage" type="int" overloaded="no">
-        <autodoc>GetMinPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxPage" type="int" overloaded="no">
-        <autodoc>GetMaxPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNoCopies" type="int" overloaded="no">
-        <autodoc>GetNoCopies(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAllPages" type="bool" overloaded="no">
-        <autodoc>GetAllPages(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSelection" type="bool" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetCollate" type="bool" overloaded="no">
-        <autodoc>GetCollate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPrintToFile" type="bool" overloaded="no">
-        <autodoc>GetPrintToFile(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSetupDialog" type="bool" overloaded="no">
-        <autodoc>GetSetupDialog(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetFromPage" type="" overloaded="no">
-        <autodoc>SetFromPage(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToPage" type="" overloaded="no">
-        <autodoc>SetToPage(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinPage" type="" overloaded="no">
-        <autodoc>SetMinPage(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaxPage" type="" overloaded="no">
-        <autodoc>SetMaxPage(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNoCopies" type="" overloaded="no">
-        <autodoc>SetNoCopies(self, int v)</autodoc>
-        <paramlist>
-          <param name="v" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAllPages" type="" overloaded="no">
-        <autodoc>SetAllPages(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCollate" type="" overloaded="no">
-        <autodoc>SetCollate(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrintToFile" type="" overloaded="no">
-        <autodoc>SetPrintToFile(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSetupDialog" type="" overloaded="no">
-        <autodoc>SetSetupDialog(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnablePrintToFile" type="" overloaded="no">
-        <autodoc>EnablePrintToFile(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableSelection" type="" overloaded="no">
-        <autodoc>EnableSelection(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnablePageNumbers" type="" overloaded="no">
-        <autodoc>EnablePageNumbers(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableHelp" type="" overloaded="no">
-        <autodoc>EnableHelp(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEnablePrintToFile" type="bool" overloaded="no">
-        <autodoc>GetEnablePrintToFile(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnableSelection" type="bool" overloaded="no">
-        <autodoc>GetEnableSelection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnablePageNumbers" type="bool" overloaded="no">
-        <autodoc>GetEnablePageNumbers(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetEnableHelp" type="bool" overloaded="no">
-        <autodoc>GetEnableHelp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPrintData" type="PrintData" overloaded="no">
-        <autodoc>GetPrintData(self) -&gt; PrintData</autodoc>
-      </method>
-      <method name="SetPrintData" type="" overloaded="no">
-        <autodoc>SetPrintData(self, PrintData printData)</autodoc>
-        <paramlist>
-          <param name="printData" type="PrintData" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PrintDialog" oldname="wxPrintDialog" module="_windows">
-      <baseclass name="Dialog"/>
-      <constructor name="PrintDialog" overloaded="no">
-        <autodoc>__init__(self, Window parent, PrintDialogData data=None) -&gt; PrintDialog</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="data" type="PrintDialogData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPrintDialogData" type="PrintDialogData" overloaded="no">
-        <autodoc>GetPrintDialogData(self) -&gt; PrintDialogData</autodoc>
-      </method>
-      <method name="GetPrintDC" type="DC" overloaded="no">
-        <autodoc>GetPrintDC(self) -&gt; DC</autodoc>
-      </method>
-      <method name="ShowModal" type="int" overloaded="no">
-        <autodoc>ShowModal(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="Printer" oldname="wxPrinter" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="Printer" overloaded="no">
-        <autodoc>__init__(self, PrintDialogData data=None) -&gt; Printer</autodoc>
-        <paramlist>
-          <param name="data" type="PrintDialogData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPrinter" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="CreateAbortWindow" type="" overloaded="no">
-        <autodoc>CreateAbortWindow(self, Window parent, Printout printout)</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="printout" type="wxPyPrintout" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintDialogData" type="PrintDialogData" overloaded="no">
-        <autodoc>GetPrintDialogData(self) -&gt; PrintDialogData</autodoc>
-      </method>
-      <method name="Print" type="bool" overloaded="no">
-        <autodoc>Print(self, Window parent, Printout printout, int prompt=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="printout" type="wxPyPrintout" default=""/>
-          <param name="prompt" type="int" default="True"/>
-        </paramlist>
-      </method>
-      <method name="PrintDialog" type="DC" overloaded="no">
-        <autodoc>PrintDialog(self, Window parent) -&gt; DC</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="ReportError" type="" overloaded="no">
-        <autodoc>ReportError(self, Window parent, Printout printout, String message)</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="printout" type="wxPyPrintout" default=""/>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Setup" type="bool" overloaded="no">
-        <autodoc>Setup(self, Window parent) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAbort" type="bool" overloaded="no">
-        <autodoc>GetAbort(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="GetLastError" type="wxPrinterError" overloaded="no">
-        <autodoc>GetLastError() -&gt; int</autodoc>
-      </staticmethod>
-    </class>
-    <class name="Printout" oldname="wxPyPrintout" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="wxPyPrintout" overloaded="no">
-        <autodoc>__init__(self, String title=PrintoutTitleStr) -&gt; Printout</autodoc>
-        <paramlist>
-          <param name="title" type="String" default="wxPyPrintoutTitleStr"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTitle" type="String" overloaded="no">
-        <autodoc>GetTitle(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetDC" type="DC" overloaded="no">
-        <autodoc>GetDC(self) -&gt; DC</autodoc>
-      </method>
-      <method name="SetDC" type="" overloaded="no">
-        <autodoc>SetDC(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPageSizePixels" type="" overloaded="no">
-        <autodoc>SetPageSizePixels(self, int w, int h)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPageSizePixels" type="" overloaded="no">
-        <autodoc>GetPageSizePixels() -&gt; (w, h)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPageSizeMM" type="" overloaded="no">
-        <autodoc>SetPageSizeMM(self, int w, int h)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-          <param name="h" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPageSizeMM" type="" overloaded="no">
-        <autodoc>GetPageSizeMM() -&gt; (w, h)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPPIScreen" type="" overloaded="no">
-        <autodoc>SetPPIScreen(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPPIScreen" type="" overloaded="no">
-        <autodoc>GetPPIScreen() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPPIPrinter" type="" overloaded="no">
-        <autodoc>SetPPIPrinter(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPPIPrinter" type="" overloaded="no">
-        <autodoc>GetPPIPrinter() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsPreview" type="bool" overloaded="no">
-        <autodoc>IsPreview(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetIsPreview" type="" overloaded="no">
-        <autodoc>SetIsPreview(self, bool p)</autodoc>
-        <paramlist>
-          <param name="p" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDocument" type="bool" overloaded="no">
-        <autodoc>base_OnBeginDocument(self, int startPage, int endPage) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="startPage" type="int" default=""/>
-          <param name="endPage" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDocument" type="" overloaded="no">
-        <autodoc>base_OnEndDocument(self)</autodoc>
-      </method>
-      <method name="base_OnBeginPrinting" type="" overloaded="no">
-        <autodoc>base_OnBeginPrinting(self)</autodoc>
-      </method>
-      <method name="base_OnEndPrinting" type="" overloaded="no">
-        <autodoc>base_OnEndPrinting(self)</autodoc>
-      </method>
-      <method name="base_OnPreparePrinting" type="" overloaded="no">
-        <autodoc>base_OnPreparePrinting(self)</autodoc>
-      </method>
-      <method name="base_HasPage" type="bool" overloaded="no">
-        <autodoc>base_HasPage(self, int page) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="page" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetPageInfo" type="" overloaded="no">
-        <autodoc>base_GetPageInfo() -&gt; (minPage, maxPage, pageFrom, pageTo)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PreviewCanvas" oldname="wxPreviewCanvas" module="_windows">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="PreviewCanvas" overloaded="no">
-        <autodoc>__init__(self, PrintPreview preview, Window parent, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, 
-    String name=PreviewCanvasNameStr) -&gt; PreviewCanvas</autodoc>
-        <paramlist>
-          <param name="preview" type="wxPrintPreview" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPreviewCanvasNameStr"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="PreviewFrame" oldname="wxPreviewFrame" module="_windows">
-      <baseclass name="Frame"/>
-      <constructor name="PreviewFrame" overloaded="no">
-        <autodoc>__init__(self, PrintPreview preview, Frame parent, String title, Point pos=DefaultPosition, 
-    Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; PreviewFrame</autodoc>
-        <paramlist>
-          <param name="preview" type="wxPrintPreview" default=""/>
-          <param name="parent" type="Frame" default=""/>
-          <param name="title" type="String" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="Initialize" type="" overloaded="no">
-        <autodoc>Initialize(self)</autodoc>
-      </method>
-      <method name="CreateControlBar" type="" overloaded="no">
-        <autodoc>CreateControlBar(self)</autodoc>
-      </method>
-      <method name="CreateCanvas" type="" overloaded="no">
-        <autodoc>CreateCanvas(self)</autodoc>
-      </method>
-      <method name="GetControlBar" type="wxPreviewControlBar" overloaded="no">
-        <autodoc>GetControlBar(self) -&gt; PreviewControlBar</autodoc>
-      </method>
-    </class>
-    <class name="PreviewControlBar" oldname="wxPreviewControlBar" module="_windows">
-      <baseclass name="Panel"/>
-      <constructor name="PreviewControlBar" overloaded="no">
-        <autodoc>__init__(self, PrintPreview preview, long buttons, Window parent, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=TAB_TRAVERSAL, String name=PanelNameStr) -&gt; PreviewControlBar</autodoc>
-        <paramlist>
-          <param name="preview" type="wxPrintPreview" default=""/>
-          <param name="buttons" type="long" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTAB_TRAVERSAL"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="GetZoomControl" type="int" overloaded="no">
-        <autodoc>GetZoomControl(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetZoomControl" type="" overloaded="no">
-        <autodoc>SetZoomControl(self, int zoom)</autodoc>
-        <paramlist>
-          <param name="zoom" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintPreview" type="wxPrintPreview" overloaded="no">
-        <autodoc>GetPrintPreview(self) -&gt; PrintPreview</autodoc>
-      </method>
-      <method name="OnNext" type="" overloaded="no">
-        <autodoc>OnNext(self)</autodoc>
-      </method>
-      <method name="OnPrevious" type="" overloaded="no">
-        <autodoc>OnPrevious(self)</autodoc>
-      </method>
-      <method name="OnFirst" type="" overloaded="no">
-        <autodoc>OnFirst(self)</autodoc>
-      </method>
-      <method name="OnLast" type="" overloaded="no">
-        <autodoc>OnLast(self)</autodoc>
-      </method>
-      <method name="OnGoto" type="" overloaded="no">
-        <autodoc>OnGoto(self)</autodoc>
-      </method>
-    </class>
-    <class name="PrintPreview" oldname="wxPrintPreview" module="_windows">
-      <baseclass name="Object"/>
-      <constructor name="PrintPreview" overloaded="yes">
-        <paramlist>
-          <param name="printout" type="Printout" default=""/>
-          <param name="printoutForPrinting" type="Printout" default=""/>
-          <param name="data" type="PrintDialogData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrintPreview" overloaded="yes">
-        <autodoc>__init__(self, Printout printout, Printout printoutForPrinting, PrintDialogData data=None) -&gt; PrintPreview
-__init__(self, Printout printout, Printout printoutForPrinting, PrintData data) -&gt; PrintPreview</autodoc>
-        <paramlist>
-          <param name="printout" type="Printout" default=""/>
-          <param name="printoutForPrinting" type="Printout" default=""/>
-          <param name="data" type="PrintData" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="SetCurrentPage" type="bool" overloaded="no">
-        <autodoc>SetCurrentPage(self, int pageNum) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pageNum" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentPage" type="int" overloaded="no">
-        <autodoc>GetCurrentPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPrintout" type="" overloaded="no">
-        <autodoc>SetPrintout(self, Printout printout)</autodoc>
-        <paramlist>
-          <param name="printout" type="Printout" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintout" type="Printout" overloaded="no">
-        <autodoc>GetPrintout(self) -&gt; Printout</autodoc>
-      </method>
-      <method name="GetPrintoutForPrinting" type="Printout" overloaded="no">
-        <autodoc>GetPrintoutForPrinting(self) -&gt; Printout</autodoc>
-      </method>
-      <method name="SetFrame" type="" overloaded="no">
-        <autodoc>SetFrame(self, Frame frame)</autodoc>
-        <paramlist>
-          <param name="frame" type="Frame" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCanvas" type="" overloaded="no">
-        <autodoc>SetCanvas(self, PreviewCanvas canvas)</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFrame" type="Frame" overloaded="no">
-        <autodoc>GetFrame(self) -&gt; Frame</autodoc>
-      </method>
-      <method name="GetCanvas" type="PreviewCanvas" overloaded="no">
-        <autodoc>GetCanvas(self) -&gt; PreviewCanvas</autodoc>
-      </method>
-      <method name="PaintPage" type="bool" overloaded="no">
-        <autodoc>PaintPage(self, PreviewCanvas canvas, DC dc) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawBlankPage" type="bool" overloaded="no">
-        <autodoc>DrawBlankPage(self, PreviewCanvas canvas, DC dc) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="RenderPage" type="bool" overloaded="no">
-        <autodoc>RenderPage(self, int pageNum) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pageNum" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustScrollbars" type="" overloaded="no">
-        <autodoc>AdjustScrollbars(self, PreviewCanvas canvas)</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintDialogData" type="PrintDialogData" overloaded="no">
-        <autodoc>GetPrintDialogData(self) -&gt; PrintDialogData</autodoc>
-      </method>
-      <method name="SetZoom" type="" overloaded="no">
-        <autodoc>SetZoom(self, int percent)</autodoc>
-        <paramlist>
-          <param name="percent" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetZoom" type="int" overloaded="no">
-        <autodoc>GetZoom(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxPage" type="int" overloaded="no">
-        <autodoc>GetMaxPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMinPage" type="int" overloaded="no">
-        <autodoc>GetMinPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="Ok" type="bool" overloaded="no">
-        <autodoc>Ok(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetOk" type="" overloaded="no">
-        <autodoc>SetOk(self, bool ok)</autodoc>
-        <paramlist>
-          <param name="ok" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Print" type="bool" overloaded="no">
-        <autodoc>Print(self, bool interactive) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="interactive" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="DetermineScaling" type="" overloaded="no">
-        <autodoc>DetermineScaling(self)</autodoc>
-      </method>
-    </class>
-    <class name="PyPrintPreview" oldname="wxPyPrintPreview" module="_windows">
-      <baseclass name="PrintPreview"/>
-      <constructor name="PyPrintPreview" overloaded="yes">
-        <paramlist>
-          <param name="printout" type="Printout" default=""/>
-          <param name="printoutForPrinting" type="Printout" default=""/>
-          <param name="data" type="PrintDialogData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PyPrintPreview" overloaded="yes">
-        <autodoc>__init__(self, Printout printout, Printout printoutForPrinting, PrintDialogData data=None) -&gt; PyPrintPreview
-__init__(self, Printout printout, Printout printoutForPrinting, PrintData data) -&gt; PyPrintPreview</autodoc>
-        <paramlist>
-          <param name="printout" type="Printout" default=""/>
-          <param name="printoutForPrinting" type="Printout" default=""/>
-          <param name="data" type="PrintData" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetCurrentPage" type="bool" overloaded="no">
-        <autodoc>base_SetCurrentPage(self, int pageNum) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pageNum" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_PaintPage" type="bool" overloaded="no">
-        <autodoc>base_PaintPage(self, PreviewCanvas canvas, DC dc) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DrawBlankPage" type="bool" overloaded="no">
-        <autodoc>base_DrawBlankPage(self, PreviewCanvas canvas, DC dc) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RenderPage" type="bool" overloaded="no">
-        <autodoc>base_RenderPage(self, int pageNum) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pageNum" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetZoom" type="" overloaded="no">
-        <autodoc>base_SetZoom(self, int percent)</autodoc>
-        <paramlist>
-          <param name="percent" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_Print" type="bool" overloaded="no">
-        <autodoc>base_Print(self, bool interactive) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="interactive" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DetermineScaling" type="" overloaded="no">
-        <autodoc>base_DetermineScaling(self)</autodoc>
-      </method>
-    </class>
-    <class name="PyPreviewFrame" oldname="wxPyPreviewFrame" module="_windows">
-      <baseclass name="PreviewFrame"/>
-      <constructor name="PyPreviewFrame" overloaded="no">
-        <autodoc>__init__(self, PrintPreview preview, Frame parent, String title, Point pos=DefaultPosition, 
-    Size size=DefaultSize, 
-    long style=DEFAULT_FRAME_STYLE, String name=FrameNameStr) -&gt; PyPreviewFrame</autodoc>
-        <paramlist>
-          <param name="preview" type="PrintPreview" default=""/>
-          <param name="parent" type="Frame" default=""/>
-          <param name="title" type="String" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDEFAULT_FRAME_STYLE"/>
-          <param name="name" type="String" default="wxPyFrameNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPreviewCanvas" type="" overloaded="no">
-        <autodoc>SetPreviewCanvas(self, PreviewCanvas canvas)</autodoc>
-        <paramlist>
-          <param name="canvas" type="PreviewCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetControlBar" type="" overloaded="no">
-        <autodoc>SetControlBar(self, PreviewControlBar bar)</autodoc>
-        <paramlist>
-          <param name="bar" type="PreviewControlBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_Initialize" type="" overloaded="no">
-        <autodoc>base_Initialize(self)</autodoc>
-      </method>
-      <method name="base_CreateCanvas" type="" overloaded="no">
-        <autodoc>base_CreateCanvas(self)</autodoc>
-      </method>
-      <method name="base_CreateControlBar" type="" overloaded="no">
-        <autodoc>base_CreateControlBar(self)</autodoc>
-      </method>
-    </class>
-    <class name="PyPreviewControlBar" oldname="wxPyPreviewControlBar" module="_windows">
-      <baseclass name="PreviewControlBar"/>
-      <constructor name="PyPreviewControlBar" overloaded="no">
-        <autodoc>__init__(self, PrintPreview preview, long buttons, Window parent, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=PanelNameStr) -&gt; PyPreviewControlBar</autodoc>
-        <paramlist>
-          <param name="preview" type="PrintPreview" default=""/>
-          <param name="buttons" type="long" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrintPreview" type="" overloaded="no">
-        <autodoc>SetPrintPreview(self, PrintPreview preview)</autodoc>
-        <paramlist>
-          <param name="preview" type="PrintPreview" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_CreateButtons" type="" overloaded="no">
-        <autodoc>base_CreateButtons(self)</autodoc>
-      </method>
-      <method name="base_SetZoomControl" type="" overloaded="no">
-        <autodoc>base_SetZoomControl(self, int zoom)</autodoc>
-        <paramlist>
-          <param name="zoom" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-  </module>
-  <module name="_controls">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Button" oldname="wxButton" module="_controls">
-      <docstring>A button is a control that contains a text string, and is one of the most
-common elements of a GUI.  It may be placed on a dialog box or panel, or
-indeed almost any other window.
-
-Window Styles
--------------
-    ==============   ==========================================
-    wx.BU_LEFT       Left-justifies the label. Windows and GTK+ only.
-    wx.BU_TOP        Aligns the label to the top of the button.
-                     Windows and GTK+ only.
-    wx.BU_RIGHT      Right-justifies the bitmap label. Windows and GTK+ only.
-    wx.BU_BOTTOM     Aligns the label to the bottom of the button.
-                     Windows and GTK+ only.
-    wx.BU_EXACTFIT   Creates the button as small as possible
-                     instead of making it of the standard size
-                     (which is the default behaviour.)
-    ==============   ==========================================
-
-Events
-------
-    ============     ==========================================
-    EVT_BUTTON       Sent when the button is clicked.
-    ============     ==========================================
-
-:see: `wx.BitmapButton`
-</docstring>
-      <baseclass name="Control"/>
-      <constructor name="Button" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ButtonNameStr) -&gt; Button</autodoc>
-        <docstring>Create and show a button.  The preferred way to create standard
-buttons is to use a standard ID and an empty label.  In this case
-wxWigets will automatically use a stock label that coresponds to the
-ID given.  In additon, the button will be decorated with stock icons
-under GTK+ 2.
-
-The stock IDs and coresponding labels are
-
-    ==================      ====================
-    wx.ID_ADD               'Add'
-    wx.ID_APPLY             '\\&amp;Apply'
-    wx.ID_BOLD              '\\&amp;Bold'
-    wx.ID_CANCEL            '\\&amp;Cancel'
-    wx.ID_CLEAR             '\\&amp;Clear'
-    wx.ID_CLOSE             '\\&amp;Close'
-    wx.ID_COPY              '\\&amp;Copy'
-    wx.ID_CUT               'Cu\\&amp;t'
-    wx.ID_DELETE            '\\&amp;Delete'
-    wx.ID_FIND              '\\&amp;Find'
-    wx.ID_REPLACE           'Find and rep\\&amp;lace'
-    wx.ID_BACKWARD          '\\&amp;Back'
-    wx.ID_DOWN              '\\&amp;Down'
-    wx.ID_FORWARD           '\\&amp;Forward'
-    wx.ID_UP                '\\&amp;Up'
-    wx.ID_HELP              '\\&amp;Help'
-    wx.ID_HOME              '\\&amp;Home'
-    wx.ID_INDENT            'Indent'
-    wx.ID_INDEX             '\\&amp;Index'
-    wx.ID_ITALIC            '\\&amp;Italic'
-    wx.ID_JUSTIFY_CENTER    'Centered'
-    wx.ID_JUSTIFY_FILL      'Justified'
-    wx.ID_JUSTIFY_LEFT      'Align Left'
-    wx.ID_JUSTIFY_RIGHT     'Align Right'
-    wx.ID_NEW               '\\&amp;New'
-    wx.ID_NO                '\\&amp;No'
-    wx.ID_OK                '\\&amp;OK'
-    wx.ID_OPEN              '\\&amp;Open'
-    wx.ID_PASTE             '\\&amp;Paste'
-    wx.ID_PREFERENCES       '\\&amp;Preferences'
-    wx.ID_PRINT             '\\&amp;Print'
-    wx.ID_PREVIEW           'Print previe\\&amp;w'
-    wx.ID_PROPERTIES        '\\&amp;Properties'
-    wx.ID_EXIT              '\\&amp;Quit'
-    wx.ID_REDO              '\\&amp;Redo'
-    wx.ID_REFRESH           'Refresh'
-    wx.ID_REMOVE            'Remove'
-    wx.ID_REVERT_TO_SAVED   'Revert to Saved'
-    wx.ID_SAVE              '\\&amp;Save'
-    wx.ID_SAVEAS            'Save \\&amp;As...'
-    wx.ID_STOP              '\\&amp;Stop'
-    wx.ID_UNDELETE          'Undelete'
-    wx.ID_UNDERLINE         '\\&amp;Underline'
-    wx.ID_UNDO              '\\&amp;Undo'
-    wx.ID_UNINDENT          '\\&amp;Unindent'
-    wx.ID_YES               '\\&amp;Yes'
-    wx.ID_ZOOM_100          '\\&amp;Actual Size'
-    wx.ID_ZOOM_FIT          'Zoom to \\&amp;Fit'
-    wx.ID_ZOOM_IN           'Zoom \\&amp;In'
-    wx.ID_ZOOM_OUT          'Zoom \\&amp;Out'
-    ==================      ====================
-</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyButtonNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreButton" overloaded="no">
-        <autodoc>PreButton() -&gt; Button</autodoc>
-        <docstring>Precreate a Button for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ButtonNameStr) -&gt; bool</autodoc>
-        <docstring>Acutally create the GUI Button for 2-phase creation.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyButtonNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetDefault" type="" overloaded="no">
-        <autodoc>SetDefault(self)</autodoc>
-        <docstring>This sets the button to be the default item for the panel or dialog box.</docstring>
-      </method>
-      <staticmethod name="GetDefaultSize" type="Size" overloaded="no">
-        <autodoc>GetDefaultSize() -&gt; Size</autodoc>
-        <docstring>Returns the default button size for this platform.</docstring>
-      </staticmethod>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="BitmapButton" oldname="wxBitmapButton" module="_controls">
-      <docstring>A Button that contains a bitmap.  A bitmap button can be supplied with a
-single bitmap, and wxWidgets will draw all button states using this bitmap. If
-the application needs more control, additional bitmaps for the selected state,
-unpressed focused state, and greyed-out state may be supplied.       
-
-Window Styles
--------------
-    ==============  =============================================
-    wx.BU_AUTODRAW  If this is specified, the button will be drawn
-                    automatically using the label bitmap only,
-                    providing a 3D-look border. If this style is
-                    not specified, the button will be drawn
-                    without borders and using all provided
-                    bitmaps. WIN32 only.
-    wx.BU_LEFT      Left-justifies the label. WIN32 only.
-    wx.BU_TOP       Aligns the label to the top of the button. WIN32
-                    only.
-    wx.BU_RIGHT     Right-justifies the bitmap label. WIN32 only.
-    wx.BU_BOTTOM    Aligns the label to the bottom of the
-                    button. WIN32 only.
-    wx.BU_EXACTFIT  Creates the button as small as possible
-                    instead of making it of the standard size
-                    (which is the default behaviour.)
-    ==============  =============================================
-
-Events
-------
-     ===========   ==================================
-     EVT_BUTTON    Sent when the button is clicked.
-     ===========   ==================================
-
-:see: `wx.Button`, `wx.Bitmap`
-</docstring>
-      <baseclass name="Button"/>
-      <constructor name="BitmapButton" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Bitmap bitmap=wxNullBitmap, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=BU_AUTODRAW, Validator validator=DefaultValidator, 
-    String name=ButtonNameStr) -&gt; BitmapButton</autodoc>
-        <docstring>Create and show a button with a bitmap for the label.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxBU_AUTODRAW"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyButtonNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreBitmapButton" overloaded="no">
-        <autodoc>PreBitmapButton() -&gt; BitmapButton</autodoc>
-        <docstring>Precreate a BitmapButton for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Bitmap bitmap=wxNullBitmap, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=BU_AUTODRAW, Validator validator=DefaultValidator, 
-    String name=ButtonNameStr) -&gt; bool</autodoc>
-        <docstring>Acutally create the GUI BitmapButton for 2-phase creation.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxBU_AUTODRAW"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyButtonNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetBitmapLabel" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmapLabel(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the label bitmap (the one passed to the constructor).</docstring>
-      </method>
-      <method name="GetBitmapDisabled" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmapDisabled(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the bitmap for the disabled state.</docstring>
-      </method>
-      <method name="GetBitmapFocus" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmapFocus(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the bitmap for the focused state.</docstring>
-      </method>
-      <method name="GetBitmapSelected" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmapSelected(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the bitmap for the selected state.</docstring>
-      </method>
-      <method name="SetBitmapDisabled" type="" overloaded="no">
-        <autodoc>SetBitmapDisabled(self, Bitmap bitmap)</autodoc>
-        <docstring>Sets the bitmap for the disabled button appearance.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBitmapFocus" type="" overloaded="no">
-        <autodoc>SetBitmapFocus(self, Bitmap bitmap)</autodoc>
-        <docstring>Sets the bitmap for the button appearance when it has the keyboard focus.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBitmapSelected" type="" overloaded="no">
-        <autodoc>SetBitmapSelected(self, Bitmap bitmap)</autodoc>
-        <docstring>Sets the bitmap for the selected (depressed) button appearance.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBitmapLabel" type="" overloaded="no">
-        <autodoc>SetBitmapLabel(self, Bitmap bitmap)</autodoc>
-        <docstring>Sets the bitmap label for the button.  This is the bitmap used for the
-unselected state, and for all other states if no other bitmaps are provided.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginX" type="int" overloaded="no">
-        <autodoc>GetMarginX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMarginY" type="int" overloaded="no">
-        <autodoc>GetMarginY(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="CheckBox" oldname="wxCheckBox" module="_controls">
-      <docstring>A checkbox is a labelled box which by default is either on (the
-checkmark is visible) or off (no checkmark). Optionally (When the
-wx.CHK_3STATE style flag is set) it can have a third state, called the
-mixed or undetermined state. Often this is used as a "Does Not
-Apply" state.
-
-Window Styles
--------------
-    =================================  ===============================
-    wx.CHK_2STATE                      Create a 2-state checkbox. 
-                                       This is the default.
-    wx.CHK_3STATE                      Create a 3-state checkbox.
-    wx.CHK_ALLOW_3RD_STATE_FOR_USER    By default a user can't set a
-                                       3-state checkbox to the
-                                       third state. It can only be
-                                       done from code. Using this
-                                       flags allows the user to set
-                                       the checkbox to the third
-                                       state by clicking.
-                                       wx.ALIGN_RIGHT Makes the
-                                       text appear on the left of
-                                       the checkbox.
-    =================================  ===============================
-
-Events
-------
-    ===============================  ===============================
-    EVT_CHECKBOX                     Sent when checkbox is clicked.
-    ===============================  ===============================
-</docstring>
-      <baseclass name="Control"/>
-      <constructor name="CheckBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=CheckBoxNameStr) -&gt; CheckBox</autodoc>
-        <docstring>Creates and shows a CheckBox control</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyCheckBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreCheckBox" overloaded="no">
-        <autodoc>PreCheckBox() -&gt; CheckBox</autodoc>
-        <docstring>Precreate a CheckBox for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=CheckBoxNameStr) -&gt; bool</autodoc>
-        <docstring>Actually create the GUI CheckBox for 2-phase creation.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyCheckBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="bool" overloaded="no">
-        <autodoc>GetValue(self) -&gt; bool</autodoc>
-        <docstring>Gets the state of a 2-state CheckBox.  Returns True if it is checked,
-False otherwise.</docstring>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self) -&gt; bool</autodoc>
-        <docstring>Similar to GetValue, but raises an exception if it is not a 2-state
-CheckBox.</docstring>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, bool state)</autodoc>
-        <docstring>Set the state of a 2-state CheckBox.  Pass True for checked, False for
-unchecked.</docstring>
-        <paramlist>
-          <param name="state" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get3StateValue" type="wxCheckBoxState" overloaded="no">
-        <autodoc>Get3StateValue(self) -&gt; int</autodoc>
-        <docstring>Returns wx.CHK_UNCHECKED when the CheckBox is unchecked,
-wx.CHK_CHECKED when it is checked and wx.CHK_UNDETERMINED when it's in
-the undetermined state.  Raises an exceptiion when the function is
-used with a 2-state CheckBox.</docstring>
-      </method>
-      <method name="Set3StateValue" type="" overloaded="no">
-        <autodoc>Set3StateValue(self, int state)</autodoc>
-        <docstring>Sets the CheckBox to the given state.  The state parameter can be one
-of the following: wx.CHK_UNCHECKED (Check is off), wx.CHK_CHECKED (the
-Check is on) or wx.CHK_UNDETERMINED (Check is mixed). Raises an
-exception when the CheckBox is a 2-state checkbox and setting the
-state to wx.CHK_UNDETERMINED.</docstring>
-        <paramlist>
-          <param name="state" type="wxCheckBoxState" default=""/>
-        </paramlist>
-      </method>
-      <method name="Is3State" type="bool" overloaded="no">
-        <autodoc>Is3State(self) -&gt; bool</autodoc>
-        <docstring>Returns whether or not the CheckBox is a 3-state CheckBox.</docstring>
-      </method>
-      <method name="Is3rdStateAllowedForUser" type="bool" overloaded="no">
-        <autodoc>Is3rdStateAllowedForUser(self) -&gt; bool</autodoc>
-        <docstring>Returns whether or not the user can set the CheckBox to the third
-state.</docstring>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Choice" oldname="wxChoice" module="_controls">
-      <docstring>A Choice control is used to select one of a list of strings.
-Unlike a `wx.ListBox`, only the selection is visible until the
-user pulls down the menu of choices.
-
-Events
-------
-    ================    ==========================================
-    EVT_CHOICE          Sent when an item in the list is selected.
-    ================    ==========================================
-</docstring>
-      <baseclass name="ControlWithItems"/>
-      <constructor name="Choice" overloaded="no">
-        <autodoc>__init__(Window parent, int id, Point pos=DefaultPosition, Size size=DefaultSize,
-    List choices=[], long style=0, Validator validator=DefaultValidator,
-    String name=ChoiceNameStr) -&gt; Choice</autodoc>
-        <docstring>Create and show a Choice control</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyChoiceNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreChoice" overloaded="no">
-        <autodoc>PreChoice() -&gt; Choice</autodoc>
-        <docstring>Precreate a Choice control for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(Window parent, int id, Point pos=DefaultPosition, Size size=DefaultSize,
-    List choices=[], long style=0, Validator validator=DefaultValidator,
-    String name=ChoiceNameStr) -&gt; bool</autodoc>
-        <docstring>Actually create the GUI Choice control for 2-phase creation</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyChoiceNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int n)</autodoc>
-        <docstring>Select the n'th item (zero based) in the list.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStringSelection" type="bool" overloaded="no">
-        <autodoc>SetStringSelection(self, String string) -&gt; bool</autodoc>
-        <docstring>Select the item with the specifed string</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetString" type="" overloaded="no">
-        <autodoc>SetString(self, int n, String string)</autodoc>
-        <docstring>Set the label for the n'th item (zero based) in the list.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="string" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ComboBox" oldname="wxComboBox" module="_controls">
-      <docstring>A combobox is like a combination of an edit control and a
-listbox. It can be displayed as static list with editable or
-read-only text field; or a drop-down list with text field.
-
-A combobox permits a single selection only. Combobox items are
-numbered from zero.
-
-Styles
-------
-    ================    ===============================================
-    wx.CB_SIMPLE        Creates a combobox with a permanently
-                        displayed list.  Windows only.
-
-    wx.CB_DROPDOWN      Creates a combobox with a drop-down list.
-
-    wx.CB_READONLY      Same as wxCB_DROPDOWN but only the strings
-                        specified as the combobox choices can be
-                        selected, it is impossible to select
-                        (even from a program) a string which is
-                        not in the choices list.
-
-    wx.CB_SORT          Sorts the entries in the list alphabetically.
-    ================    ===============================================
-
-Events
--------
-    ================    ===============================================
-    EVT_COMBOBOX        Sent when an item on the list is selected.
-    EVT_TEXT            Sent when the combobox text changes.
-    ================    ===============================================
-</docstring>
-      <baseclass name="Control"/>
-      <baseclass name="ItemContainer"/>
-      <constructor name="ComboBox" overloaded="no">
-        <autodoc>__init__(Window parent, int id, String value=EmptyString,
-    Point pos=DefaultPosition, Size size=DefaultSize,
-    List choices=[], long style=0, Validator validator=DefaultValidator,
-    String name=ComboBoxNameStr) -&gt; ComboBox</autodoc>
-        <docstring>Constructor, creates and shows a ComboBox control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyComboBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreComboBox" overloaded="no">
-        <autodoc>PreComboBox() -&gt; ComboBox</autodoc>
-        <docstring>Precreate a ComboBox control for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(Window parent, int id, String value=EmptyString,
-    Point pos=DefaultPosition, Size size=DefaultSize,
-    List choices=[], long style=0, Validator validator=DefaultValidator,
-    String name=ChoiceNameStr) -&gt; bool</autodoc>
-        <docstring>Actually create the GUI wxComboBox control for 2-phase creation</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyChoiceNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-        <docstring>Returns the current value in the combobox text field.</docstring>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, String value)</autodoc>
-        <paramlist>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Copy" type="" overloaded="no">
-        <autodoc>Copy(self)</autodoc>
-        <docstring>Copies the selected text to the clipboard.</docstring>
-      </method>
-      <method name="Cut" type="" overloaded="no">
-        <autodoc>Cut(self)</autodoc>
-        <docstring>Copies the selected text to the clipboard and removes the selection.</docstring>
-      </method>
-      <method name="Paste" type="" overloaded="no">
-        <autodoc>Paste(self)</autodoc>
-        <docstring>Pastes text from the clipboard to the text field.</docstring>
-      </method>
-      <method name="SetInsertionPoint" type="" overloaded="no">
-        <autodoc>SetInsertionPoint(self, long pos)</autodoc>
-        <docstring>Sets the insertion point in the combobox text field.</docstring>
-        <paramlist>
-          <param name="pos" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetInsertionPoint" type="long" overloaded="no">
-        <autodoc>GetInsertionPoint(self) -&gt; long</autodoc>
-        <docstring>Returns the insertion point for the combobox's text field.</docstring>
-      </method>
-      <method name="GetLastPosition" type="long" overloaded="no">
-        <autodoc>GetLastPosition(self) -&gt; long</autodoc>
-        <docstring>Returns the last position in the combobox text field.</docstring>
-      </method>
-      <method name="Replace" type="" overloaded="no">
-        <autodoc>Replace(self, long from, long to, String value)</autodoc>
-        <docstring>Replaces the text between two positions with the given text, in the
-combobox text field.</docstring>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int n)</autodoc>
-        <docstring>Sets the item at index 'n' to be the selected item.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMark" type="" overloaded="no">
-        <autodoc>SetMark(self, long from, long to)</autodoc>
-        <docstring>Selects the text between the two positions in the combobox text field.</docstring>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStringSelection" type="bool" overloaded="no">
-        <autodoc>SetStringSelection(self, String string) -&gt; bool</autodoc>
-        <docstring>Select the item with the specifed string</docstring>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetString" type="" overloaded="no">
-        <autodoc>SetString(self, int n, String string)</autodoc>
-        <docstring>Set the label for the n'th item (zero based) in the list.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="string" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEditable" type="" overloaded="no">
-        <autodoc>SetEditable(self, bool editable)</autodoc>
-        <paramlist>
-          <param name="editable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetInsertionPointEnd" type="" overloaded="no">
-        <autodoc>SetInsertionPointEnd(self)</autodoc>
-        <docstring>Sets the insertion point at the end of the combobox text field.</docstring>
-      </method>
-      <method name="Remove" type="" overloaded="no">
-        <autodoc>Remove(self, long from, long to)</autodoc>
-        <docstring>Removes the text between the two positions in the combobox text field.</docstring>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Gauge" oldname="wxGauge" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="Gauge" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, int range=100, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=GA_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=GaugeNameStr) -&gt; Gauge</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="range" type="int" default="100"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxGA_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyGaugeNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreGauge" overloaded="no">
-        <autodoc>PreGauge() -&gt; Gauge</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, int range=100, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=GA_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=GaugeNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="range" type="int" default="100"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxGA_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyGaugeNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetRange" type="" overloaded="no">
-        <autodoc>SetRange(self, int range)</autodoc>
-        <paramlist>
-          <param name="range" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRange" type="int" overloaded="no">
-        <autodoc>GetRange(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="int" overloaded="no">
-        <autodoc>GetValue(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetShadowWidth" type="" overloaded="no">
-        <autodoc>SetShadowWidth(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetShadowWidth" type="int" overloaded="no">
-        <autodoc>GetShadowWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetBezelFace" type="" overloaded="no">
-        <autodoc>SetBezelFace(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBezelFace" type="int" overloaded="no">
-        <autodoc>GetBezelFace(self) -&gt; int</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StaticBox" oldname="wxStaticBox" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="StaticBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticBoxNameStr) -&gt; StaticBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStaticBox" overloaded="no">
-        <autodoc>PreStaticBox() -&gt; StaticBox</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticBoxNameStr"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StaticLine" oldname="wxStaticLine" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="StaticLine" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LI_HORIZONTAL, 
-    String name=StaticTextNameStr) -&gt; StaticLine</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLI_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPyStaticTextNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStaticLine" overloaded="no">
-        <autodoc>PreStaticLine() -&gt; StaticLine</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LI_HORIZONTAL, 
-    String name=StaticTextNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLI_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPyStaticTextNameStr"/>
-        </paramlist>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="GetDefaultSize" type="int" overloaded="no">
-        <autodoc>GetDefaultSize() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StaticText" oldname="wxStaticText" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="StaticText" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticTextNameStr) -&gt; StaticText</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticTextNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStaticText" overloaded="no">
-        <autodoc>PreStaticText() -&gt; StaticText</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticTextNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticTextNameStr"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="StaticBitmap" oldname="wxStaticBitmap" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="StaticBitmap" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Bitmap bitmap=wxNullBitmap, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticBitmapNameStr) -&gt; StaticBitmap</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticBitmapNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStaticBitmap" overloaded="no">
-        <autodoc>PreStaticBitmap() -&gt; StaticBitmap</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Bitmap bitmap=wxNullBitmap, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, String name=StaticBitmapNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyStaticBitmapNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="SetBitmap" type="" overloaded="no">
-        <autodoc>SetBitmap(self, Bitmap bitmap)</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetIcon" type="" overloaded="no">
-        <autodoc>SetIcon(self, Icon icon)</autodoc>
-        <paramlist>
-          <param name="icon" type="Icon" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListBox" oldname="wxListBox" module="_controls">
-      <baseclass name="ControlWithItems"/>
-      <constructor name="ListBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, wxArrayString choices=wxPyEmptyStringArray, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ListBoxNameStr) -&gt; ListBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreListBox" overloaded="no">
-        <autodoc>PreListBox() -&gt; ListBox</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, wxArrayString choices=wxPyEmptyStringArray, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ListBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="Insert" type="" overloaded="no">
-        <autodoc>Insert(self, String item, int pos, PyObject clientData=None)</autodoc>
-        <docstring>Insert an item into the control before the item at the ``pos`` index,
-optionally associating some data object with the item.</docstring>
-        <paramlist>
-          <param name="item" type="String" default=""/>
-          <param name="pos" type="int" default=""/>
-          <param name="clientData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertItems" type="" overloaded="no">
-        <autodoc>InsertItems(self, wxArrayString items, int pos)</autodoc>
-        <paramlist>
-          <param name="items" type="wxArrayString" default=""/>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, wxArrayString items)</autodoc>
-        <paramlist>
-          <param name="items" type="wxArrayString" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSelected" type="bool" overloaded="no">
-        <autodoc>IsSelected(self, int n) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int n, bool select=True)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="select" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Select" type="" overloaded="no">
-        <autodoc>Select(self, int n)</autodoc>
-        <docstring>Sets the item at index 'n' to be the selected item.</docstring>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Deselect" type="" overloaded="no">
-        <autodoc>Deselect(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeselectAll" type="" overloaded="no">
-        <autodoc>DeselectAll(self, int itemToLeaveSelected=-1)</autodoc>
-        <paramlist>
-          <param name="itemToLeaveSelected" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetStringSelection" type="bool" overloaded="no">
-        <autodoc>SetStringSelection(self, String s, bool select=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-          <param name="select" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetSelections" type="PyObject" overloaded="no">
-        <autodoc>GetSelections(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetFirstItem" type="" overloaded="no">
-        <autodoc>SetFirstItem(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFirstItemStr" type="" overloaded="no">
-        <autodoc>SetFirstItemStr(self, String s)</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisible" type="" overloaded="no">
-        <autodoc>EnsureVisible(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AppendAndEnsureVisible" type="" overloaded="no">
-        <autodoc>AppendAndEnsureVisible(self, String s)</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSorted" type="bool" overloaded="no">
-        <autodoc>IsSorted(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetItemForegroundColour" type="" overloaded="no">
-        <autodoc>SetItemForegroundColour(self, int item, Colour c)</autodoc>
-        <paramlist>
-          <param name="item" type="int" default=""/>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemBackgroundColour" type="" overloaded="no">
-        <autodoc>SetItemBackgroundColour(self, int item, Colour c)</autodoc>
-        <paramlist>
-          <param name="item" type="int" default=""/>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemFont" type="" overloaded="no">
-        <autodoc>SetItemFont(self, int item, Font f)</autodoc>
-        <paramlist>
-          <param name="item" type="int" default=""/>
-          <param name="f" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="CheckListBox" oldname="wxCheckListBox" module="_controls">
-      <baseclass name="ListBox"/>
-      <constructor name="CheckListBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, wxArrayString choices=wxPyEmptyStringArray, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ListBoxNameStr) -&gt; CheckListBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreCheckListBox" overloaded="no">
-        <autodoc>PreCheckListBox() -&gt; CheckListBox</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, wxArrayString choices=wxPyEmptyStringArray, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ListBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="IsChecked" type="bool" overloaded="no">
-        <autodoc>IsChecked(self, int index) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Check" type="" overloaded="no">
-        <autodoc>Check(self, int index, int check=True)</autodoc>
-        <paramlist>
-          <param name="index" type="int" default=""/>
-          <param name="check" type="int" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetItemHeight" type="int" overloaded="no">
-        <autodoc>GetItemHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="HitTest" type="int" overloaded="no">
-        <autodoc>HitTest(self, Point pt) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTestXY" type="int" overloaded="no">
-        <autodoc>HitTestXY(self, int x, int y) -&gt; int</autodoc>
-        <docstring>Test where the given (in client coords) point lies</docstring>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TextAttr" oldname="wxTextAttr" module="_controls">
-      <constructor name="TextAttr" overloaded="no">
-        <autodoc>__init__(self, Colour colText=wxNullColour, Colour colBack=wxNullColour, 
-    Font font=wxNullFont, int alignment=TEXT_ALIGNMENT_DEFAULT) -&gt; TextAttr</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default="wxNullColour"/>
-          <param name="colBack" type="Colour" default="wxNullColour"/>
-          <param name="font" type="Font" default="wxNullFont"/>
-          <param name="alignment" type="wxTextAttrAlignment" default="wxTEXT_ALIGNMENT_DEFAULT"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxTextAttr" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Init" type="" overloaded="no">
-        <autodoc>Init(self)</autodoc>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colText)</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colBack)</autodoc>
-        <paramlist>
-          <param name="colBack" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font, long flags=TEXT_ATTR_FONT)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-          <param name="flags" type="long" default="wxTEXT_ATTR_FONT"/>
-        </paramlist>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int alignment)</autodoc>
-        <paramlist>
-          <param name="alignment" type="wxTextAttrAlignment" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTabs" type="" overloaded="no">
-        <autodoc>SetTabs(self, wxArrayInt tabs)</autodoc>
-        <paramlist>
-          <param name="tabs" type="wxArrayInt" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLeftIndent" type="" overloaded="no">
-        <autodoc>SetLeftIndent(self, int indent, int subIndent=0)</autodoc>
-        <paramlist>
-          <param name="indent" type="int" default=""/>
-          <param name="subIndent" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetRightIndent" type="" overloaded="no">
-        <autodoc>SetRightIndent(self, int indent)</autodoc>
-        <paramlist>
-          <param name="indent" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, long flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasTextColour" type="bool" overloaded="no">
-        <autodoc>HasTextColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBackgroundColour" type="bool" overloaded="no">
-        <autodoc>HasBackgroundColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasFont" type="bool" overloaded="no">
-        <autodoc>HasFont(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasAlignment" type="bool" overloaded="no">
-        <autodoc>HasAlignment(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasTabs" type="bool" overloaded="no">
-        <autodoc>HasTabs(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasLeftIndent" type="bool" overloaded="no">
-        <autodoc>HasLeftIndent(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasRightIndent" type="bool" overloaded="no">
-        <autodoc>HasRightIndent(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasFlag" type="bool" overloaded="no">
-        <autodoc>HasFlag(self, long flag) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="flag" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetAlignment" type="wxTextAttrAlignment" overloaded="no">
-        <autodoc>GetAlignment(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetTabs" type="wxArrayInt" overloaded="no">
-        <autodoc>GetTabs(self) -&gt; wxArrayInt</autodoc>
-      </method>
-      <method name="GetLeftIndent" type="long" overloaded="no">
-        <autodoc>GetLeftIndent(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetLeftSubIndent" type="long" overloaded="no">
-        <autodoc>GetLeftSubIndent(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetRightIndent" type="long" overloaded="no">
-        <autodoc>GetRightIndent(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetFlags" type="long" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; long</autodoc>
-      </method>
-      <method name="IsDefault" type="bool" overloaded="no">
-        <autodoc>IsDefault(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="Combine" type="TextAttr" overloaded="no">
-        <autodoc>Combine(TextAttr attr, TextAttr attrDef, TextCtrl text) -&gt; TextAttr</autodoc>
-        <paramlist>
-          <param name="attr" type="TextAttr" default=""/>
-          <param name="attrDef" type="TextAttr" default=""/>
-          <param name="text" type="wxTextCtrl" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="TextCtrl" oldname="wxTextCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="TextCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String value=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=TextCtrlNameStr) -&gt; TextCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTextCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreTextCtrl" overloaded="no">
-        <autodoc>PreTextCtrl() -&gt; TextCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String value=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=TextCtrlNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTextCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, String value)</autodoc>
-        <paramlist>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRange" type="String" overloaded="no">
-        <autodoc>GetRange(self, long from, long to) -&gt; String</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineLength" type="int" overloaded="no">
-        <autodoc>GetLineLength(self, long lineNo) -&gt; int</autodoc>
-        <paramlist>
-          <param name="lineNo" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineText" type="String" overloaded="no">
-        <autodoc>GetLineText(self, long lineNo) -&gt; String</autodoc>
-        <paramlist>
-          <param name="lineNo" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNumberOfLines" type="int" overloaded="no">
-        <autodoc>GetNumberOfLines(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsModified" type="bool" overloaded="no">
-        <autodoc>IsModified(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsEditable" type="bool" overloaded="no">
-        <autodoc>IsEditable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsSingleLine" type="bool" overloaded="no">
-        <autodoc>IsSingleLine(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsMultiLine" type="bool" overloaded="no">
-        <autodoc>IsMultiLine(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSelection" type="" overloaded="no">
-        <autodoc>GetSelection() -&gt; (from, to)</autodoc>
-        <docstring>If the return values from and to are the same, there is no selection.</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStringSelection" type="String" overloaded="no">
-        <autodoc>GetStringSelection(self) -&gt; String</autodoc>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="Replace" type="" overloaded="no">
-        <autodoc>Replace(self, long from, long to, String value)</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Remove" type="" overloaded="no">
-        <autodoc>Remove(self, long from, long to)</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String file) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="file" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SaveFile" type="bool" overloaded="no">
-        <autodoc>SaveFile(self, String file=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="file" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="MarkDirty" type="" overloaded="no">
-        <autodoc>MarkDirty(self)</autodoc>
-      </method>
-      <method name="DiscardEdits" type="" overloaded="no">
-        <autodoc>DiscardEdits(self)</autodoc>
-      </method>
-      <method name="SetMaxLength" type="" overloaded="no">
-        <autodoc>SetMaxLength(self, unsigned long len)</autodoc>
-        <paramlist>
-          <param name="len" type="unsigned long" default=""/>
-        </paramlist>
-      </method>
-      <method name="WriteText" type="" overloaded="no">
-        <autodoc>WriteText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AppendText" type="" overloaded="no">
-        <autodoc>AppendText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EmulateKeyPress" type="bool" overloaded="no">
-        <autodoc>EmulateKeyPress(self, KeyEvent event) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="bool" overloaded="no">
-        <autodoc>SetStyle(self, long start, long end, TextAttr style) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="start" type="long" default=""/>
-          <param name="end" type="long" default=""/>
-          <param name="style" type="TextAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStyle" type="bool" overloaded="no">
-        <autodoc>GetStyle(self, long position, TextAttr style) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="position" type="long" default=""/>
-          <param name="style" type="TextAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultStyle" type="bool" overloaded="no">
-        <autodoc>SetDefaultStyle(self, TextAttr style) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="style" type="TextAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultStyle" type="TextAttr" overloaded="no">
-        <autodoc>GetDefaultStyle(self) -&gt; TextAttr</autodoc>
-      </method>
-      <method name="XYToPosition" type="long" overloaded="no">
-        <autodoc>XYToPosition(self, long x, long y) -&gt; long</autodoc>
-        <paramlist>
-          <param name="x" type="long" default=""/>
-          <param name="y" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="PositionToXY" type="" overloaded="no">
-        <autodoc>PositionToXY(long pos) -&gt; (x, y)</autodoc>
-        <paramlist>
-          <param name="pos" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowPosition" type="" overloaded="no">
-        <autodoc>ShowPosition(self, long pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="wxTextCtrlHitTestResult" overloaded="no">
-        <autodoc>HitTest(Point pt) -&gt; (result, row, col)</autodoc>
-        <docstring>Find the row, col coresponding to the character at the point given in
-pixels. NB: pt is in device coords but is not adjusted for the client
-area origin nor scrolling.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTestPos" type="wxTextCtrlHitTestResult" overloaded="no">
-        <autodoc>HitTestPos(Point pt) -&gt; (result, position)</autodoc>
-        <docstring>Find the character position in the text coresponding to the point
-given in pixels. NB: pt is in device coords but is not adjusted for
-the client area origin nor scrolling. </docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="Copy" type="" overloaded="no">
-        <autodoc>Copy(self)</autodoc>
-      </method>
-      <method name="Cut" type="" overloaded="no">
-        <autodoc>Cut(self)</autodoc>
-      </method>
-      <method name="Paste" type="" overloaded="no">
-        <autodoc>Paste(self)</autodoc>
-      </method>
-      <method name="CanCopy" type="bool" overloaded="no">
-        <autodoc>CanCopy(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanCut" type="bool" overloaded="no">
-        <autodoc>CanCut(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanPaste" type="bool" overloaded="no">
-        <autodoc>CanPaste(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Undo" type="" overloaded="no">
-        <autodoc>Undo(self)</autodoc>
-      </method>
-      <method name="Redo" type="" overloaded="no">
-        <autodoc>Redo(self)</autodoc>
-      </method>
-      <method name="CanUndo" type="bool" overloaded="no">
-        <autodoc>CanUndo(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanRedo" type="bool" overloaded="no">
-        <autodoc>CanRedo(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetInsertionPoint" type="" overloaded="no">
-        <autodoc>SetInsertionPoint(self, long pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetInsertionPointEnd" type="" overloaded="no">
-        <autodoc>SetInsertionPointEnd(self)</autodoc>
-      </method>
-      <method name="GetInsertionPoint" type="long" overloaded="no">
-        <autodoc>GetInsertionPoint(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetLastPosition" type="long" overloaded="no">
-        <autodoc>GetLastPosition(self) -&gt; long</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, long from, long to)</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="" overloaded="no">
-        <autodoc>SelectAll(self)</autodoc>
-      </method>
-      <method name="SetEditable" type="" overloaded="no">
-        <autodoc>SetEditable(self, bool editable)</autodoc>
-        <paramlist>
-          <param name="editable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="write" type="" overloaded="no">
-        <autodoc>write(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetString" type="String" overloaded="no">
-        <autodoc>GetString(self, long from, long to) -&gt; String</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="TextUrlEvent" oldname="wxTextUrlEvent" module="_controls">
-      <baseclass name="CommandEvent"/>
-      <constructor name="TextUrlEvent" overloaded="no">
-        <autodoc>__init__(self, int winid, MouseEvent evtMouse, long start, long end) -&gt; TextUrlEvent</autodoc>
-        <paramlist>
-          <param name="winid" type="int" default=""/>
-          <param name="evtMouse" type="MouseEvent" default=""/>
-          <param name="start" type="long" default=""/>
-          <param name="end" type="long" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetMouseEvent" type="MouseEvent" overloaded="no">
-        <autodoc>GetMouseEvent(self) -&gt; MouseEvent</autodoc>
-      </method>
-      <method name="GetURLStart" type="long" overloaded="no">
-        <autodoc>GetURLStart(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetURLEnd" type="long" overloaded="no">
-        <autodoc>GetURLEnd(self) -&gt; long</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-EVT_TEXT        = wx.PyEventBinder( wxEVT_COMMAND_TEXT_UPDATED, 1)
-EVT_TEXT_ENTER  = wx.PyEventBinder( wxEVT_COMMAND_TEXT_ENTER, 1)
-EVT_TEXT_URL    = wx.PyEventBinder( wxEVT_COMMAND_TEXT_URL, 1) 
-EVT_TEXT_MAXLEN = wx.PyEventBinder( wxEVT_COMMAND_TEXT_MAXLEN, 1)
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ScrollBar" oldname="wxScrollBar" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="ScrollBar" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SB_HORIZONTAL, 
-    Validator validator=DefaultValidator, String name=ScrollBarNameStr) -&gt; ScrollBar</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSB_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyScrollBarNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreScrollBar" overloaded="no">
-        <autodoc>PreScrollBar() -&gt; ScrollBar</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SB_HORIZONTAL, 
-    Validator validator=DefaultValidator, String name=ScrollBarNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSB_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyScrollBarNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetThumbPosition" type="int" overloaded="no">
-        <autodoc>GetThumbPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetThumbSize" type="int" overloaded="no">
-        <autodoc>GetThumbSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPageSize" type="int" overloaded="no">
-        <autodoc>GetPageSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRange" type="int" overloaded="no">
-        <autodoc>GetRange(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetThumbPosition" type="" overloaded="no">
-        <autodoc>SetThumbPosition(self, int viewStart)</autodoc>
-        <paramlist>
-          <param name="viewStart" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetScrollbar" type="" overloaded="no">
-        <autodoc>SetScrollbar(self, int position, int thumbSize, int range, int pageSize, 
-    bool refresh=True)</autodoc>
-        <docstring>Sets the scrollbar properties of a built-in scrollbar.
-    :param orientation: Determines the scrollbar whose page size is to
-                 be set. May be wx.HORIZONTAL or wx.VERTICAL.
-
-    :param position: The position of the scrollbar in scroll units.
-
-    :param thumbSize: The size of the thumb, or visible portion of the
-                 scrollbar, in scroll units.
-
-    :param range: The maximum position of the scrollbar.
-
-    :param refresh: True to redraw the scrollbar, false otherwise.
-</docstring>
-        <paramlist>
-          <param name="position" type="int" default=""/>
-          <param name="thumbSize" type="int" default=""/>
-          <param name="range" type="int" default=""/>
-          <param name="pageSize" type="int" default=""/>
-          <param name="refresh" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SpinButton" oldname="wxSpinButton" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="SpinButton" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SP_HORIZONTAL, 
-    String name=SPIN_BUTTON_NAME) -&gt; SpinButton</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPySPIN_BUTTON_NAME"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSpinButton" overloaded="no">
-        <autodoc>PreSpinButton() -&gt; SpinButton</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SP_HORIZONTAL, 
-    String name=SPIN_BUTTON_NAME) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPySPIN_BUTTON_NAME"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="int" overloaded="no">
-        <autodoc>GetValue(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMin" type="int" overloaded="no">
-        <autodoc>GetMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMax" type="int" overloaded="no">
-        <autodoc>GetMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMin" type="" overloaded="no">
-        <autodoc>SetMin(self, int minVal)</autodoc>
-        <paramlist>
-          <param name="minVal" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMax" type="" overloaded="no">
-        <autodoc>SetMax(self, int maxVal)</autodoc>
-        <paramlist>
-          <param name="maxVal" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRange" type="" overloaded="no">
-        <autodoc>SetRange(self, int minVal, int maxVal)</autodoc>
-        <paramlist>
-          <param name="minVal" type="int" default=""/>
-          <param name="maxVal" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="SpinCtrl" oldname="wxSpinCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="SpinCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String value=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=SP_ARROW_KEYS, int min=0, int max=100, 
-    int initial=0, String name=SpinCtrlNameStr) -&gt; SpinCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_ARROW_KEYS"/>
-          <param name="min" type="int" default="0"/>
-          <param name="max" type="int" default="100"/>
-          <param name="initial" type="int" default="0"/>
-          <param name="name" type="String" default="wxPySpinCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSpinCtrl" overloaded="no">
-        <autodoc>PreSpinCtrl() -&gt; SpinCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String value=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=SP_ARROW_KEYS, int min=0, int max=100, 
-    int initial=0, String name=SpinCtrlNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_ARROW_KEYS"/>
-          <param name="min" type="int" default="0"/>
-          <param name="max" type="int" default="100"/>
-          <param name="initial" type="int" default="0"/>
-          <param name="name" type="String" default="wxPySpinCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="int" overloaded="no">
-        <autodoc>GetValue(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int value)</autodoc>
-        <paramlist>
-          <param name="value" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValueString" type="" overloaded="no">
-        <autodoc>SetValueString(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRange" type="" overloaded="no">
-        <autodoc>SetRange(self, int minVal, int maxVal)</autodoc>
-        <paramlist>
-          <param name="minVal" type="int" default=""/>
-          <param name="maxVal" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMin" type="int" overloaded="no">
-        <autodoc>GetMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMax" type="int" overloaded="no">
-        <autodoc>GetMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, long from, long to)</autodoc>
-        <paramlist>
-          <param name="from" type="long" default=""/>
-          <param name="to" type="long" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="SpinEvent" oldname="wxSpinEvent" module="_controls">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="SpinEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int winid=0) -&gt; SpinEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPosition" type="int" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-EVT_SPIN_UP   = wx.PyEventBinder( wx.wxEVT_SCROLL_LINEUP, 1)
-EVT_SPIN_DOWN = wx.PyEventBinder( wx.wxEVT_SCROLL_LINEDOWN, 1)
-EVT_SPIN      = wx.PyEventBinder( wx.wxEVT_SCROLL_THUMBTRACK, 1)
-EVT_SPINCTRL  = wx.PyEventBinder( wxEVT_COMMAND_SPINCTRL_UPDATED, 1)
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="RadioBox" oldname="wxRadioBox" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="RadioBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    wxArrayString choices=wxPyEmptyStringArray, 
-    int majorDimension=0, long style=RA_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=RadioBoxNameStr) -&gt; RadioBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="majorDimension" type="int" default="0"/>
-          <param name="style" type="long" default="wxRA_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyRadioBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreRadioBox" overloaded="no">
-        <autodoc>PreRadioBox() -&gt; RadioBox</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    wxArrayString choices=wxPyEmptyStringArray, 
-    int majorDimension=0, long style=RA_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=RadioBoxNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="choices" type="wxArrayString" default="wxPyEmptyStringArray"/>
-          <param name="majorDimension" type="int" default="0"/>
-          <param name="style" type="long" default="wxRA_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyRadioBoxNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStringSelection" type="String" overloaded="no">
-        <autodoc>GetStringSelection(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetStringSelection" type="bool" overloaded="no">
-        <autodoc>SetStringSelection(self, String s) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="FindString" type="int" overloaded="no">
-        <autodoc>FindString(self, String s) -&gt; int</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetString" type="String" overloaded="no">
-        <autodoc>GetString(self, int n) -&gt; String</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetString" type="" overloaded="no">
-        <autodoc>SetString(self, int n, String label)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableItem" type="" overloaded="no">
-        <autodoc>EnableItem(self, int n, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="ShowItem" type="" overloaded="no">
-        <autodoc>ShowItem(self, int n, bool show=True)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="show" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetColumnCount" type="int" overloaded="no">
-        <autodoc>GetColumnCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRowCount" type="int" overloaded="no">
-        <autodoc>GetRowCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNextItem" type="int" overloaded="no">
-        <autodoc>GetNextItem(self, int item, int dir, long style) -&gt; int</autodoc>
-        <paramlist>
-          <param name="item" type="int" default=""/>
-          <param name="dir" type="wxDirection" default=""/>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="RadioButton" oldname="wxRadioButton" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="RadioButton" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=RadioButtonNameStr) -&gt; RadioButton</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyRadioButtonNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreRadioButton" overloaded="no">
-        <autodoc>PreRadioButton() -&gt; RadioButton</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=RadioButtonNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyRadioButtonNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="bool" overloaded="no">
-        <autodoc>GetValue(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, bool value)</autodoc>
-        <paramlist>
-          <param name="value" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Slider" oldname="wxSlider" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="Slider" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, int value=0, int minValue=0, 
-    int maxValue=100, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SL_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=SliderNameStr) -&gt; Slider</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="int" default="0"/>
-          <param name="minValue" type="int" default="0"/>
-          <param name="maxValue" type="int" default="100"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSL_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPySliderNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSlider" overloaded="no">
-        <autodoc>PreSlider() -&gt; Slider</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, int value=0, int minValue=0, 
-    int maxValue=100, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=SL_HORIZONTAL, 
-    Validator validator=DefaultValidator, 
-    String name=SliderNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="value" type="int" default="0"/>
-          <param name="minValue" type="int" default="0"/>
-          <param name="maxValue" type="int" default="100"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSL_HORIZONTAL"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPySliderNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="int" overloaded="no">
-        <autodoc>GetValue(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int value)</autodoc>
-        <paramlist>
-          <param name="value" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRange" type="" overloaded="no">
-        <autodoc>SetRange(self, int minValue, int maxValue)</autodoc>
-        <paramlist>
-          <param name="minValue" type="int" default=""/>
-          <param name="maxValue" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMin" type="int" overloaded="no">
-        <autodoc>GetMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMax" type="int" overloaded="no">
-        <autodoc>GetMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMin" type="" overloaded="no">
-        <autodoc>SetMin(self, int minValue)</autodoc>
-        <paramlist>
-          <param name="minValue" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMax" type="" overloaded="no">
-        <autodoc>SetMax(self, int maxValue)</autodoc>
-        <paramlist>
-          <param name="maxValue" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLineSize" type="" overloaded="no">
-        <autodoc>SetLineSize(self, int lineSize)</autodoc>
-        <paramlist>
-          <param name="lineSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPageSize" type="" overloaded="no">
-        <autodoc>SetPageSize(self, int pageSize)</autodoc>
-        <paramlist>
-          <param name="pageSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineSize" type="int" overloaded="no">
-        <autodoc>GetLineSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPageSize" type="int" overloaded="no">
-        <autodoc>GetPageSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetThumbLength" type="" overloaded="no">
-        <autodoc>SetThumbLength(self, int lenPixels)</autodoc>
-        <paramlist>
-          <param name="lenPixels" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetThumbLength" type="int" overloaded="no">
-        <autodoc>GetThumbLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetTickFreq" type="" overloaded="no">
-        <autodoc>SetTickFreq(self, int n, int pos=1)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-          <param name="pos" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="GetTickFreq" type="int" overloaded="no">
-        <autodoc>GetTickFreq(self) -&gt; int</autodoc>
-      </method>
-      <method name="ClearTicks" type="" overloaded="no">
-        <autodoc>ClearTicks(self)</autodoc>
-      </method>
-      <method name="SetTick" type="" overloaded="no">
-        <autodoc>SetTick(self, int tickPos)</autodoc>
-        <paramlist>
-          <param name="tickPos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearSel" type="" overloaded="no">
-        <autodoc>ClearSel(self)</autodoc>
-      </method>
-      <method name="GetSelEnd" type="int" overloaded="no">
-        <autodoc>GetSelEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetSelStart" type="int" overloaded="no">
-        <autodoc>GetSelStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int min, int max)</autodoc>
-        <paramlist>
-          <param name="min" type="int" default=""/>
-          <param name="max" type="int" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-    EVT_TOGGLEBUTTON = wx.PyEventBinder( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, 1)
-</pythoncode>
-    <class name="ToggleButton" oldname="wxToggleButton" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="ToggleButton" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ToggleButtonNameStr) -&gt; ToggleButton</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyToggleButtonNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreToggleButton" overloaded="no">
-        <autodoc>PreToggleButton() -&gt; ToggleButton</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=0, Validator validator=DefaultValidator, 
-    String name=ToggleButtonNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyToggleButtonNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, bool value)</autodoc>
-        <paramlist>
-          <param name="value" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="bool" overloaded="no">
-        <autodoc>GetValue(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, String label)</autodoc>
-        <docstring>Sets the item's text.</docstring>
-        <paramlist>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="BookCtrl" oldname="wxBookCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <method name="GetPageCount" type="size_t" overloaded="no">
-        <autodoc>GetPageCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetPage" type="Window" overloaded="no">
-        <autodoc>GetPage(self, size_t n) -&gt; Window</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPageText" type="bool" overloaded="no">
-        <autodoc>SetPageText(self, size_t n, String strText) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-          <param name="strText" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPageText" type="String" overloaded="no">
-        <autodoc>GetPageText(self, size_t n) -&gt; String</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetImageList" type="" overloaded="no">
-        <autodoc>SetImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignImageList" type="" overloaded="no">
-        <autodoc>AssignImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetImageList" type="ImageList" overloaded="no">
-        <autodoc>GetImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="GetPageImage" type="int" overloaded="no">
-        <autodoc>GetPageImage(self, size_t n) -&gt; int</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPageImage" type="bool" overloaded="no">
-        <autodoc>SetPageImage(self, size_t n, int imageId) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-          <param name="imageId" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPageSize" type="" overloaded="no">
-        <autodoc>SetPageSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcSizeFromPage" type="Size" overloaded="no">
-        <autodoc>CalcSizeFromPage(self, Size sizePage) -&gt; Size</autodoc>
-        <paramlist>
-          <param name="sizePage" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeletePage" type="bool" overloaded="no">
-        <autodoc>DeletePage(self, size_t n) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemovePage" type="bool" overloaded="no">
-        <autodoc>RemovePage(self, size_t n) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllPages" type="bool" overloaded="no">
-        <autodoc>DeleteAllPages(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AddPage" type="bool" overloaded="no">
-        <autodoc>AddPage(self, Window page, String text, bool select=False, int imageId=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="page" type="Window" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="select" type="bool" default="False"/>
-          <param name="imageId" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="InsertPage" type="bool" overloaded="no">
-        <autodoc>InsertPage(self, size_t n, Window page, String text, bool select=False, 
-    int imageId=-1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-          <param name="page" type="Window" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="select" type="bool" default="False"/>
-          <param name="imageId" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetSelection" type="int" overloaded="no">
-        <autodoc>SetSelection(self, size_t n) -&gt; int</autodoc>
-        <paramlist>
-          <param name="n" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdvanceSelection" type="" overloaded="no">
-        <autodoc>AdvanceSelection(self, bool forward=True)</autodoc>
-        <paramlist>
-          <param name="forward" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="BookCtrlEvent" oldname="wxBookCtrlEvent" module="_controls">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="BookCtrlEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0, int nSel=-1, 
-    int nOldSel=-1) -&gt; BookCtrlEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-          <param name="nSel" type="int" default="-1"/>
-          <param name="nOldSel" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <method name="GetSelection" type="int" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int nSel)</autodoc>
-        <paramlist>
-          <param name="nSel" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOldSelection" type="int" overloaded="no">
-        <autodoc>GetOldSelection(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetOldSelection" type="" overloaded="no">
-        <autodoc>SetOldSelection(self, int nOldSel)</autodoc>
-        <paramlist>
-          <param name="nOldSel" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Notebook" oldname="wxNotebook" module="_controls">
-      <baseclass name="BookCtrl"/>
-      <constructor name="Notebook" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=NOTEBOOK_NAME) -&gt; Notebook</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyNOTEBOOK_NAME"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreNotebook" overloaded="no">
-        <autodoc>PreNotebook() -&gt; Notebook</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=NOTEBOOK_NAME) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyNOTEBOOK_NAME"/>
-        </paramlist>
-      </method>
-      <method name="GetRowCount" type="int" overloaded="no">
-        <autodoc>GetRowCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPadding" type="" overloaded="no">
-        <autodoc>SetPadding(self, Size padding)</autodoc>
-        <paramlist>
-          <param name="padding" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTabSize" type="" overloaded="no">
-        <autodoc>SetTabSize(self, Size sz)</autodoc>
-        <paramlist>
-          <param name="sz" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="int" overloaded="no">
-        <autodoc>HitTest(Point pt) -&gt; (tab, where)</autodoc>
-        <docstring>Returns the tab which is hit, and flags indicating where using
-wx.NB_HITTEST flags.</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalcSizeFromPage" type="Size" overloaded="no">
-        <autodoc>CalcSizeFromPage(self, Size sizePage) -&gt; Size</autodoc>
-        <paramlist>
-          <param name="sizePage" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="NotebookEvent" oldname="wxNotebookEvent" module="_controls">
-      <baseclass name="BookCtrlEvent"/>
-      <constructor name="NotebookEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0, int nSel=-1, 
-    int nOldSel=-1) -&gt; NotebookEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-          <param name="nSel" type="int" default="-1"/>
-          <param name="nOldSel" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-    # wxNotebook events
-    EVT_NOTEBOOK_PAGE_CHANGED  = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 1 )
-    EVT_NOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 1 )
-</pythoncode>
-    <pythoncode>
-#----------------------------------------------------------------------------
-
-class NotebookPage(wx.Panel):
-    """
-    There is an old (and apparently unsolvable) bug when placing a
-    window with a nonstandard background colour in a wxNotebook on
-    wxGTK, as the notbooks's background colour would always be used
-    when the window is refreshed.  The solution is to place a panel in
-    the notbook and the coloured window on the panel, sized to cover
-    the panel.  This simple class does that for you, just put an
-    instance of this in the notebook and make your regular window a
-    child of this one and it will handle the resize for you.
-    """
-    def __init__(self, parent, id=-1,
-                 pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=wx.TAB_TRAVERSAL, name="panel"):
-        wx.Panel.__init__(self, parent, id, pos, size, style, name)
-        self.child = None
-        EVT_SIZE(self, self.OnSize)
-        
-    def OnSize(self, evt):
-        if self.child is None:
-            children = self.GetChildren()
-            if len(children):
-                self.child = children[0]
-        if self.child:
-            self.child.SetPosition((0,0))
-            self.child.SetSize(self.GetSize())
-
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Listbook" oldname="wxListbook" module="_controls">
-      <baseclass name="BookCtrl"/>
-      <constructor name="Listbook" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=EmptyString) -&gt; Listbook</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreListbook" overloaded="no">
-        <autodoc>PreListbook() -&gt; Listbook</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="ListbookEvent" oldname="wxListbookEvent" module="_controls">
-      <baseclass name="BookCtrlEvent"/>
-      <constructor name="ListbookEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0, int nSel=-1, 
-    int nOldSel=-1) -&gt; ListbookEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-          <param name="nSel" type="int" default="-1"/>
-          <param name="nOldSel" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-    EVT_LISTBOOK_PAGE_CHANGED  = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, 1 )
-    EVT_LISTBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, 1 )
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="BookCtrlSizer" oldname="wxBookCtrlSizer" module="_controls">
-      <baseclass name="Sizer"/>
-      <constructor name="BookCtrlSizer" overloaded="no">
-        <autodoc>__init__(self, BookCtrl nb) -&gt; BookCtrlSizer</autodoc>
-        <paramlist>
-          <param name="nb" type="BookCtrl" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="RecalcSizes" type="" overloaded="no">
-        <autodoc>RecalcSizes(self)</autodoc>
-        <docstring>Using the sizes calculated by `CalcMin` reposition and resize all the
-items managed by this sizer.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="CalcMin" type="Size" overloaded="no">
-        <autodoc>CalcMin(self) -&gt; Size</autodoc>
-        <docstring>This method is where the sizer will do the actual calculation of its
-children's minimal sizes.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="GetControl" type="BookCtrl" overloaded="no">
-        <autodoc>GetControl(self) -&gt; BookCtrl</autodoc>
-      </method>
-    </class>
-    <class name="NotebookSizer" oldname="wxNotebookSizer" module="_controls">
-      <baseclass name="Sizer"/>
-      <constructor name="NotebookSizer" overloaded="no">
-        <autodoc>__init__(self, Notebook nb) -&gt; NotebookSizer</autodoc>
-        <paramlist>
-          <param name="nb" type="Notebook" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="RecalcSizes" type="" overloaded="no">
-        <autodoc>RecalcSizes(self)</autodoc>
-        <docstring>Using the sizes calculated by `CalcMin` reposition and resize all the
-items managed by this sizer.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="CalcMin" type="Size" overloaded="no">
-        <autodoc>CalcMin(self) -&gt; Size</autodoc>
-        <docstring>This method is where the sizer will do the actual calculation of its
-children's minimal sizes.  You should not need to call this directly as
-it is called by `Layout`.</docstring>
-      </method>
-      <method name="GetNotebook" type="Notebook" overloaded="no">
-        <autodoc>GetNotebook(self) -&gt; Notebook</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ToolBarToolBase" oldname="wxToolBarToolBase" module="_controls">
-      <baseclass name="Object"/>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetControl" type="Control" overloaded="no">
-        <autodoc>GetControl(self) -&gt; Control</autodoc>
-      </method>
-      <method name="GetToolBar" type="wxToolBarBase" overloaded="no">
-        <autodoc>GetToolBar(self) -&gt; ToolBarBase</autodoc>
-      </method>
-      <method name="IsButton" type="int" overloaded="no">
-        <autodoc>IsButton(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsControl" type="int" overloaded="no">
-        <autodoc>IsControl(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsSeparator" type="int" overloaded="no">
-        <autodoc>IsSeparator(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStyle" type="int" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetKind" type="wxItemKind" overloaded="no">
-        <autodoc>GetKind(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsToggled" type="bool" overloaded="no">
-        <autodoc>IsToggled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanBeToggled" type="bool" overloaded="no">
-        <autodoc>CanBeToggled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetNormalBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetNormalBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="GetDisabledBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetDisabledBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetShortHelp" type="String" overloaded="no">
-        <autodoc>GetShortHelp(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetLongHelp" type="String" overloaded="no">
-        <autodoc>GetLongHelp(self) -&gt; String</autodoc>
-      </method>
-      <method name="Enable" type="bool" overloaded="no">
-        <autodoc>Enable(self, bool enable) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Toggle" type="" overloaded="no">
-        <autodoc>Toggle(self)</autodoc>
-      </method>
-      <method name="SetToggle" type="bool" overloaded="no">
-        <autodoc>SetToggle(self, bool toggle) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="toggle" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetShortHelp" type="bool" overloaded="no">
-        <autodoc>SetShortHelp(self, String help) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="help" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLongHelp" type="bool" overloaded="no">
-        <autodoc>SetLongHelp(self, String help) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="help" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNormalBitmap" type="" overloaded="no">
-        <autodoc>SetNormalBitmap(self, Bitmap bmp)</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDisabledBitmap" type="" overloaded="no">
-        <autodoc>SetDisabledBitmap(self, Bitmap bmp)</autodoc>
-        <paramlist>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, String label)</autodoc>
-        <paramlist>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Detach" type="" overloaded="no">
-        <autodoc>Detach(self)</autodoc>
-      </method>
-      <method name="Attach" type="" overloaded="no">
-        <autodoc>Attach(self, ToolBarBase tbar)</autodoc>
-        <paramlist>
-          <param name="tbar" type="wxToolBarBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetClientData" type="PyObject" overloaded="no">
-        <autodoc>GetClientData(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetClientData" type="" overloaded="no">
-        <autodoc>SetClientData(self, PyObject clientData)</autodoc>
-        <paramlist>
-          <param name="clientData" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ToolBarBase" oldname="wxToolBarBase" module="_controls">
-      <baseclass name="Control"/>
-      <method name="DoAddTool" type="ToolBarToolBase" overloaded="no">
-        <autodoc>DoAddTool(self, int id, String label, Bitmap bitmap, Bitmap bmpDisabled=wxNullBitmap, 
-    int kind=ITEM_NORMAL, String shortHelp=EmptyString, 
-    String longHelp=EmptyString, 
-    PyObject clientData=None) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="bmpDisabled" type="Bitmap" default="wxNullBitmap"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-          <param name="shortHelp" type="String" default="wxPyEmptyString"/>
-          <param name="longHelp" type="String" default="wxPyEmptyString"/>
-          <param name="clientData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="DoInsertTool" type="ToolBarToolBase" overloaded="no">
-        <autodoc>DoInsertTool(self, size_t pos, int id, String label, Bitmap bitmap, Bitmap bmpDisabled=wxNullBitmap, 
-    int kind=ITEM_NORMAL, 
-    String shortHelp=EmptyString, String longHelp=EmptyString, 
-    PyObject clientData=None) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-          <param name="bitmap" type="Bitmap" default=""/>
-          <param name="bmpDisabled" type="Bitmap" default="wxNullBitmap"/>
-          <param name="kind" type="wxItemKind" default="wxITEM_NORMAL"/>
-          <param name="shortHelp" type="String" default="wxPyEmptyString"/>
-          <param name="longHelp" type="String" default="wxPyEmptyString"/>
-          <param name="clientData" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AddToolItem" type="ToolBarToolBase" overloaded="no">
-        <autodoc>AddToolItem(self, ToolBarToolBase tool) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="tool" type="ToolBarToolBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertToolItem" type="ToolBarToolBase" overloaded="no">
-        <autodoc>InsertToolItem(self, size_t pos, ToolBarToolBase tool) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="tool" type="ToolBarToolBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddControl" type="ToolBarToolBase" overloaded="no">
-        <autodoc>AddControl(self, Control control) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="control" type="Control" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertControl" type="ToolBarToolBase" overloaded="no">
-        <autodoc>InsertControl(self, size_t pos, Control control) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="control" type="Control" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindControl" type="Control" overloaded="no">
-        <autodoc>FindControl(self, int id) -&gt; Control</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddSeparator" type="ToolBarToolBase" overloaded="no">
-        <autodoc>AddSeparator(self) -&gt; ToolBarToolBase</autodoc>
-      </method>
-      <method name="InsertSeparator" type="ToolBarToolBase" overloaded="no">
-        <autodoc>InsertSeparator(self, size_t pos) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveTool" type="ToolBarToolBase" overloaded="no">
-        <autodoc>RemoveTool(self, int id) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteToolByPos" type="bool" overloaded="no">
-        <autodoc>DeleteToolByPos(self, size_t pos) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteTool" type="bool" overloaded="no">
-        <autodoc>DeleteTool(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearTools" type="" overloaded="no">
-        <autodoc>ClearTools(self)</autodoc>
-      </method>
-      <method name="Realize" type="bool" overloaded="no">
-        <autodoc>Realize(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EnableTool" type="" overloaded="no">
-        <autodoc>EnableTool(self, int id, bool enable)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="enable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="ToggleTool" type="" overloaded="no">
-        <autodoc>ToggleTool(self, int id, bool toggle)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="toggle" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToggle" type="" overloaded="no">
-        <autodoc>SetToggle(self, int id, bool toggle)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="toggle" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolClientData" type="PyObject" overloaded="no">
-        <autodoc>GetToolClientData(self, int id) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolClientData" type="" overloaded="no">
-        <autodoc>SetToolClientData(self, int id, PyObject clientData)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="clientData" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolPos" type="int" overloaded="no">
-        <autodoc>GetToolPos(self, int id) -&gt; int</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolState" type="bool" overloaded="no">
-        <autodoc>GetToolState(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolEnabled" type="bool" overloaded="no">
-        <autodoc>GetToolEnabled(self, int id) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolShortHelp" type="" overloaded="no">
-        <autodoc>SetToolShortHelp(self, int id, String helpString)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="helpString" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolShortHelp" type="String" overloaded="no">
-        <autodoc>GetToolShortHelp(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolLongHelp" type="" overloaded="no">
-        <autodoc>SetToolLongHelp(self, int id, String helpString)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="helpString" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolLongHelp" type="String" overloaded="no">
-        <autodoc>GetToolLongHelp(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginsXY" type="" overloaded="no">
-        <autodoc>SetMarginsXY(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolPacking" type="" overloaded="no">
-        <autodoc>SetToolPacking(self, int packing)</autodoc>
-        <paramlist>
-          <param name="packing" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolSeparation" type="" overloaded="no">
-        <autodoc>SetToolSeparation(self, int separation)</autodoc>
-        <paramlist>
-          <param name="separation" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolMargins" type="Size" overloaded="no">
-        <autodoc>GetToolMargins(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetMargins" type="Size" overloaded="no">
-        <autodoc>GetMargins(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetToolPacking" type="int" overloaded="no">
-        <autodoc>GetToolPacking(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetToolSeparation" type="int" overloaded="no">
-        <autodoc>GetToolSeparation(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRows" type="" overloaded="no">
-        <autodoc>SetRows(self, int nRows)</autodoc>
-        <paramlist>
-          <param name="nRows" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMaxRowsCols" type="" overloaded="no">
-        <autodoc>SetMaxRowsCols(self, int rows, int cols)</autodoc>
-        <paramlist>
-          <param name="rows" type="int" default=""/>
-          <param name="cols" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaxRows" type="int" overloaded="no">
-        <autodoc>GetMaxRows(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxCols" type="int" overloaded="no">
-        <autodoc>GetMaxCols(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetToolBitmapSize" type="" overloaded="no">
-        <autodoc>SetToolBitmapSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetToolBitmapSize" type="Size" overloaded="no">
-        <autodoc>GetToolBitmapSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetToolSize" type="Size" overloaded="no">
-        <autodoc>GetToolSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="FindToolForPosition" type="ToolBarToolBase" overloaded="no">
-        <autodoc>FindToolForPosition(self, int x, int y) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindById" type="ToolBarToolBase" overloaded="no">
-        <autodoc>FindById(self, int toolid) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="toolid" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsVertical" type="bool" overloaded="no">
-        <autodoc>IsVertical(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="ToolBar" oldname="wxToolBar" module="_controls">
-      <baseclass name="ToolBarBase"/>
-      <constructor name="ToolBar" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxNO_BORDER|wxTB_HORIZONTAL, 
-    String name=wxPyToolBarNameStr) -&gt; ToolBar</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxNO_BORDER|wxTB_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPyToolBarNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreToolBar" overloaded="no">
-        <autodoc>PreToolBar() -&gt; ToolBar</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxNO_BORDER|wxTB_HORIZONTAL, 
-    String name=wxPyToolBarNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxNO_BORDER|wxTB_HORIZONTAL"/>
-          <param name="name" type="String" default="wxPyToolBarNameStr"/>
-        </paramlist>
-      </method>
-      <method name="FindToolForPosition" type="ToolBarToolBase" overloaded="no">
-        <autodoc>FindToolForPosition(self, int x, int y) -&gt; ToolBarToolBase</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListItemAttr" oldname="wxListItemAttr" module="_controls">
-      <constructor name="ListItemAttr" overloaded="no">
-        <autodoc>__init__(self, Colour colText=wxNullColour, Colour colBack=wxNullColour, 
-    Font font=wxNullFont) -&gt; ListItemAttr</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default="wxNullColour"/>
-          <param name="colBack" type="Colour" default="wxNullColour"/>
-          <param name="font" type="Font" default="wxNullFont"/>
-        </paramlist>
-      </constructor>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colText)</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colBack)</autodoc>
-        <paramlist>
-          <param name="colBack" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasTextColour" type="bool" overloaded="no">
-        <autodoc>HasTextColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBackgroundColour" type="bool" overloaded="no">
-        <autodoc>HasBackgroundColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasFont" type="bool" overloaded="no">
-        <autodoc>HasFont(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListItem" oldname="wxListItem" module="_controls">
-      <baseclass name="Object"/>
-      <constructor name="ListItem" overloaded="no">
-        <autodoc>__init__(self) -&gt; ListItem</autodoc>
-      </constructor>
-      <destructor name="~wxListItem" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="ClearAttributes" type="" overloaded="no">
-        <autodoc>ClearAttributes(self)</autodoc>
-      </method>
-      <method name="SetMask" type="" overloaded="no">
-        <autodoc>SetMask(self, long mask)</autodoc>
-        <paramlist>
-          <param name="mask" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, long id)</autodoc>
-        <paramlist>
-          <param name="id" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumn" type="" overloaded="no">
-        <autodoc>SetColumn(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetState" type="" overloaded="no">
-        <autodoc>SetState(self, long state)</autodoc>
-        <paramlist>
-          <param name="state" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStateMask" type="" overloaded="no">
-        <autodoc>SetStateMask(self, long stateMask)</autodoc>
-        <paramlist>
-          <param name="stateMask" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetImage" type="" overloaded="no">
-        <autodoc>SetImage(self, int image)</autodoc>
-        <paramlist>
-          <param name="image" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetData" type="" overloaded="no">
-        <autodoc>SetData(self, long data)</autodoc>
-        <paramlist>
-          <param name="data" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlign" type="" overloaded="no">
-        <autodoc>SetAlign(self, int align)</autodoc>
-        <paramlist>
-          <param name="align" type="wxListColumnFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colText)</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colBack)</autodoc>
-        <paramlist>
-          <param name="colBack" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMask" type="long" overloaded="no">
-        <autodoc>GetMask(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetId" type="long" overloaded="no">
-        <autodoc>GetId(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetColumn" type="int" overloaded="no">
-        <autodoc>GetColumn(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetState" type="long" overloaded="no">
-        <autodoc>GetState(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetImage" type="int" overloaded="no">
-        <autodoc>GetImage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetData" type="long" overloaded="no">
-        <autodoc>GetData(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAlign" type="wxListColumnFormat" overloaded="no">
-        <autodoc>GetAlign(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAttributes" type="ListItemAttr" overloaded="no">
-        <autodoc>GetAttributes(self) -&gt; ListItemAttr</autodoc>
-      </method>
-      <method name="HasAttributes" type="bool" overloaded="no">
-        <autodoc>HasAttributes(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <property name="m_mask" type="long" readonly="no"/>
-      <property name="m_itemId" type="long" readonly="no"/>
-      <property name="m_col" type="int" readonly="no"/>
-      <property name="m_state" type="long" readonly="no"/>
-      <property name="m_stateMask" type="long" readonly="no"/>
-      <property name="m_text" type="String" readonly="no"/>
-      <property name="m_image" type="int" readonly="no"/>
-      <property name="m_data" type="long" readonly="no"/>
-      <property name="m_format" type="int" readonly="no"/>
-      <property name="m_width" type="int" readonly="no"/>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListEvent" oldname="wxListEvent" module="_controls">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="ListEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0) -&gt; ListEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <property name="m_code" type="int" readonly="no"/>
-      <property name="m_oldItemIndex" type="long" readonly="no"/>
-      <property name="m_itemIndex" type="long" readonly="no"/>
-      <property name="m_col" type="int" readonly="no"/>
-      <property name="m_pointDrag" type="Point" readonly="no"/>
-      <property name="m_item" type="ListItem" readonly="yes"/>
-      <method name="GetKeyCode" type="int" overloaded="no">
-        <autodoc>GetKeyCode(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetIndex" type="long" overloaded="no">
-        <autodoc>GetIndex(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetColumn" type="int" overloaded="no">
-        <autodoc>GetColumn(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPoint" type="Point" overloaded="no">
-        <autodoc>GetPoint(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetImage" type="int" overloaded="no">
-        <autodoc>GetImage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetData" type="long" overloaded="no">
-        <autodoc>GetData(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetMask" type="long" overloaded="no">
-        <autodoc>GetMask(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetItem" type="ListItem" overloaded="no">
-        <autodoc>GetItem(self) -&gt; ListItem</autodoc>
-      </method>
-      <method name="GetCacheFrom" type="long" overloaded="no">
-        <autodoc>GetCacheFrom(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetCacheTo" type="long" overloaded="no">
-        <autodoc>GetCacheTo(self) -&gt; long</autodoc>
-      </method>
-      <method name="IsEditCancelled" type="bool" overloaded="no">
-        <autodoc>IsEditCancelled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetEditCanceled" type="" overloaded="no">
-        <autodoc>SetEditCanceled(self, bool editCancelled)</autodoc>
-        <paramlist>
-          <param name="editCancelled" type="bool" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-
-EVT_LIST_BEGIN_DRAG        = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_DRAG       , 1)
-EVT_LIST_BEGIN_RDRAG       = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_RDRAG      , 1)
-EVT_LIST_BEGIN_LABEL_EDIT  = wx.PyEventBinder(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT , 1)
-EVT_LIST_END_LABEL_EDIT    = wx.PyEventBinder(wxEVT_COMMAND_LIST_END_LABEL_EDIT   , 1)
-EVT_LIST_DELETE_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ITEM      , 1)
-EVT_LIST_DELETE_ALL_ITEMS  = wx.PyEventBinder(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS , 1)
-EVT_LIST_GET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_GET_INFO         , 1)
-EVT_LIST_SET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_LIST_SET_INFO         , 1)
-EVT_LIST_ITEM_SELECTED     = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_SELECTED    , 1)
-EVT_LIST_ITEM_DESELECTED   = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_DESELECTED  , 1)
-EVT_LIST_KEY_DOWN          = wx.PyEventBinder(wxEVT_COMMAND_LIST_KEY_DOWN         , 1)
-EVT_LIST_INSERT_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_LIST_INSERT_ITEM      , 1)
-EVT_LIST_COL_CLICK         = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_CLICK        , 1)
-EVT_LIST_ITEM_RIGHT_CLICK  = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK , 1)
-EVT_LIST_ITEM_MIDDLE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, 1)
-EVT_LIST_ITEM_ACTIVATED    = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_ACTIVATED   , 1)
-EVT_LIST_CACHE_HINT        = wx.PyEventBinder(wxEVT_COMMAND_LIST_CACHE_HINT       , 1)
-EVT_LIST_COL_RIGHT_CLICK   = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK  , 1)
-EVT_LIST_COL_BEGIN_DRAG    = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG   , 1)
-EVT_LIST_COL_DRAGGING      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_DRAGGING     , 1)
-EVT_LIST_COL_END_DRAG      = wx.PyEventBinder(wxEVT_COMMAND_LIST_COL_END_DRAG     , 1)
-EVT_LIST_ITEM_FOCUSED      = wx.PyEventBinder(wxEVT_COMMAND_LIST_ITEM_FOCUSED     , 1)
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListCtrl" oldname="wxPyListCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="wxPyListCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LC_ICON, 
-    Validator validator=DefaultValidator, String name=ListCtrlNameStr) -&gt; ListCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLC_ICON"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreListCtrl" overloaded="no">
-        <autodoc>PreListCtrl() -&gt; ListCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LC_ICON, 
-    Validator validator=DefaultValidator, String name=ListCtrlNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLC_ICON"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetForegroundColour" type="bool" overloaded="no">
-        <autodoc>SetForegroundColour(self, Colour col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="bool" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumn" type="ListItem" overloaded="no">
-        <autodoc>GetColumn(self, int col) -&gt; ListItem</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumn" type="bool" overloaded="no">
-        <autodoc>SetColumn(self, int col, ListItem item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="item" type="ListItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnWidth" type="int" overloaded="no">
-        <autodoc>GetColumnWidth(self, int col) -&gt; int</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumnWidth" type="bool" overloaded="no">
-        <autodoc>SetColumnWidth(self, int col, int width) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCountPerPage" type="int" overloaded="no">
-        <autodoc>GetCountPerPage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetViewRect" type="Rect" overloaded="no">
-        <autodoc>GetViewRect(self) -&gt; Rect</autodoc>
-      </method>
-      <method name="GetItem" type="ListItem" overloaded="no">
-        <autodoc>GetItem(self, long itemId, int col=0) -&gt; ListItem</autodoc>
-        <paramlist>
-          <param name="itemId" type="long" default=""/>
-          <param name="col" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetItem" type="bool" overloaded="no">
-        <autodoc>SetItem(self, ListItem info) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="info" type="ListItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStringItem" type="long" overloaded="no">
-        <autodoc>SetStringItem(self, long index, int col, String label, int imageId=-1) -&gt; long</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="label" type="String" default=""/>
-          <param name="imageId" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetItemState" type="int" overloaded="no">
-        <autodoc>GetItemState(self, long item, long stateMask) -&gt; int</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="stateMask" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemState" type="bool" overloaded="no">
-        <autodoc>SetItemState(self, long item, long state, long stateMask) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="state" type="long" default=""/>
-          <param name="stateMask" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemImage" type="bool" overloaded="no">
-        <autodoc>SetItemImage(self, long item, int image, int selImage) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="image" type="int" default=""/>
-          <param name="selImage" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemText" type="String" overloaded="no">
-        <autodoc>GetItemText(self, long item) -&gt; String</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemText" type="" overloaded="no">
-        <autodoc>SetItemText(self, long item, String str)</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemData" type="long" overloaded="no">
-        <autodoc>GetItemData(self, long item) -&gt; long</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemData" type="bool" overloaded="no">
-        <autodoc>SetItemData(self, long item, long data) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="data" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPosition" type="Point" overloaded="no">
-        <autodoc>GetItemPosition(self, long item) -&gt; Point</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemRect" type="Rect" overloaded="no">
-        <autodoc>GetItemRect(self, long item, int code=LIST_RECT_BOUNDS) -&gt; Rect</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="code" type="int" default="wxLIST_RECT_BOUNDS"/>
-        </paramlist>
-      </method>
-      <method name="SetItemPosition" type="bool" overloaded="no">
-        <autodoc>SetItemPosition(self, long item, Point pos) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemCount" type="int" overloaded="no">
-        <autodoc>GetItemCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetColumnCount" type="int" overloaded="no">
-        <autodoc>GetColumnCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetItemSpacing" type="Size" overloaded="no">
-        <autodoc>GetItemSpacing(self) -&gt; Size</autodoc>
-      </method>
-      <method name="SetItemSpacing" type="" overloaded="no">
-        <autodoc>SetItemSpacing(self, int spacing, bool isSmall=False)</autodoc>
-        <paramlist>
-          <param name="spacing" type="int" default=""/>
-          <param name="isSmall" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedItemCount" type="int" overloaded="no">
-        <autodoc>GetSelectedItemCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour col)</autodoc>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTopItem" type="long" overloaded="no">
-        <autodoc>GetTopItem(self) -&gt; long</autodoc>
-      </method>
-      <method name="SetSingleStyle" type="" overloaded="no">
-        <autodoc>SetSingleStyle(self, long style, bool add=True)</autodoc>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-          <param name="add" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetWindowStyleFlag" type="" overloaded="no">
-        <autodoc>SetWindowStyleFlag(self, long style)</autodoc>
-        <docstring>Sets the style of the window. Please note that some styles cannot be
-changed after the window creation and that Refresh() might need to be
-called after changing the others for the change to take place
-immediately.</docstring>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextItem" type="long" overloaded="no">
-        <autodoc>GetNextItem(self, long item, int geometry=LIST_NEXT_ALL, int state=LIST_STATE_DONTCARE) -&gt; long</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="geometry" type="int" default="wxLIST_NEXT_ALL"/>
-          <param name="state" type="int" default="wxLIST_STATE_DONTCARE"/>
-        </paramlist>
-      </method>
-      <method name="GetImageList" type="ImageList" overloaded="no">
-        <autodoc>GetImageList(self, int which) -&gt; ImageList</autodoc>
-        <paramlist>
-          <param name="which" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetImageList" type="" overloaded="no">
-        <autodoc>SetImageList(self, ImageList imageList, int which)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-          <param name="which" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignImageList" type="" overloaded="no">
-        <autodoc>AssignImageList(self, ImageList imageList, int which)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-          <param name="which" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="InReportView" type="bool" overloaded="no">
-        <autodoc>InReportView(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsVirtual" type="bool" overloaded="no">
-        <autodoc>IsVirtual(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RefreshItem" type="" overloaded="no">
-        <autodoc>RefreshItem(self, long item)</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="RefreshItems" type="" overloaded="no">
-        <autodoc>RefreshItems(self, long itemFrom, long itemTo)</autodoc>
-        <paramlist>
-          <param name="itemFrom" type="long" default=""/>
-          <param name="itemTo" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="Arrange" type="bool" overloaded="no">
-        <autodoc>Arrange(self, int flag=LIST_ALIGN_DEFAULT) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="flag" type="int" default="wxLIST_ALIGN_DEFAULT"/>
-        </paramlist>
-      </method>
-      <method name="DeleteItem" type="bool" overloaded="no">
-        <autodoc>DeleteItem(self, long item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllItems" type="bool" overloaded="no">
-        <autodoc>DeleteAllItems(self) -&gt; bool</autodoc>
-      </method>
-      <method name="DeleteColumn" type="bool" overloaded="no">
-        <autodoc>DeleteColumn(self, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllColumns" type="bool" overloaded="no">
-        <autodoc>DeleteAllColumns(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ClearAll" type="" overloaded="no">
-        <autodoc>ClearAll(self)</autodoc>
-      </method>
-      <method name="EditLabel" type="" overloaded="no">
-        <autodoc>EditLabel(self, long item)</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisible" type="bool" overloaded="no">
-        <autodoc>EnsureVisible(self, long item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItem" type="long" overloaded="no">
-        <autodoc>FindItem(self, long start, String str, bool partial=False) -&gt; long</autodoc>
-        <paramlist>
-          <param name="start" type="long" default=""/>
-          <param name="str" type="String" default=""/>
-          <param name="partial" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="FindItemData" type="long" overloaded="no">
-        <autodoc>FindItemData(self, long start, long data) -&gt; long</autodoc>
-        <paramlist>
-          <param name="start" type="long" default=""/>
-          <param name="data" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItemAtPos" type="long" overloaded="no">
-        <autodoc>FindItemAtPos(self, long start, Point pt, int direction) -&gt; long</autodoc>
-        <paramlist>
-          <param name="start" type="long" default=""/>
-          <param name="pt" type="Point" default=""/>
-          <param name="direction" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="long" overloaded="no">
-        <autodoc>HitTest(Point point) -&gt; (item, where)</autodoc>
-        <docstring>Determines which item (if any) is at the specified point, giving
- in the second return value (see wxLIST_HITTEST_... flags.)</docstring>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertItem" type="long" overloaded="no">
-        <autodoc>InsertItem(self, ListItem info) -&gt; long</autodoc>
-        <paramlist>
-          <param name="info" type="ListItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertStringItem" type="long" overloaded="no">
-        <autodoc>InsertStringItem(self, long index, String label) -&gt; long</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertImageItem" type="long" overloaded="no">
-        <autodoc>InsertImageItem(self, long index, int imageIndex) -&gt; long</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-          <param name="imageIndex" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertImageStringItem" type="long" overloaded="no">
-        <autodoc>InsertImageStringItem(self, long index, String label, int imageIndex) -&gt; long</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-          <param name="label" type="String" default=""/>
-          <param name="imageIndex" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertColumnInfo" type="long" overloaded="no">
-        <autodoc>InsertColumnInfo(self, long col, ListItem info) -&gt; long</autodoc>
-        <paramlist>
-          <param name="col" type="long" default=""/>
-          <param name="info" type="ListItem" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertColumn" type="long" overloaded="no">
-        <autodoc>InsertColumn(self, long col, String heading, int format=LIST_FORMAT_LEFT, 
-    int width=-1) -&gt; long</autodoc>
-        <paramlist>
-          <param name="col" type="long" default=""/>
-          <param name="heading" type="String" default=""/>
-          <param name="format" type="int" default="wxLIST_FORMAT_LEFT"/>
-          <param name="width" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetItemCount" type="" overloaded="no">
-        <autodoc>SetItemCount(self, long count)</autodoc>
-        <paramlist>
-          <param name="count" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollList" type="bool" overloaded="no">
-        <autodoc>ScrollList(self, int dx, int dy) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dx" type="int" default=""/>
-          <param name="dy" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemTextColour" type="" overloaded="no">
-        <autodoc>SetItemTextColour(self, long item, Colour col)</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemTextColour" type="Colour" overloaded="no">
-        <autodoc>GetItemTextColour(self, long item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemBackgroundColour" type="" overloaded="no">
-        <autodoc>SetItemBackgroundColour(self, long item, Colour col)</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetItemBackgroundColour(self, long item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SortItems" type="bool" overloaded="no">
-        <autodoc>SortItems(self, PyObject func) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="func" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMainWindow" type="Window" overloaded="no">
-        <autodoc>GetMainWindow(self) -&gt; Window</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ListView" oldname="wxListView" module="_controls">
-      <baseclass name="ListCtrl"/>
-      <constructor name="ListView" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LC_REPORT, 
-    Validator validator=DefaultValidator, String name=ListCtrlNameStr) -&gt; ListView</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLC_REPORT"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreListView" overloaded="no">
-        <autodoc>PreListView() -&gt; ListView</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=LC_REPORT, 
-    Validator validator=DefaultValidator, String name=ListCtrlNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLC_REPORT"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyListCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="Select" type="" overloaded="no">
-        <autodoc>Select(self, long n, bool on=True)</autodoc>
-        <paramlist>
-          <param name="n" type="long" default=""/>
-          <param name="on" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Focus" type="" overloaded="no">
-        <autodoc>Focus(self, long index)</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFocusedItem" type="long" overloaded="no">
-        <autodoc>GetFocusedItem(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetNextSelected" type="long" overloaded="no">
-        <autodoc>GetNextSelected(self, long item) -&gt; long</autodoc>
-        <paramlist>
-          <param name="item" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstSelected" type="long" overloaded="no">
-        <autodoc>GetFirstSelected(self) -&gt; long</autodoc>
-      </method>
-      <method name="IsSelected" type="bool" overloaded="no">
-        <autodoc>IsSelected(self, long index) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumnImage" type="" overloaded="no">
-        <autodoc>SetColumnImage(self, int col, int image)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="image" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearColumnImage" type="" overloaded="no">
-        <autodoc>ClearColumnImage(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TreeItemId" oldname="wxTreeItemId" module="_controls">
-      <constructor name="TreeItemId" overloaded="no">
-        <autodoc>__init__(self) -&gt; TreeItemId</autodoc>
-      </constructor>
-      <destructor name="~wxTreeItemId" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, TreeItemId other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, TreeItemId other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <property name="m_pItem" type="" readonly="no"/>
-    </class>
-    <class name="TreeItemData" oldname="wxPyTreeItemData" module="_controls">
-      <constructor name="wxPyTreeItemData" overloaded="no">
-        <autodoc>__init__(self, PyObject obj=None) -&gt; TreeItemData</autodoc>
-        <paramlist>
-          <param name="obj" type="PyObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetData" type="PyObject" overloaded="no">
-        <autodoc>GetData(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetData" type="" overloaded="no">
-        <autodoc>SetData(self, PyObject obj)</autodoc>
-        <paramlist>
-          <param name="obj" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="TreeItemId" overloaded="no">
-        <autodoc>GetId(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, TreeItemId id)</autodoc>
-        <paramlist>
-          <param name="id" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode>
-
-EVT_TREE_BEGIN_DRAG        = wx.PyEventBinder(wxEVT_COMMAND_TREE_BEGIN_DRAG       , 1)
-EVT_TREE_BEGIN_RDRAG       = wx.PyEventBinder(wxEVT_COMMAND_TREE_BEGIN_RDRAG      , 1)
-EVT_TREE_BEGIN_LABEL_EDIT  = wx.PyEventBinder(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT , 1)
-EVT_TREE_END_LABEL_EDIT    = wx.PyEventBinder(wxEVT_COMMAND_TREE_END_LABEL_EDIT   , 1)
-EVT_TREE_DELETE_ITEM       = wx.PyEventBinder(wxEVT_COMMAND_TREE_DELETE_ITEM      , 1)
-EVT_TREE_GET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_TREE_GET_INFO         , 1)
-EVT_TREE_SET_INFO          = wx.PyEventBinder(wxEVT_COMMAND_TREE_SET_INFO         , 1)
-EVT_TREE_ITEM_EXPANDED     = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_EXPANDED    , 1)
-EVT_TREE_ITEM_EXPANDING    = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_EXPANDING   , 1)
-EVT_TREE_ITEM_COLLAPSED    = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_COLLAPSED   , 1)
-EVT_TREE_ITEM_COLLAPSING   = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_COLLAPSING  , 1)
-EVT_TREE_SEL_CHANGED       = wx.PyEventBinder(wxEVT_COMMAND_TREE_SEL_CHANGED      , 1)
-EVT_TREE_SEL_CHANGING      = wx.PyEventBinder(wxEVT_COMMAND_TREE_SEL_CHANGING     , 1)
-EVT_TREE_KEY_DOWN          = wx.PyEventBinder(wxEVT_COMMAND_TREE_KEY_DOWN         , 1)
-EVT_TREE_ITEM_ACTIVATED    = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_ACTIVATED   , 1)
-EVT_TREE_ITEM_RIGHT_CLICK  = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK , 1)
-EVT_TREE_ITEM_MIDDLE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, 1)
-EVT_TREE_END_DRAG          = wx.PyEventBinder(wxEVT_COMMAND_TREE_END_DRAG         , 1)
-EVT_TREE_STATE_IMAGE_CLICK = wx.PyEventBinder(wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, 1)
-EVT_TREE_ITEM_GETTOOLTIP   = wx.PyEventBinder(wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP,   1)
-</pythoncode>
-    <class name="TreeEvent" oldname="wxTreeEvent" module="_controls">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="TreeEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=wxEVT_NULL, int id=0) -&gt; TreeEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="SetItem" type="" overloaded="no">
-        <autodoc>SetItem(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOldItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetOldItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="SetOldItem" type="" overloaded="no">
-        <autodoc>SetOldItem(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPoint" type="Point" overloaded="no">
-        <autodoc>GetPoint(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetPoint" type="" overloaded="no">
-        <autodoc>SetPoint(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetKeyEvent" type="KeyEvent" overloaded="no">
-        <autodoc>GetKeyEvent(self) -&gt; KeyEvent</autodoc>
-      </method>
-      <method name="GetKeyCode" type="int" overloaded="no">
-        <autodoc>GetKeyCode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetKeyEvent" type="" overloaded="no">
-        <autodoc>SetKeyEvent(self, KeyEvent evt)</autodoc>
-        <paramlist>
-          <param name="evt" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLabel" type="String" overloaded="no">
-        <autodoc>GetLabel(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetLabel" type="" overloaded="no">
-        <autodoc>SetLabel(self, String label)</autodoc>
-        <paramlist>
-          <param name="label" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEditCancelled" type="bool" overloaded="no">
-        <autodoc>IsEditCancelled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetEditCanceled" type="" overloaded="no">
-        <autodoc>SetEditCanceled(self, bool editCancelled)</autodoc>
-        <paramlist>
-          <param name="editCancelled" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToolTip" type="" overloaded="no">
-        <autodoc>SetToolTip(self, String toolTip)</autodoc>
-        <paramlist>
-          <param name="toolTip" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TreeCtrl" oldname="wxPyTreeCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="wxPyTreeCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=TR_DEFAULT_STYLE, 
-    Validator validator=DefaultValidator, 
-    String name=TreeCtrlNameStr) -&gt; TreeCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTR_DEFAULT_STYLE"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTreeCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreTreeCtrl" overloaded="no">
-        <autodoc>PreTreeCtrl() -&gt; TreeCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=TR_DEFAULT_STYLE, 
-    Validator validator=DefaultValidator, 
-    String name=TreeCtrlNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTR_DEFAULT_STYLE"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTreeCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="size_t" overloaded="no">
-        <autodoc>GetCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetIndent" type="unsigned int" overloaded="no">
-        <autodoc>GetIndent(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="SetIndent" type="" overloaded="no">
-        <autodoc>SetIndent(self, unsigned int indent)</autodoc>
-        <paramlist>
-          <param name="indent" type="unsigned int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSpacing" type="unsigned int" overloaded="no">
-        <autodoc>GetSpacing(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="SetSpacing" type="" overloaded="no">
-        <autodoc>SetSpacing(self, unsigned int spacing)</autodoc>
-        <paramlist>
-          <param name="spacing" type="unsigned int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetImageList" type="ImageList" overloaded="no">
-        <autodoc>GetImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="GetStateImageList" type="ImageList" overloaded="no">
-        <autodoc>GetStateImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="SetImageList" type="" overloaded="no">
-        <autodoc>SetImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStateImageList" type="" overloaded="no">
-        <autodoc>SetStateImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignImageList" type="" overloaded="no">
-        <autodoc>AssignImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignStateImageList" type="" overloaded="no">
-        <autodoc>AssignStateImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemText" type="String" overloaded="no">
-        <autodoc>GetItemText(self, TreeItemId item) -&gt; String</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemImage" type="int" overloaded="no">
-        <autodoc>GetItemImage(self, TreeItemId item, int which=TreeItemIcon_Normal) -&gt; int</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="which" type="wxTreeItemIcon" default="wxTreeItemIcon_Normal"/>
-        </paramlist>
-      </method>
-      <method name="GetItemData" type="TreeItemData" overloaded="no">
-        <autodoc>GetItemData(self, TreeItemId item) -&gt; TreeItemData</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPyData" type="PyObject" overloaded="no">
-        <autodoc>GetItemPyData(self, TreeItemId item) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemTextColour" type="Colour" overloaded="no">
-        <autodoc>GetItemTextColour(self, TreeItemId item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetItemBackgroundColour(self, TreeItemId item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemFont" type="Font" overloaded="no">
-        <autodoc>GetItemFont(self, TreeItemId item) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemText" type="" overloaded="no">
-        <autodoc>SetItemText(self, TreeItemId item, String text)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemImage" type="" overloaded="no">
-        <autodoc>SetItemImage(self, TreeItemId item, int image, int which=TreeItemIcon_Normal)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="image" type="int" default=""/>
-          <param name="which" type="wxTreeItemIcon" default="wxTreeItemIcon_Normal"/>
-        </paramlist>
-      </method>
-      <method name="SetItemData" type="" overloaded="no">
-        <autodoc>SetItemData(self, TreeItemId item, TreeItemData data)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="data" type="TreeItemData" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemPyData" type="" overloaded="no">
-        <autodoc>SetItemPyData(self, TreeItemId item, PyObject obj)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="obj" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemHasChildren" type="" overloaded="no">
-        <autodoc>SetItemHasChildren(self, TreeItemId item, bool has=True)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="has" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetItemBold" type="" overloaded="no">
-        <autodoc>SetItemBold(self, TreeItemId item, bool bold=True)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="bold" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetItemTextColour" type="" overloaded="no">
-        <autodoc>SetItemTextColour(self, TreeItemId item, Colour col)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemBackgroundColour" type="" overloaded="no">
-        <autodoc>SetItemBackgroundColour(self, TreeItemId item, Colour col)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemFont" type="" overloaded="no">
-        <autodoc>SetItemFont(self, TreeItemId item, Font font)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsVisible" type="bool" overloaded="no">
-        <autodoc>IsVisible(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="ItemHasChildren" type="bool" overloaded="no">
-        <autodoc>ItemHasChildren(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsExpanded" type="bool" overloaded="no">
-        <autodoc>IsExpanded(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSelected" type="bool" overloaded="no">
-        <autodoc>IsSelected(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsBold" type="bool" overloaded="no">
-        <autodoc>IsBold(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetChildrenCount" type="size_t" overloaded="no">
-        <autodoc>GetChildrenCount(self, TreeItemId item, bool recursively=True) -&gt; size_t</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="recursively" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetRootItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetRootItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetSelection" type="TreeItemId" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetSelections" type="PyObject" overloaded="no">
-        <autodoc>GetSelections(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetItemParent" type="TreeItemId" overloaded="no">
-        <autodoc>GetItemParent(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstChild" type="PyObject" overloaded="no">
-        <autodoc>GetFirstChild(self, TreeItemId item) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextChild" type="PyObject" overloaded="no">
-        <autodoc>GetNextChild(self, TreeItemId item, void cookie) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="cookie" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLastChild" type="TreeItemId" overloaded="no">
-        <autodoc>GetLastChild(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextSibling" type="TreeItemId" overloaded="no">
-        <autodoc>GetNextSibling(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrevSibling" type="TreeItemId" overloaded="no">
-        <autodoc>GetPrevSibling(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstVisibleItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetFirstVisibleItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetNextVisible" type="TreeItemId" overloaded="no">
-        <autodoc>GetNextVisible(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrevVisible" type="TreeItemId" overloaded="no">
-        <autodoc>GetPrevVisible(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddRoot" type="TreeItemId" overloaded="no">
-        <autodoc>AddRoot(self, String text, int image=-1, int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="PrependItem" type="TreeItemId" overloaded="no">
-        <autodoc>PrependItem(self, TreeItemId parent, String text, int image=-1, int selectedImage=-1, 
-    TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertItem" type="TreeItemId" overloaded="no">
-        <autodoc>InsertItem(self, TreeItemId parent, TreeItemId idPrevious, String text, 
-    int image=-1, int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="idPrevious" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertItemBefore" type="TreeItemId" overloaded="no">
-        <autodoc>InsertItemBefore(self, TreeItemId parent, size_t index, String text, int image=-1, 
-    int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="index" type="size_t" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AppendItem" type="TreeItemId" overloaded="no">
-        <autodoc>AppendItem(self, TreeItemId parent, String text, int image=-1, int selectedImage=-1, 
-    TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Delete" type="" overloaded="no">
-        <autodoc>Delete(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteChildren" type="" overloaded="no">
-        <autodoc>DeleteChildren(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllItems" type="" overloaded="no">
-        <autodoc>DeleteAllItems(self)</autodoc>
-      </method>
-      <method name="Expand" type="" overloaded="no">
-        <autodoc>Expand(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Collapse" type="" overloaded="no">
-        <autodoc>Collapse(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="CollapseAndReset" type="" overloaded="no">
-        <autodoc>CollapseAndReset(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Toggle" type="" overloaded="no">
-        <autodoc>Toggle(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Unselect" type="" overloaded="no">
-        <autodoc>Unselect(self)</autodoc>
-      </method>
-      <method name="UnselectItem" type="" overloaded="no">
-        <autodoc>UnselectItem(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="UnselectAll" type="" overloaded="no">
-        <autodoc>UnselectAll(self)</autodoc>
-      </method>
-      <method name="SelectItem" type="" overloaded="no">
-        <autodoc>SelectItem(self, TreeItemId item, bool select=True)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="select" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="ToggleItemSelection" type="" overloaded="no">
-        <autodoc>ToggleItemSelection(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisible" type="" overloaded="no">
-        <autodoc>EnsureVisible(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollTo" type="" overloaded="no">
-        <autodoc>ScrollTo(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="EditLabel" type="" overloaded="no">
-        <autodoc>EditLabel(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEditControl" type="TextCtrl" overloaded="no">
-        <autodoc>GetEditControl(self) -&gt; TextCtrl</autodoc>
-      </method>
-      <method name="SortChildren" type="" overloaded="no">
-        <autodoc>SortChildren(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="TreeItemId" overloaded="no">
-        <autodoc>HitTest(Point point) -&gt; (item, where)</autodoc>
-        <docstring>Determine which item (if any) belongs the given point.  The coordinates
-specified are relative to the client area of tree ctrl and the where return
-value is set to a bitmask of wxTREE_HITTEST_xxx constants.
-</docstring>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBoundingRect" type="PyObject" overloaded="no">
-        <autodoc>GetBoundingRect(self, TreeItemId item, bool textOnly=False) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="textOnly" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="GenericDirCtrl" oldname="wxGenericDirCtrl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="GenericDirCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String dir=DirDialogDefaultFolderStr, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER, 
-    String filter=EmptyString, 
-    int defaultFilter=0, String name=TreeCtrlNameStr) -&gt; GenericDirCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="dir" type="String" default="wxPyDirDialogDefaultFolderStr"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER"/>
-          <param name="filter" type="String" default="wxPyEmptyString"/>
-          <param name="defaultFilter" type="int" default="0"/>
-          <param name="name" type="String" default="wxPyTreeCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreGenericDirCtrl" overloaded="no">
-        <autodoc>PreGenericDirCtrl() -&gt; GenericDirCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String dir=DirDialogDefaultFolderStr, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER, 
-    String filter=EmptyString, 
-    int defaultFilter=0, String name=TreeCtrlNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="dir" type="String" default="wxPyDirDialogDefaultFolderStr"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER"/>
-          <param name="filter" type="String" default="wxPyEmptyString"/>
-          <param name="defaultFilter" type="int" default="0"/>
-          <param name="name" type="String" default="wxPyTreeCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="ExpandPath" type="bool" overloaded="no">
-        <autodoc>ExpandPath(self, String path) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultPath" type="String" overloaded="no">
-        <autodoc>GetDefaultPath(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetDefaultPath" type="" overloaded="no">
-        <autodoc>SetDefaultPath(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPath" type="String" overloaded="no">
-        <autodoc>GetPath(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFilePath" type="String" overloaded="no">
-        <autodoc>GetFilePath(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetPath" type="" overloaded="no">
-        <autodoc>SetPath(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowHidden" type="" overloaded="no">
-        <autodoc>ShowHidden(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetShowHidden" type="bool" overloaded="no">
-        <autodoc>GetShowHidden(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetFilter" type="String" overloaded="no">
-        <autodoc>GetFilter(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetFilter" type="" overloaded="no">
-        <autodoc>SetFilter(self, String filter)</autodoc>
-        <paramlist>
-          <param name="filter" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFilterIndex" type="int" overloaded="no">
-        <autodoc>GetFilterIndex(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFilterIndex" type="" overloaded="no">
-        <autodoc>SetFilterIndex(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRootId" type="TreeItemId" overloaded="no">
-        <autodoc>GetRootId(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetTreeCtrl" type="TreeCtrl" overloaded="no">
-        <autodoc>GetTreeCtrl(self) -&gt; TreeCtrl</autodoc>
-      </method>
-      <method name="GetFilterListCtrl" type="wxDirFilterListCtrl" overloaded="no">
-        <autodoc>GetFilterListCtrl(self) -&gt; DirFilterListCtrl</autodoc>
-      </method>
-      <method name="FindChild" type="TreeItemId" overloaded="no">
-        <autodoc>FindChild(wxTreeItemId parentId, wxString path) -&gt; (item, done)</autodoc>
-        <docstring>Find the child that matches the first part of 'path'.  E.g. if a child
-path is "/usr" and 'path' is "/usr/include" then the child for
-/usr is returned.  If the path string has been used (we're at the
-leaf), done is set to True.
-</docstring>
-        <paramlist>
-          <param name="parentId" type="TreeItemId" default=""/>
-          <param name="path" type="String" default=""/>
-          <param name="OUTPUT" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoResize" type="" overloaded="no">
-        <autodoc>DoResize(self)</autodoc>
-      </method>
-      <method name="ReCreateTree" type="" overloaded="no">
-        <autodoc>ReCreateTree(self)</autodoc>
-      </method>
-    </class>
-    <class name="DirFilterListCtrl" oldname="wxDirFilterListCtrl" module="_controls">
-      <baseclass name="Choice"/>
-      <constructor name="DirFilterListCtrl" overloaded="no">
-        <autodoc>__init__(self, GenericDirCtrl parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0) -&gt; DirFilterListCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="GenericDirCtrl" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreDirFilterListCtrl" overloaded="no">
-        <autodoc>PreDirFilterListCtrl() -&gt; DirFilterListCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, GenericDirCtrl parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="GenericDirCtrl" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FillFilterList" type="" overloaded="no">
-        <autodoc>FillFilterList(self, String filter, int defaultFilter)</autodoc>
-        <paramlist>
-          <param name="filter" type="String" default=""/>
-          <param name="defaultFilter" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="PyControl" oldname="wxPyControl" module="_controls">
-      <baseclass name="Control"/>
-      <constructor name="PyControl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, Validator validator=DefaultValidator, 
-    String name=ControlNameStr) -&gt; PyControl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyControlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePyControl" overloaded="no">
-        <autodoc>PrePyControl() -&gt; PyControl</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBestSize" type="" overloaded="no">
-        <autodoc>SetBestSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoMoveWindow" type="" overloaded="no">
-        <autodoc>base_DoMoveWindow(self, int x, int y, int width, int height)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetSize" type="" overloaded="no">
-        <autodoc>base_DoSetSize(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetClientSize" type="" overloaded="no">
-        <autodoc>base_DoSetClientSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetVirtualSize" type="" overloaded="no">
-        <autodoc>base_DoSetVirtualSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetSize" type="" overloaded="no">
-        <autodoc>base_DoGetSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetClientSize" type="" overloaded="no">
-        <autodoc>base_DoGetClientSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetPosition" type="" overloaded="no">
-        <autodoc>base_DoGetPosition() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetVirtualSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetVirtualSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_DoGetBestSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetBestSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_InitDialog" type="" overloaded="no">
-        <autodoc>base_InitDialog(self)</autodoc>
-      </method>
-      <method name="base_TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_Validate" type="bool" overloaded="no">
-        <autodoc>base_Validate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetMaxSize" type="Size" overloaded="no">
-        <autodoc>base_GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_AddChild" type="" overloaded="no">
-        <autodoc>base_AddChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RemoveChild" type="" overloaded="no">
-        <autodoc>base_RemoveChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_ShouldInheritColours" type="bool" overloaded="no">
-        <autodoc>base_ShouldInheritColours(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_ApplyParentThemeBackground" type="" overloaded="no">
-        <autodoc>base_ApplyParentThemeBackground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>base_GetDefaultAttributes(self) -&gt; VisualAttributes</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <pythoncode> 
-EVT_HELP = wx.PyEventBinder( wxEVT_HELP, 1)
-EVT_HELP_RANGE = wx.PyEventBinder(  wxEVT_HELP, 2)
-EVT_DETAILED_HELP = wx.PyEventBinder( wxEVT_DETAILED_HELP, 1)
-EVT_DETAILED_HELP_RANGE = wx.PyEventBinder( wxEVT_DETAILED_HELP, 2)
-</pythoncode>
-    <class name="HelpEvent" oldname="wxHelpEvent" module="_controls">
-      <docstring>A help event is sent when the user has requested context-sensitive
-help. This can either be caused by the application requesting
-context-sensitive help mode via wx.ContextHelp, or (on MS Windows) by
-the system generating a WM_HELP message when the user pressed F1 or
-clicked on the query button in a dialog caption.
-
-A help event is sent to the window that the user clicked on, and is
-propagated up the window hierarchy until the event is processed or
-there are no more event handlers. The application should call
-event.GetId to check the identity of the clicked-on window, and then
-either show some suitable help or call event.Skip if the identifier is
-unrecognised. Calling Skip is important because it allows wxWindows to
-generate further events for ancestors of the clicked-on
-window. Otherwise it would be impossible to show help for container
-windows, since processing would stop after the first window found.
-
-Events
--------
-    ==============      =========================================
-    EVT_HELP            Sent when the user has requested context-
-                        sensitive help.
-    EVT_HELP_RANGE      Allows to catch EVT_HELP for a range of IDs
-    ==============      =========================================
-
-:see: `wx.ContextHelp`, `wx.ContextHelpButton`
-</docstring>
-      <baseclass name="CommandEvent"/>
-      <constructor name="HelpEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int winid=0, Point pt=DefaultPosition) -&gt; HelpEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="winid" type="int" default="0"/>
-          <param name="pt" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-        <docstring>Returns the left-click position of the mouse, in screen
-coordinates. This allows the application to position the help
-appropriately.</docstring>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, Point pos)</autodoc>
-        <docstring>Sets the left-click position of the mouse, in screen coordinates.</docstring>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLink" type="String" overloaded="no">
-        <autodoc>GetLink(self) -&gt; String</autodoc>
-        <docstring>Get an optional link to further help</docstring>
-      </method>
-      <method name="SetLink" type="" overloaded="no">
-        <autodoc>SetLink(self, String link)</autodoc>
-        <docstring>Set an optional link to further help</docstring>
-        <paramlist>
-          <param name="link" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTarget" type="String" overloaded="no">
-        <autodoc>GetTarget(self) -&gt; String</autodoc>
-        <docstring>Get an optional target to display help in. E.g. a window specification</docstring>
-      </method>
-      <method name="SetTarget" type="" overloaded="no">
-        <autodoc>SetTarget(self, String target)</autodoc>
-        <docstring>Set an optional target to display help in. E.g. a window specification</docstring>
-        <paramlist>
-          <param name="target" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ContextHelp" oldname="wxContextHelp" module="_controls">
-      <docstring>This class changes the cursor to a query and puts the application into
-a 'context-sensitive help mode'. When the user left-clicks on a window
-within the specified window, a ``EVT_HELP`` event is sent to that
-control, and the application may respond to it by popping up some
-help.
-
-There are a couple of ways to invoke this behaviour implicitly:
-
-    * Use the wx.DIALOG_EX_CONTEXTHELP extended style for a dialog
-      (Windows only). This will put a question mark in the titlebar,
-      and Windows will put the application into context-sensitive help
-      mode automatically, with further programming.
-
-    * Create a `wx.ContextHelpButton`, whose predefined behaviour is
-      to create a context help object. Normally you will write your
-      application so that this button is only added to a dialog for
-      non-Windows platforms (use ``wx.DIALOG_EX_CONTEXTHELP`` on
-      Windows).
-
-:see: `wx.ContextHelpButton`
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="ContextHelp" overloaded="no">
-        <autodoc>__init__(self, Window window=None, bool doNow=True) -&gt; ContextHelp</autodoc>
-        <docstring>Constructs a context help object, calling BeginContextHelp if doNow is
-true (the default).
-
-If window is None, the top window is used.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default="NULL"/>
-          <param name="doNow" type="bool" default="True"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxContextHelp" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="BeginContextHelp" type="bool" overloaded="no">
-        <autodoc>BeginContextHelp(self, Window window=None) -&gt; bool</autodoc>
-        <docstring>Puts the application into context-sensitive help mode. window is the
-window which will be used to catch events; if NULL, the top window
-will be used.
-
-Returns true if the application was successfully put into
-context-sensitive help mode. This function only returns when the event
-loop has finished.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="EndContextHelp" type="bool" overloaded="no">
-        <autodoc>EndContextHelp(self) -&gt; bool</autodoc>
-        <docstring>Ends context-sensitive help mode. Not normally called by the
-application.</docstring>
-      </method>
-    </class>
-    <class name="ContextHelpButton" oldname="wxContextHelpButton" module="_controls">
-      <docstring>Instances of this class may be used to add a question mark button that
-when pressed, puts the application into context-help mode. It does
-this by creating a wx.ContextHelp object which itself generates a
-``EVT_HELP`` event when the user clicks on a window.
-
-On Windows, you may add a question-mark icon to a dialog by use of the
-``wx.DIALOG_EX_CONTEXTHELP`` extra style, but on other platforms you
-will have to add a button explicitly, usually next to OK, Cancel or
-similar buttons.
-
-:see: `wx.ContextHelp`, `wx.ContextHelpButton`
-</docstring>
-      <baseclass name="BitmapButton"/>
-      <constructor name="ContextHelpButton" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=ID_CONTEXT_HELP, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=BU_AUTODRAW) -&gt; ContextHelpButton</autodoc>
-        <docstring>Constructor, creating and showing a context help button.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_CONTEXT_HELP"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxBU_AUTODRAW"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="HelpProvider" oldname="wxHelpProvider" module="_controls">
-      <docstring>wx.HelpProvider is an abstract class used by a program
-implementing context-sensitive help to show the help text for the
-given window.
-
-The current help provider must be explicitly set by the
-application using wx.HelpProvider.Set().</docstring>
-      <staticmethod name="Set" type="HelpProvider" overloaded="no">
-        <autodoc>Set(HelpProvider helpProvider) -&gt; HelpProvider</autodoc>
-        <docstring>Sset the current, application-wide help provider. Returns the previous
-one.  Unlike some other classes, the help provider is not created on
-demand. This must be explicitly done by the application.</docstring>
-        <paramlist>
-          <param name="helpProvider" type="HelpProvider" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Get" type="HelpProvider" overloaded="no">
-        <autodoc>Get() -&gt; HelpProvider</autodoc>
-        <docstring>Return the current application-wide help provider.</docstring>
-      </staticmethod>
-      <method name="GetHelp" type="String" overloaded="no">
-        <autodoc>GetHelp(self, Window window) -&gt; String</autodoc>
-        <docstring>Gets the help string for this window. Its interpretation is dependent
-on the help provider except that empty string always means that no
-help is associated with the window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowHelp" type="bool" overloaded="no">
-        <autodoc>ShowHelp(self, Window window) -&gt; bool</autodoc>
-        <docstring>Shows help for the given window. Uses GetHelp internally if
-applicable. Returns True if it was done, or False if no help was
-available for this window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddHelp" type="" overloaded="no">
-        <autodoc>AddHelp(self, Window window, String text)</autodoc>
-        <docstring>Associates the text with the given window.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddHelpById" type="" overloaded="no">
-        <autodoc>AddHelpById(self, int id, String text)</autodoc>
-        <docstring>This version associates the given text with all windows with this
-id. May be used to set the same help string for all Cancel buttons in
-the application, for example.</docstring>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveHelp" type="" overloaded="no">
-        <autodoc>RemoveHelp(self, Window window)</autodoc>
-        <docstring>Removes the association between the window pointer and the help
-text. This is called by the wx.Window destructor. Without this, the
-table of help strings will fill up and when window pointers are
-reused, the wrong help string will be found.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <class name="SimpleHelpProvider" oldname="wxSimpleHelpProvider" module="_controls">
-      <docstring>wx.SimpleHelpProvider is an implementation of `wx.HelpProvider` which
-supports only plain text help strings, and shows the string associated
-with the control (if any) in a tooltip.</docstring>
-      <baseclass name="HelpProvider"/>
-      <constructor name="SimpleHelpProvider" overloaded="no">
-        <autodoc>__init__(self) -&gt; SimpleHelpProvider</autodoc>
-        <docstring>wx.SimpleHelpProvider is an implementation of `wx.HelpProvider` which
-supports only plain text help strings, and shows the string associated
-with the control (if any) in a tooltip.</docstring>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DragImage" oldname="wxGenericDragImage" module="_controls">
-      <baseclass name="Object"/>
-      <constructor name="wxGenericDragImage" overloaded="no">
-        <autodoc>__init__(self, Bitmap image, Cursor cursor=wxNullCursor) -&gt; DragImage</autodoc>
-        <paramlist>
-          <param name="image" type="Bitmap" default=""/>
-          <param name="cursor" type="Cursor" default="wxNullCursor"/>
-        </paramlist>
-      </constructor>
-      <constructor name="DragIcon" overloaded="no">
-        <autodoc>DragIcon(Icon image, Cursor cursor=wxNullCursor) -&gt; DragImage</autodoc>
-        <paramlist>
-          <param name="image" type="Icon" default=""/>
-          <param name="cursor" type="Cursor" default="wxNullCursor"/>
-        </paramlist>
-      </constructor>
-      <constructor name="DragString" overloaded="no">
-        <autodoc>DragString(String str, Cursor cursor=wxNullCursor) -&gt; DragImage</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-          <param name="cursor" type="Cursor" default="wxNullCursor"/>
-        </paramlist>
-      </constructor>
-      <constructor name="DragTreeItem" overloaded="no">
-        <autodoc>DragTreeItem(TreeCtrl treeCtrl, TreeItemId id) -&gt; DragImage</autodoc>
-        <paramlist>
-          <param name="treeCtrl" type="TreeCtrl" default=""/>
-          <param name="id" type="TreeItemId" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="DragListItem" overloaded="no">
-        <autodoc>DragListItem(ListCtrl listCtrl, long id) -&gt; DragImage</autodoc>
-        <paramlist>
-          <param name="listCtrl" type="ListCtrl" default=""/>
-          <param name="id" type="long" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxGenericDragImage" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetBackingBitmap" type="" overloaded="no">
-        <autodoc>SetBackingBitmap(self, Bitmap bitmap)</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="BeginDrag" type="bool" overloaded="no">
-        <autodoc>BeginDrag(self, Point hotspot, Window window, bool fullScreen=False, 
-    Rect rect=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="hotspot" type="Point" default=""/>
-          <param name="window" type="Window" default=""/>
-          <param name="fullScreen" type="bool" default="False"/>
-          <param name="rect" type="Rect" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="BeginDragBounded" type="bool" overloaded="no">
-        <autodoc>BeginDragBounded(self, Point hotspot, Window window, Window boundingWindow) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="hotspot" type="Point" default=""/>
-          <param name="window" type="Window" default=""/>
-          <param name="boundingWindow" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="EndDrag" type="bool" overloaded="no">
-        <autodoc>EndDrag(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Move" type="bool" overloaded="no">
-        <autodoc>Move(self, Point pt) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="Show" type="bool" overloaded="no">
-        <autodoc>Show(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Hide" type="bool" overloaded="no">
-        <autodoc>Hide(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetImageRect" type="Rect" overloaded="no">
-        <autodoc>GetImageRect(self, Point pos) -&gt; Rect</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoDrawImage" type="bool" overloaded="no">
-        <autodoc>DoDrawImage(self, DC dc, Point pos) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="UpdateBackingFromWindow" type="bool" overloaded="no">
-        <autodoc>UpdateBackingFromWindow(self, DC windowDC, MemoryDC destDC, Rect sourceRect, Rect destRect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="windowDC" type="DC" default=""/>
-          <param name="destDC" type="MemoryDC" default=""/>
-          <param name="sourceRect" type="Rect" default=""/>
-          <param name="destRect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="RedrawImage" type="bool" overloaded="no">
-        <autodoc>RedrawImage(self, Point oldPos, Point newPos, bool eraseOld, bool drawNew) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="oldPos" type="Point" default=""/>
-          <param name="newPos" type="Point" default=""/>
-          <param name="eraseOld" type="bool" default=""/>
-          <param name="drawNew" type="bool" default=""/>
-        </paramlist>
-      </method>
-    </class>
-  </module>
-  <module name="_misc">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="SystemSettings" oldname="wxSystemSettings" module="_misc">
-      <staticmethod name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(int index) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="index" type="wxSystemColour" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(int index) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="index" type="wxSystemFont" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetMetric" type="int" overloaded="no">
-        <autodoc>GetMetric(int index) -&gt; int</autodoc>
-        <paramlist>
-          <param name="index" type="wxSystemMetric" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="HasFeature" type="bool" overloaded="no">
-        <autodoc>HasFeature(int index) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="index" type="wxSystemFeature" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetScreenType" type="wxSystemScreenType" overloaded="no">
-        <autodoc>GetScreenType() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="SetScreenType" type="" overloaded="no">
-        <autodoc>SetScreenType(int screen)</autodoc>
-        <paramlist>
-          <param name="screen" type="wxSystemScreenType" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="SystemOptions" oldname="wxSystemOptions" module="_misc">
-      <baseclass name="Object"/>
-      <constructor name="SystemOptions" overloaded="no">
-        <autodoc>__init__(self) -&gt; SystemOptions</autodoc>
-      </constructor>
-      <staticmethod name="SetOption" type="" overloaded="no">
-        <autodoc>SetOption(String name, String value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetOptionInt" type="" overloaded="no">
-        <autodoc>SetOptionInt(String name, int value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetOption" type="String" overloaded="no">
-        <autodoc>GetOption(String name) -&gt; String</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetOptionInt" type="int" overloaded="no">
-        <autodoc>GetOptionInt(String name) -&gt; int</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="HasOption" type="bool" overloaded="no">
-        <autodoc>HasOption(String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <method name="NewId" oldname="wxNewId" type="long" overloaded="no">
-      <autodoc>NewId() -&gt; long</autodoc>
-    </method>
-    <method name="RegisterId" oldname="wxRegisterId" type="" overloaded="no">
-      <autodoc>RegisterId(long id)</autodoc>
-      <paramlist>
-        <param name="id" type="long" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetCurrentId" oldname="wxGetCurrentId" type="long" overloaded="no">
-      <autodoc>GetCurrentId() -&gt; long</autodoc>
-    </method>
-    <method name="Bell" oldname="wxBell" type="" overloaded="no">
-      <autodoc>Bell()</autodoc>
-    </method>
-    <method name="EndBusyCursor" oldname="wxEndBusyCursor" type="" overloaded="no">
-      <autodoc>EndBusyCursor()</autodoc>
-    </method>
-    <method name="GetElapsedTime" oldname="wxGetElapsedTime" type="long" overloaded="no">
-      <autodoc>GetElapsedTime(bool resetTimer=True) -&gt; long</autodoc>
-      <paramlist>
-        <param name="resetTimer" type="bool" default="True"/>
-      </paramlist>
-    </method>
-    <method name="GetMousePosition" oldname="wxGetMousePosition" type="" overloaded="no">
-      <autodoc>GetMousePosition() -&gt; (x,y)</autodoc>
-      <paramlist>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="IsBusy" oldname="wxIsBusy" type="bool" overloaded="no">
-      <autodoc>IsBusy() -&gt; bool</autodoc>
-    </method>
-    <method name="Now" oldname="wxNow" type="String" overloaded="no">
-      <autodoc>Now() -&gt; String</autodoc>
-    </method>
-    <method name="Shell" oldname="wxShell" type="bool" overloaded="no">
-      <autodoc>Shell(String command=EmptyString) -&gt; bool</autodoc>
-      <paramlist>
-        <param name="command" type="String" default="wxPyEmptyString"/>
-      </paramlist>
-    </method>
-    <method name="StartTimer" oldname="wxStartTimer" type="" overloaded="no">
-      <autodoc>StartTimer()</autodoc>
-    </method>
-    <method name="GetOsVersion" oldname="wxGetOsVersion" type="int" overloaded="no">
-      <autodoc>GetOsVersion() -&gt; (platform, major, minor)</autodoc>
-      <paramlist>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetOsDescription" oldname="wxGetOsDescription" type="String" overloaded="no">
-      <autodoc>GetOsDescription() -&gt; String</autodoc>
-    </method>
-    <method name="GetFreeMemory" oldname="wxGetFreeMemory" type="long" overloaded="no">
-      <autodoc>GetFreeMemory() -&gt; long</autodoc>
-    </method>
-    <method name="Shutdown" oldname="wxShutdown" type="bool" overloaded="no">
-      <autodoc>Shutdown(int wFlags) -&gt; bool</autodoc>
-      <paramlist>
-        <param name="wFlags" type="wxShutdownFlags" default=""/>
-      </paramlist>
-    </method>
-    <method name="Sleep" oldname="wxSleep" type="" overloaded="no">
-      <autodoc>Sleep(int secs)</autodoc>
-      <paramlist>
-        <param name="secs" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="MilliSleep" oldname="wxMilliSleep" type="" overloaded="no">
-      <autodoc>MilliSleep(unsigned long milliseconds)</autodoc>
-      <paramlist>
-        <param name="milliseconds" type="unsigned long" default=""/>
-      </paramlist>
-    </method>
-    <method name="MicroSleep" oldname="wxMicroSleep" type="" overloaded="no">
-      <autodoc>MicroSleep(unsigned long microseconds)</autodoc>
-      <paramlist>
-        <param name="microseconds" type="unsigned long" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode> Usleep = MilliSleep </pythoncode>
-    <method name="EnableTopLevelWindows" oldname="wxEnableTopLevelWindows" type="" overloaded="no">
-      <autodoc>EnableTopLevelWindows(bool enable)</autodoc>
-      <paramlist>
-        <param name="enable" type="bool" default=""/>
-      </paramlist>
-    </method>
-    <method name="StripMenuCodes" oldname="wxStripMenuCodes" type="String" overloaded="no">
-      <autodoc>StripMenuCodes(String in) -&gt; String</autodoc>
-      <paramlist>
-        <param name="in" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetEmailAddress" oldname="wxGetEmailAddress" type="String" overloaded="no">
-      <autodoc>GetEmailAddress() -&gt; String</autodoc>
-    </method>
-    <method name="GetHostName" oldname="wxGetHostName" type="String" overloaded="no">
-      <autodoc>GetHostName() -&gt; String</autodoc>
-    </method>
-    <method name="GetFullHostName" oldname="wxGetFullHostName" type="String" overloaded="no">
-      <autodoc>GetFullHostName() -&gt; String</autodoc>
-    </method>
-    <method name="GetUserId" oldname="wxGetUserId" type="String" overloaded="no">
-      <autodoc>GetUserId() -&gt; String</autodoc>
-    </method>
-    <method name="GetUserName" oldname="wxGetUserName" type="String" overloaded="no">
-      <autodoc>GetUserName() -&gt; String</autodoc>
-    </method>
-    <method name="GetHomeDir" oldname="wxGetHomeDir" type="String" overloaded="no">
-      <autodoc>GetHomeDir() -&gt; String</autodoc>
-    </method>
-    <method name="GetUserHome" oldname="wxGetUserHome" type="String" overloaded="no">
-      <autodoc>GetUserHome(String user=EmptyString) -&gt; String</autodoc>
-      <paramlist>
-        <param name="user" type="String" default="wxPyEmptyString"/>
-      </paramlist>
-    </method>
-    <method name="GetProcessId" oldname="wxGetProcessId" type="unsigned long" overloaded="no">
-      <autodoc>GetProcessId() -&gt; unsigned long</autodoc>
-    </method>
-    <method name="Trap" oldname="wxTrap" type="" overloaded="no">
-      <autodoc>Trap()</autodoc>
-    </method>
-    <method name="FileSelector" oldname="wxFileSelector" type="String" overloaded="no">
-      <autodoc>FileSelector(String message=FileSelectorPromptStr, String default_path=EmptyString, 
-    String default_filename=EmptyString, 
-    String default_extension=EmptyString, 
-    String wildcard=FileSelectorDefaultWildcardStr, 
-    int flags=0, Window parent=None, int x=-1, 
-    int y=-1) -&gt; String</autodoc>
-      <paramlist>
-        <param name="message" type="String" default="wxPyFileSelectorPromptStr"/>
-        <param name="default_path" type="String" default="wxPyEmptyString"/>
-        <param name="default_filename" type="String" default="wxPyEmptyString"/>
-        <param name="default_extension" type="String" default="wxPyEmptyString"/>
-        <param name="wildcard" type="String" default="wxPyFileSelectorDefaultWildcardStr"/>
-        <param name="flags" type="int" default="0"/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="x" type="int" default="-1"/>
-        <param name="y" type="int" default="-1"/>
-      </paramlist>
-    </method>
-    <method name="LoadFileSelector" oldname="wxLoadFileSelector" type="String" overloaded="no">
-      <autodoc>LoadFileSelector(String what, String extension, String default_name=EmptyString, 
-    Window parent=None) -&gt; String</autodoc>
-      <paramlist>
-        <param name="what" type="String" default=""/>
-        <param name="extension" type="String" default=""/>
-        <param name="default_name" type="String" default="wxPyEmptyString"/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="SaveFileSelector" oldname="wxSaveFileSelector" type="String" overloaded="no">
-      <autodoc>SaveFileSelector(String what, String extension, String default_name=EmptyString, 
-    Window parent=None) -&gt; String</autodoc>
-      <paramlist>
-        <param name="what" type="String" default=""/>
-        <param name="extension" type="String" default=""/>
-        <param name="default_name" type="String" default="wxPyEmptyString"/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="DirSelector" oldname="wxDirSelector" type="String" overloaded="no">
-      <autodoc>DirSelector(String message=DirSelectorPromptStr, String defaultPath=EmptyString, 
-    long style=DD_DEFAULT_STYLE, 
-    Point pos=DefaultPosition, Window parent=None) -&gt; String</autodoc>
-      <paramlist>
-        <param name="message" type="String" default="wxPyDirSelectorPromptStr"/>
-        <param name="defaultPath" type="String" default="wxPyEmptyString"/>
-        <param name="style" type="long" default="wxDD_DEFAULT_STYLE"/>
-        <param name="pos" type="Point" default="wxDefaultPosition"/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="GetTextFromUser" oldname="wxGetTextFromUser" type="String" overloaded="no">
-      <autodoc>GetTextFromUser(String message, String caption=EmptyString, String default_value=EmptyString, 
-    Window parent=None, 
-    int x=-1, int y=-1, bool centre=True) -&gt; String</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="caption" type="String" default="wxPyEmptyString"/>
-        <param name="default_value" type="String" default="wxPyEmptyString"/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="x" type="int" default="-1"/>
-        <param name="y" type="int" default="-1"/>
-        <param name="centre" type="bool" default="True"/>
-      </paramlist>
-    </method>
-    <method name="GetPasswordFromUser" oldname="wxGetPasswordFromUser" type="String" overloaded="no">
-      <autodoc>GetPasswordFromUser(String message, String caption=EmptyString, String default_value=EmptyString, 
-    Window parent=None) -&gt; String</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="caption" type="String" default="wxPyEmptyString"/>
-        <param name="default_value" type="String" default="wxPyEmptyString"/>
-        <param name="parent" type="Window" default="NULL"/>
-      </paramlist>
-    </method>
-    <method name="GetSingleChoice" oldname="wxGetSingleChoice" type="String" overloaded="no">
-      <autodoc>GetSingleChoice(String message, String caption, int choices, String choices_array, 
-    Window parent=None, int x=-1, 
-    int y=-1, bool centre=True, int width=150, int height=200) -&gt; String</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="caption" type="String" default=""/>
-        <param name="choices" type="int" default=""/>
-        <param name="choices_array" type="String" default=""/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="x" type="int" default="-1"/>
-        <param name="y" type="int" default="-1"/>
-        <param name="centre" type="bool" default="True"/>
-        <param name="width" type="int" default="150"/>
-        <param name="height" type="int" default="200"/>
-      </paramlist>
-    </method>
-    <method name="GetSingleChoiceIndex" oldname="wxGetSingleChoiceIndex" type="int" overloaded="no">
-      <autodoc>GetSingleChoiceIndex(String message, String caption, int choices, String choices_array, 
-    Window parent=None, int x=-1, 
-    int y=-1, bool centre=True, int width=150, int height=200) -&gt; int</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="caption" type="String" default=""/>
-        <param name="choices" type="int" default=""/>
-        <param name="choices_array" type="String" default=""/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="x" type="int" default="-1"/>
-        <param name="y" type="int" default="-1"/>
-        <param name="centre" type="bool" default="True"/>
-        <param name="width" type="int" default="150"/>
-        <param name="height" type="int" default="200"/>
-      </paramlist>
-    </method>
-    <method name="MessageBox" oldname="wxMessageBox" type="int" overloaded="no">
-      <autodoc>MessageBox(String message, String caption=EmptyString, int style=wxOK|wxCENTRE, 
-    Window parent=None, int x=-1, 
-    int y=-1) -&gt; int</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="caption" type="String" default="wxPyEmptyString"/>
-        <param name="style" type="int" default="wxOK|wxCENTRE"/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="x" type="int" default="-1"/>
-        <param name="y" type="int" default="-1"/>
-      </paramlist>
-    </method>
-    <method name="GetNumberFromUser" oldname="wxGetNumberFromUser" type="long" overloaded="no">
-      <autodoc>GetNumberFromUser(String message, String prompt, String caption, long value, 
-    long min=0, long max=100, Window parent=None, 
-    Point pos=DefaultPosition) -&gt; long</autodoc>
-      <paramlist>
-        <param name="message" type="String" default=""/>
-        <param name="prompt" type="String" default=""/>
-        <param name="caption" type="String" default=""/>
-        <param name="value" type="long" default=""/>
-        <param name="min" type="long" default="0"/>
-        <param name="max" type="long" default="100"/>
-        <param name="parent" type="Window" default="NULL"/>
-        <param name="pos" type="Point" default="wxDefaultPosition"/>
-      </paramlist>
-    </method>
-    <method name="ColourDisplay" oldname="wxColourDisplay" type="bool" overloaded="no">
-      <autodoc>ColourDisplay() -&gt; bool</autodoc>
-    </method>
-    <method name="DisplayDepth" oldname="wxDisplayDepth" type="int" overloaded="no">
-      <autodoc>DisplayDepth() -&gt; int</autodoc>
-    </method>
-    <method name="GetDisplayDepth" oldname="wxGetDisplayDepth" type="int" overloaded="no">
-      <autodoc>GetDisplayDepth() -&gt; int</autodoc>
-    </method>
-    <method name="DisplaySize" oldname="wxDisplaySize" type="" overloaded="no">
-      <autodoc>DisplaySize() -&gt; (width, height)</autodoc>
-      <paramlist>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetDisplaySize" oldname="wxGetDisplaySize" type="Size" overloaded="no">
-      <autodoc>GetDisplaySize() -&gt; Size</autodoc>
-    </method>
-    <method name="DisplaySizeMM" oldname="wxDisplaySizeMM" type="" overloaded="no">
-      <autodoc>DisplaySizeMM() -&gt; (width, height)</autodoc>
-      <paramlist>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetDisplaySizeMM" oldname="wxGetDisplaySizeMM" type="Size" overloaded="no">
-      <autodoc>GetDisplaySizeMM() -&gt; Size</autodoc>
-    </method>
-    <method name="ClientDisplayRect" oldname="wxClientDisplayRect" type="" overloaded="no">
-      <autodoc>ClientDisplayRect() -&gt; (x, y, width, height)</autodoc>
-      <paramlist>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-        <param name="OUTPUT" type="int" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetClientDisplayRect" oldname="wxGetClientDisplayRect" type="Rect" overloaded="no">
-      <autodoc>GetClientDisplayRect() -&gt; Rect</autodoc>
-    </method>
-    <method name="SetCursor" oldname="wxSetCursor" type="" overloaded="no">
-      <autodoc>SetCursor(Cursor cursor)</autodoc>
-      <paramlist>
-        <param name="cursor" type="Cursor" default=""/>
-      </paramlist>
-    </method>
-    <method name="BeginBusyCursor" oldname="wxBeginBusyCursor" type="" overloaded="no">
-      <autodoc>BeginBusyCursor(Cursor cursor=wxHOURGLASS_CURSOR)</autodoc>
-      <paramlist>
-        <param name="cursor" type="Cursor" default="wxHOURGLASS_CURSOR"/>
-      </paramlist>
-    </method>
-    <method name="GetActiveWindow" oldname="wxGetActiveWindow" type="Window" overloaded="no">
-      <autodoc>GetActiveWindow() -&gt; Window</autodoc>
-    </method>
-    <method name="GenericFindWindowAtPoint" oldname="wxGenericFindWindowAtPoint" type="Window" overloaded="no">
-      <autodoc>GenericFindWindowAtPoint(Point pt) -&gt; Window</autodoc>
-      <paramlist>
-        <param name="pt" type="Point" default=""/>
-      </paramlist>
-    </method>
-    <method name="FindWindowAtPoint" oldname="wxFindWindowAtPoint" type="Window" overloaded="no">
-      <autodoc>FindWindowAtPoint(Point pt) -&gt; Window</autodoc>
-      <paramlist>
-        <param name="pt" type="Point" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetTopLevelParent" oldname="wxGetTopLevelParent" type="Window" overloaded="no">
-      <autodoc>GetTopLevelParent(Window win) -&gt; Window</autodoc>
-      <paramlist>
-        <param name="win" type="Window" default=""/>
-      </paramlist>
-    </method>
-    <method name="GetKeyState" oldname="wxGetKeyState" type="bool" overloaded="no">
-      <autodoc>GetKeyState(int key) -&gt; bool</autodoc>
-      <docstring>Get the state of a key (true if pressed or toggled on, false if not.)
-This is generally most useful getting the state of the modifier or
-toggle keys.  On some platforms those may be the only keys that work.
-</docstring>
-      <paramlist>
-        <param name="key" type="wxKeyCode" default=""/>
-      </paramlist>
-    </method>
-    <method name="WakeUpMainThread" oldname="wxWakeUpMainThread" type="" overloaded="no">
-      <autodoc>WakeUpMainThread()</autodoc>
-    </method>
-    <method name="MutexGuiEnter" oldname="wxMutexGuiEnter" type="" overloaded="no">
-      <autodoc>MutexGuiEnter()</autodoc>
-    </method>
-    <method name="MutexGuiLeave" oldname="wxMutexGuiLeave" type="" overloaded="no">
-      <autodoc>MutexGuiLeave()</autodoc>
-    </method>
-    <class name="MutexGuiLocker" oldname="wxMutexGuiLocker" module="_misc">
-      <constructor name="MutexGuiLocker" overloaded="no">
-        <autodoc>__init__(self) -&gt; MutexGuiLocker</autodoc>
-      </constructor>
-      <destructor name="~wxMutexGuiLocker" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <method name="Thread_IsMain" oldname="wxThread_IsMain" type="bool" overloaded="no">
-      <autodoc>Thread_IsMain() -&gt; bool</autodoc>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ToolTip" oldname="wxToolTip" module="_misc">
-      <baseclass name="Object"/>
-      <constructor name="ToolTip" overloaded="no">
-        <autodoc>__init__(self, String tip) -&gt; ToolTip</autodoc>
-        <paramlist>
-          <param name="tip" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="SetTip" type="" overloaded="no">
-        <autodoc>SetTip(self, String tip)</autodoc>
-        <paramlist>
-          <param name="tip" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTip" type="String" overloaded="no">
-        <autodoc>GetTip(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetWindow" type="Window" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-      <staticmethod name="Enable" type="" overloaded="no">
-        <autodoc>Enable(bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetDelay" type="" overloaded="no">
-        <autodoc>SetDelay(long milliseconds)</autodoc>
-        <paramlist>
-          <param name="milliseconds" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="Caret" oldname="wxCaret" module="_misc">
-      <constructor name="Caret" overloaded="no">
-        <autodoc>__init__(self, Window window, Size size) -&gt; Caret</autodoc>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxCaret" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsVisible" type="bool" overloaded="no">
-        <autodoc>IsVisible(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetPositionTuple" type="" overloaded="no">
-        <autodoc>GetPositionTuple() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="GetSizeTuple" type="" overloaded="no">
-        <autodoc>GetSizeTuple() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWindow" type="Window" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="MoveXY" type="" overloaded="no">
-        <autodoc>MoveXY(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Move" type="" overloaded="no">
-        <autodoc>Move(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSizeWH" type="" overloaded="no">
-        <autodoc>SetSizeWH(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, int show=True)</autodoc>
-        <paramlist>
-          <param name="show" type="int" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Hide" type="" overloaded="no">
-        <autodoc>Hide(self)</autodoc>
-      </method>
-    </class>
-    <method name="Caret_GetBlinkTime" oldname="wxCaret_GetBlinkTime" type="int" overloaded="no">
-      <autodoc>Caret_GetBlinkTime() -&gt; int</autodoc>
-    </method>
-    <method name="Caret_SetBlinkTime" oldname="wxCaret_SetBlinkTime" type="" overloaded="no">
-      <autodoc>Caret_SetBlinkTime(int milliseconds)</autodoc>
-      <paramlist>
-        <param name="milliseconds" type="int" default=""/>
-      </paramlist>
-    </method>
-    <class name="BusyCursor" oldname="wxBusyCursor" module="_misc">
-      <constructor name="BusyCursor" overloaded="no">
-        <autodoc>__init__(self, Cursor cursor=wxHOURGLASS_CURSOR) -&gt; BusyCursor</autodoc>
-        <paramlist>
-          <param name="cursor" type="Cursor" default="wxHOURGLASS_CURSOR"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxBusyCursor" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="WindowDisabler" oldname="wxWindowDisabler" module="_misc">
-      <constructor name="WindowDisabler" overloaded="no">
-        <autodoc>__init__(self, Window winToSkip=None) -&gt; WindowDisabler</autodoc>
-        <paramlist>
-          <param name="winToSkip" type="Window" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxWindowDisabler" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="BusyInfo" oldname="wxBusyInfo" module="_misc">
-      <baseclass name="Object"/>
-      <constructor name="BusyInfo" overloaded="no">
-        <autodoc>__init__(self, String message) -&gt; BusyInfo</autodoc>
-        <paramlist>
-          <param name="message" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxBusyInfo" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="StopWatch" oldname="wxStopWatch" module="_misc">
-      <constructor name="StopWatch" overloaded="no">
-        <autodoc>__init__(self) -&gt; StopWatch</autodoc>
-      </constructor>
-      <method name="Start" type="" overloaded="no">
-        <autodoc>Start(self, long t0=0)</autodoc>
-        <paramlist>
-          <param name="t0" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Pause" type="" overloaded="no">
-        <autodoc>Pause(self)</autodoc>
-      </method>
-      <method name="Resume" type="" overloaded="no">
-        <autodoc>Resume(self)</autodoc>
-      </method>
-      <method name="Time" type="long" overloaded="no">
-        <autodoc>Time(self) -&gt; long</autodoc>
-      </method>
-    </class>
-    <class name="FileHistory" oldname="wxFileHistory" module="_misc">
-      <baseclass name="Object"/>
-      <constructor name="FileHistory" overloaded="no">
-        <autodoc>__init__(self, int maxFiles=9, int idBase=ID_FILE1) -&gt; FileHistory</autodoc>
-        <paramlist>
-          <param name="maxFiles" type="int" default="9"/>
-          <param name="idBase" type="int" default="wxID_FILE1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFileHistory" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="AddFileToHistory" type="" overloaded="no">
-        <autodoc>AddFileToHistory(self, String file)</autodoc>
-        <paramlist>
-          <param name="file" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveFileFromHistory" type="" overloaded="no">
-        <autodoc>RemoveFileFromHistory(self, int i)</autodoc>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaxFiles" type="int" overloaded="no">
-        <autodoc>GetMaxFiles(self) -&gt; int</autodoc>
-      </method>
-      <method name="UseMenu" type="" overloaded="no">
-        <autodoc>UseMenu(self, Menu menu)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveMenu" type="" overloaded="no">
-        <autodoc>RemoveMenu(self, Menu menu)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="Load" type="" overloaded="no">
-        <autodoc>Load(self, ConfigBase config)</autodoc>
-        <paramlist>
-          <param name="config" type="wxConfigBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="Save" type="" overloaded="no">
-        <autodoc>Save(self, ConfigBase config)</autodoc>
-        <paramlist>
-          <param name="config" type="wxConfigBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddFilesToMenu" type="" overloaded="no">
-        <autodoc>AddFilesToMenu(self)</autodoc>
-      </method>
-      <method name="AddFilesToThisMenu" type="" overloaded="no">
-        <autodoc>AddFilesToThisMenu(self, Menu menu)</autodoc>
-        <paramlist>
-          <param name="menu" type="Menu" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHistoryFile" type="String" overloaded="no">
-        <autodoc>GetHistoryFile(self, int i) -&gt; String</autodoc>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="SingleInstanceChecker" oldname="wxSingleInstanceChecker" module="_misc">
-      <constructor name="SingleInstanceChecker" overloaded="no">
-        <autodoc>__init__(self, String name, String path=EmptyString) -&gt; SingleInstanceChecker</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreSingleInstanceChecker" overloaded="no">
-        <autodoc>PreSingleInstanceChecker() -&gt; SingleInstanceChecker</autodoc>
-      </constructor>
-      <destructor name="~wxSingleInstanceChecker" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, String name, String path=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="IsAnotherRunning" type="bool" overloaded="no">
-        <autodoc>IsAnotherRunning(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <method name="DrawWindowOnDC" oldname="wxDrawWindowOnDC" type="" overloaded="no">
-      <autodoc>DrawWindowOnDC(Window window, DC dc, int method)</autodoc>
-      <paramlist>
-        <param name="window" type="Window" default=""/>
-        <param name="dc" type="DC" default=""/>
-        <param name="method" type="int" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="TipProvider" oldname="wxTipProvider" module="_misc">
-      <destructor name="~wxTipProvider" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetTip" type="String" overloaded="no">
-        <autodoc>GetTip(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetCurrentTip" type="size_t" overloaded="no">
-        <autodoc>GetCurrentTip(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="PreprocessTip" type="String" overloaded="no">
-        <autodoc>PreprocessTip(self, String tip) -&gt; String</autodoc>
-        <paramlist>
-          <param name="tip" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyTipProvider" oldname="wxPyTipProvider" module="_misc">
-      <baseclass name="TipProvider"/>
-      <constructor name="PyTipProvider" overloaded="no">
-        <autodoc>__init__(self, size_t currentTip) -&gt; PyTipProvider</autodoc>
-        <paramlist>
-          <param name="currentTip" type="size_t" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <method name="ShowTip" oldname="wxShowTip" type="bool" overloaded="no">
-      <autodoc>ShowTip(Window parent, TipProvider tipProvider, bool showAtStartup=True) -&gt; bool</autodoc>
-      <paramlist>
-        <param name="parent" type="Window" default=""/>
-        <param name="tipProvider" type="TipProvider" default=""/>
-        <param name="showAtStartup" type="bool" default="True"/>
-      </paramlist>
-    </method>
-    <method name="CreateFileTipProvider" oldname="wxCreateFileTipProvider" type="TipProvider" overloaded="no">
-      <autodoc>CreateFileTipProvider(String filename, size_t currentTip) -&gt; TipProvider</autodoc>
-      <paramlist>
-        <param name="filename" type="String" default=""/>
-        <param name="currentTip" type="size_t" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Timer" oldname="wxPyTimer" module="_misc">
-      <baseclass name="EvtHandler"/>
-      <constructor name="wxPyTimer" overloaded="no">
-        <autodoc>__init__(self, EvtHandler owner=None, int id=-1) -&gt; Timer</autodoc>
-        <paramlist>
-          <param name="owner" type="EvtHandler" default="NULL"/>
-          <param name="id" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPyTimer" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class, int incref=1)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-          <param name="incref" type="int" default="1"/>
-        </paramlist>
-      </method>
-      <method name="SetOwner" type="" overloaded="no">
-        <autodoc>SetOwner(self, EvtHandler owner, int id=-1)</autodoc>
-        <paramlist>
-          <param name="owner" type="EvtHandler" default=""/>
-          <param name="id" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetOwner" type="EvtHandler" overloaded="no">
-        <autodoc>GetOwner(self) -&gt; EvtHandler</autodoc>
-      </method>
-      <method name="Start" type="bool" overloaded="no">
-        <autodoc>Start(self, int milliseconds=-1, bool oneShot=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="milliseconds" type="int" default="-1"/>
-          <param name="oneShot" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Stop" type="" overloaded="no">
-        <autodoc>Stop(self)</autodoc>
-      </method>
-      <method name="IsRunning" type="bool" overloaded="no">
-        <autodoc>IsRunning(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetInterval" type="int" overloaded="no">
-        <autodoc>GetInterval(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsOneShot" type="bool" overloaded="no">
-        <autodoc>IsOneShot(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-# For backwards compatibility with 2.4
-class PyTimer(Timer):
-    def __init__(self, notify):
-        Timer.__init__(self)
-        self.notify = notify
-
-    def Notify(self):
-        if self.notify:
-            self.notify()
-
-
-EVT_TIMER = wx.PyEventBinder( wxEVT_TIMER, 1 )
-
-</pythoncode>
-    <class name="TimerEvent" oldname="wxTimerEvent" module="_misc">
-      <baseclass name="Event"/>
-      <constructor name="TimerEvent" overloaded="no">
-        <autodoc>__init__(self, int timerid=0, int interval=0) -&gt; TimerEvent</autodoc>
-        <paramlist>
-          <param name="timerid" type="int" default="0"/>
-          <param name="interval" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetInterval" type="int" overloaded="no">
-        <autodoc>GetInterval(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="TimerRunner" oldname="wxTimerRunner" module="_misc">
-      <constructor name="TimerRunner" overloaded="yes">
-        <paramlist>
-          <param name="timer" type="wxTimer" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="TimerRunner" overloaded="yes">
-        <autodoc>__init__(self, wxTimer timer) -&gt; TimerRunner
-__init__(self, wxTimer timer, int milli, bool oneShot=False) -&gt; TimerRunner</autodoc>
-        <paramlist>
-          <param name="timer" type="wxTimer" default=""/>
-          <param name="milli" type="int" default=""/>
-          <param name="oneShot" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxTimerRunner" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Start" type="" overloaded="no">
-        <autodoc>Start(self, int milli, bool oneShot=False)</autodoc>
-        <paramlist>
-          <param name="milli" type="int" default=""/>
-          <param name="oneShot" type="bool" default="False"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Log" oldname="wxLog" module="_misc">
-      <constructor name="Log" overloaded="no">
-        <autodoc>__init__(self) -&gt; Log</autodoc>
-      </constructor>
-      <staticmethod name="IsEnabled" type="bool" overloaded="no">
-        <autodoc>IsEnabled() -&gt; bool</autodoc>
-      </staticmethod>
-      <staticmethod name="EnableLogging" type="bool" overloaded="no">
-        <autodoc>EnableLogging(bool doIt=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="doIt" type="bool" default="True"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="OnLog" type="" overloaded="no">
-        <autodoc>OnLog(wxLogLevel level, wxChar szString, time_t t)</autodoc>
-        <paramlist>
-          <param name="level" type="wxLogLevel" default=""/>
-          <param name="szString" type="wxChar" default=""/>
-          <param name="t" type="time_t" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="Flush" type="" overloaded="no">
-        <autodoc>Flush(self)</autodoc>
-      </method>
-      <staticmethod name="FlushActive" type="" overloaded="no">
-        <autodoc>FlushActive()</autodoc>
-      </staticmethod>
-      <staticmethod name="GetActiveTarget" type="Log" overloaded="no">
-        <autodoc>GetActiveTarget() -&gt; Log</autodoc>
-      </staticmethod>
-      <staticmethod name="SetActiveTarget" type="Log" overloaded="no">
-        <autodoc>SetActiveTarget(Log pLogger) -&gt; Log</autodoc>
-        <paramlist>
-          <param name="pLogger" type="Log" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Suspend" type="" overloaded="no">
-        <autodoc>Suspend()</autodoc>
-      </staticmethod>
-      <staticmethod name="Resume" type="" overloaded="no">
-        <autodoc>Resume()</autodoc>
-      </staticmethod>
-      <staticmethod name="SetVerbose" type="" overloaded="no">
-        <autodoc>SetVerbose(bool bVerbose=True)</autodoc>
-        <paramlist>
-          <param name="bVerbose" type="bool" default="True"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="SetLogLevel" type="" overloaded="no">
-        <autodoc>SetLogLevel(wxLogLevel logLevel)</autodoc>
-        <paramlist>
-          <param name="logLevel" type="wxLogLevel" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="DontCreateOnDemand" type="" overloaded="no">
-        <autodoc>DontCreateOnDemand()</autodoc>
-      </staticmethod>
-      <staticmethod name="SetTraceMask" type="" overloaded="no">
-        <autodoc>SetTraceMask(wxTraceMask ulMask)</autodoc>
-        <paramlist>
-          <param name="ulMask" type="wxTraceMask" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="AddTraceMask" type="" overloaded="no">
-        <autodoc>AddTraceMask(String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="RemoveTraceMask" type="" overloaded="no">
-        <autodoc>RemoveTraceMask(String str)</autodoc>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="ClearTraceMasks" type="" overloaded="no">
-        <autodoc>ClearTraceMasks()</autodoc>
-      </staticmethod>
-      <staticmethod name="GetTraceMasks" type="wxArrayString" overloaded="no">
-        <autodoc>GetTraceMasks() -&gt; wxArrayString</autodoc>
-      </staticmethod>
-      <staticmethod name="SetTimestamp" type="" overloaded="no">
-        <autodoc>SetTimestamp(wxChar ts)</autodoc>
-        <paramlist>
-          <param name="ts" type="wxChar" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetVerbose" type="bool" overloaded="no">
-        <autodoc>GetVerbose() -&gt; bool</autodoc>
-      </staticmethod>
-      <staticmethod name="GetTraceMask" type="wxTraceMask" overloaded="no">
-        <autodoc>GetTraceMask() -&gt; wxTraceMask</autodoc>
-      </staticmethod>
-      <staticmethod name="IsAllowedTraceMask" type="bool" overloaded="no">
-        <autodoc>IsAllowedTraceMask(wxChar mask) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="mask" type="wxChar" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetLogLevel" type="wxLogLevel" overloaded="no">
-        <autodoc>GetLogLevel() -&gt; wxLogLevel</autodoc>
-      </staticmethod>
-      <staticmethod name="GetTimestamp" type="wxChar" overloaded="no">
-        <autodoc>GetTimestamp() -&gt; wxChar</autodoc>
-      </staticmethod>
-      <staticmethod name="TimeStamp" type="String" overloaded="no">
-        <autodoc>TimeStamp() -&gt; String</autodoc>
-      </staticmethod>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <class name="LogStderr" oldname="wxLogStderr" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="LogStderr" overloaded="no">
-        <autodoc>__init__(self) -&gt; LogStderr</autodoc>
-      </constructor>
-    </class>
-    <class name="LogTextCtrl" oldname="wxLogTextCtrl" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="LogTextCtrl" overloaded="no">
-        <autodoc>__init__(self, wxTextCtrl pTextCtrl) -&gt; LogTextCtrl</autodoc>
-        <paramlist>
-          <param name="pTextCtrl" type="TextCtrl" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="LogGui" oldname="wxLogGui" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="LogGui" overloaded="no">
-        <autodoc>__init__(self) -&gt; LogGui</autodoc>
-      </constructor>
-    </class>
-    <class name="LogWindow" oldname="wxLogWindow" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="LogWindow" overloaded="no">
-        <autodoc>__init__(self, wxFrame pParent, String szTitle, bool bShow=True, bool bPassToOld=True) -&gt; LogWindow</autodoc>
-        <paramlist>
-          <param name="pParent" type="Frame" default=""/>
-          <param name="szTitle" type="String" default=""/>
-          <param name="bShow" type="bool" default="True"/>
-          <param name="bPassToOld" type="bool" default="True"/>
-        </paramlist>
-      </constructor>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, bool bShow=True)</autodoc>
-        <paramlist>
-          <param name="bShow" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetFrame" type="Frame" overloaded="no">
-        <autodoc>GetFrame(self) -&gt; wxFrame</autodoc>
-      </method>
-      <method name="GetOldLog" type="Log" overloaded="no">
-        <autodoc>GetOldLog(self) -&gt; Log</autodoc>
-      </method>
-      <method name="IsPassingMessages" type="bool" overloaded="no">
-        <autodoc>IsPassingMessages(self) -&gt; bool</autodoc>
-      </method>
-      <method name="PassMessages" type="" overloaded="no">
-        <autodoc>PassMessages(self, bool bDoPass)</autodoc>
-        <paramlist>
-          <param name="bDoPass" type="bool" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="LogChain" oldname="wxLogChain" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="LogChain" overloaded="no">
-        <autodoc>__init__(self, Log logger) -&gt; LogChain</autodoc>
-        <paramlist>
-          <param name="logger" type="Log" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="SetLog" type="" overloaded="no">
-        <autodoc>SetLog(self, Log logger)</autodoc>
-        <paramlist>
-          <param name="logger" type="Log" default=""/>
-        </paramlist>
-      </method>
-      <method name="PassMessages" type="" overloaded="no">
-        <autodoc>PassMessages(self, bool bDoPass)</autodoc>
-        <paramlist>
-          <param name="bDoPass" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsPassingMessages" type="bool" overloaded="no">
-        <autodoc>IsPassingMessages(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetOldLog" type="Log" overloaded="no">
-        <autodoc>GetOldLog(self) -&gt; Log</autodoc>
-      </method>
-    </class>
-    <method name="SysErrorCode" oldname="wxSysErrorCode" type="unsigned long" overloaded="no">
-      <autodoc>SysErrorCode() -&gt; unsigned long</autodoc>
-    </method>
-    <method name="SysErrorMsg" oldname="wxSysErrorMsg" type="String" overloaded="no">
-      <autodoc>SysErrorMsg(unsigned long nErrCode=0) -&gt; String</autodoc>
-      <paramlist>
-        <param name="nErrCode" type="unsigned long" default="0"/>
-      </paramlist>
-    </method>
-    <method name="LogFatalError" oldname="wxLogFatalError" type="" overloaded="no">
-      <autodoc>LogFatalError(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogError" oldname="wxLogError" type="" overloaded="no">
-      <autodoc>LogError(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogWarning" oldname="wxLogWarning" type="" overloaded="no">
-      <autodoc>LogWarning(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogMessage" oldname="wxLogMessage" type="" overloaded="no">
-      <autodoc>LogMessage(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogInfo" oldname="wxLogInfo" type="" overloaded="no">
-      <autodoc>LogInfo(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogDebug" oldname="wxLogDebug" type="" overloaded="no">
-      <autodoc>LogDebug(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogVerbose" oldname="wxLogVerbose" type="" overloaded="no">
-      <autodoc>LogVerbose(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogStatus" oldname="wxLogStatus" type="" overloaded="no">
-      <autodoc>LogStatus(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogStatusFrame" oldname="wxLogStatus" type="" overloaded="no">
-      <autodoc>LogStatusFrame(wxFrame pFrame, String msg)</autodoc>
-      <paramlist>
-        <param name="pFrame" type="Frame" default=""/>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogSysError" oldname="wxLogSysError" type="" overloaded="no">
-      <autodoc>LogSysError(String msg)</autodoc>
-      <paramlist>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogTrace" oldname="wxLogTrace" type="" overloaded="yes">
-      <paramlist>
-        <param name="mask" type="unsigned long" default=""/>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogTrace" oldname="wxLogTrace" type="" overloaded="yes">
-      <autodoc>LogTrace(unsigned long mask, String msg)
-LogTrace(String mask, String msg)</autodoc>
-      <paramlist>
-        <param name="mask" type="String" default=""/>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="LogGeneric" oldname="wxLogGeneric" type="" overloaded="no">
-      <autodoc>LogGeneric(unsigned long level, String msg)</autodoc>
-      <paramlist>
-        <param name="level" type="unsigned long" default=""/>
-        <param name="msg" type="String" default=""/>
-      </paramlist>
-    </method>
-    <method name="SafeShowMessage" oldname="wxSafeShowMessage" type="" overloaded="no">
-      <autodoc>SafeShowMessage(String title, String text)</autodoc>
-      <paramlist>
-        <param name="title" type="String" default=""/>
-        <param name="text" type="String" default=""/>
-      </paramlist>
-    </method>
-    <class name="LogNull" oldname="wxLogNull" module="_misc">
-      <constructor name="LogNull" overloaded="no">
-        <autodoc>__init__(self) -&gt; LogNull</autodoc>
-      </constructor>
-      <destructor name="~wxLogNull" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="PyLog" oldname="wxPyLog" module="_misc">
-      <baseclass name="Log"/>
-      <constructor name="PyLog" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyLog</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Process" oldname="wxPyProcess" module="_misc">
-      <baseclass name="EvtHandler"/>
-      <constructor name="wxPyProcess" overloaded="no">
-        <autodoc>__init__(self, EvtHandler parent=None, int id=-1) -&gt; Process</autodoc>
-        <paramlist>
-          <param name="parent" type="EvtHandler" default="NULL"/>
-          <param name="id" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <staticmethod name="Kill" type="wxKillError" overloaded="no">
-        <autodoc>Kill(int pid, int sig=SIGTERM) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pid" type="int" default=""/>
-          <param name="sig" type="wxSignal" default="wxSIGTERM"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Exists" type="bool" overloaded="no">
-        <autodoc>Exists(int pid) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pid" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Open" type="Process" overloaded="no">
-        <autodoc>Open(String cmd, int flags=EXEC_ASYNC) -&gt; Process</autodoc>
-        <paramlist>
-          <param name="cmd" type="String" default=""/>
-          <param name="flags" type="int" default="wxEXEC_ASYNC"/>
-        </paramlist>
-      </staticmethod>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnTerminate" type="" overloaded="no">
-        <autodoc>base_OnTerminate(self, int pid, int status)</autodoc>
-        <paramlist>
-          <param name="pid" type="int" default=""/>
-          <param name="status" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Redirect" type="" overloaded="no">
-        <autodoc>Redirect(self)</autodoc>
-      </method>
-      <method name="IsRedirected" type="bool" overloaded="no">
-        <autodoc>IsRedirected(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Detach" type="" overloaded="no">
-        <autodoc>Detach(self)</autodoc>
-      </method>
-      <method name="GetInputStream" type="wxInputStream" overloaded="no">
-        <autodoc>GetInputStream(self) -&gt; InputStream</autodoc>
-      </method>
-      <method name="GetErrorStream" type="wxInputStream" overloaded="no">
-        <autodoc>GetErrorStream(self) -&gt; InputStream</autodoc>
-      </method>
-      <method name="GetOutputStream" type="OutputStream" overloaded="no">
-        <autodoc>GetOutputStream(self) -&gt; OutputStream</autodoc>
-      </method>
-      <method name="CloseOutput" type="" overloaded="no">
-        <autodoc>CloseOutput(self)</autodoc>
-      </method>
-      <method name="IsInputOpened" type="bool" overloaded="no">
-        <autodoc>IsInputOpened(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsInputAvailable" type="bool" overloaded="no">
-        <autodoc>IsInputAvailable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsErrorAvailable" type="bool" overloaded="no">
-        <autodoc>IsErrorAvailable(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="ProcessEvent" oldname="wxProcessEvent" module="_misc">
-      <baseclass name="Event"/>
-      <constructor name="ProcessEvent" overloaded="no">
-        <autodoc>__init__(self, int id=0, int pid=0, int exitcode=0) -&gt; ProcessEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-          <param name="pid" type="int" default="0"/>
-          <param name="exitcode" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="GetPid" type="int" overloaded="no">
-        <autodoc>GetPid(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetExitCode" type="int" overloaded="no">
-        <autodoc>GetExitCode(self) -&gt; int</autodoc>
-      </method>
-      <property name="m_pid" type="int" readonly="no"/>
-      <property name="m_exitcode" type="int" readonly="no"/>
-    </class>
-    <pythoncode>
-EVT_END_PROCESS = wx.PyEventBinder( wxEVT_END_PROCESS, 1 )
-</pythoncode>
-    <method name="Execute" oldname="wxExecute" type="long" overloaded="no">
-      <autodoc>Execute(String command, int flags=EXEC_ASYNC, Process process=None) -&gt; long</autodoc>
-      <paramlist>
-        <param name="command" type="String" default=""/>
-        <param name="flags" type="int" default="wxEXEC_ASYNC"/>
-        <param name="process" type="Process" default="NULL"/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Joystick" oldname="wxJoystick" module="_misc">
-      <constructor name="Joystick" overloaded="no">
-        <autodoc>__init__(self, int joystick=JOYSTICK1) -&gt; Joystick</autodoc>
-        <paramlist>
-          <param name="joystick" type="int" default="wxJOYSTICK1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxJoystick" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetZPosition" type="int" overloaded="no">
-        <autodoc>GetZPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetButtonState" type="int" overloaded="no">
-        <autodoc>GetButtonState(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPOVPosition" type="int" overloaded="no">
-        <autodoc>GetPOVPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPOVCTSPosition" type="int" overloaded="no">
-        <autodoc>GetPOVCTSPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRudderPosition" type="int" overloaded="no">
-        <autodoc>GetRudderPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUPosition" type="int" overloaded="no">
-        <autodoc>GetUPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetVPosition" type="int" overloaded="no">
-        <autodoc>GetVPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMovementThreshold" type="int" overloaded="no">
-        <autodoc>GetMovementThreshold(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMovementThreshold" type="" overloaded="no">
-        <autodoc>SetMovementThreshold(self, int threshold)</autodoc>
-        <paramlist>
-          <param name="threshold" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetNumberJoysticks" type="int" overloaded="no">
-        <autodoc>GetNumberJoysticks(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetManufacturerId" type="int" overloaded="no">
-        <autodoc>GetManufacturerId(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetProductId" type="int" overloaded="no">
-        <autodoc>GetProductId(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetProductName" type="String" overloaded="no">
-        <autodoc>GetProductName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetXMin" type="int" overloaded="no">
-        <autodoc>GetXMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetYMin" type="int" overloaded="no">
-        <autodoc>GetYMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetZMin" type="int" overloaded="no">
-        <autodoc>GetZMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetXMax" type="int" overloaded="no">
-        <autodoc>GetXMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetYMax" type="int" overloaded="no">
-        <autodoc>GetYMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetZMax" type="int" overloaded="no">
-        <autodoc>GetZMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNumberButtons" type="int" overloaded="no">
-        <autodoc>GetNumberButtons(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNumberAxes" type="int" overloaded="no">
-        <autodoc>GetNumberAxes(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxButtons" type="int" overloaded="no">
-        <autodoc>GetMaxButtons(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxAxes" type="int" overloaded="no">
-        <autodoc>GetMaxAxes(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPollingMin" type="int" overloaded="no">
-        <autodoc>GetPollingMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPollingMax" type="int" overloaded="no">
-        <autodoc>GetPollingMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRudderMin" type="int" overloaded="no">
-        <autodoc>GetRudderMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRudderMax" type="int" overloaded="no">
-        <autodoc>GetRudderMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUMin" type="int" overloaded="no">
-        <autodoc>GetUMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetUMax" type="int" overloaded="no">
-        <autodoc>GetUMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetVMin" type="int" overloaded="no">
-        <autodoc>GetVMin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetVMax" type="int" overloaded="no">
-        <autodoc>GetVMax(self) -&gt; int</autodoc>
-      </method>
-      <method name="HasRudder" type="bool" overloaded="no">
-        <autodoc>HasRudder(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasZ" type="bool" overloaded="no">
-        <autodoc>HasZ(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasU" type="bool" overloaded="no">
-        <autodoc>HasU(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasV" type="bool" overloaded="no">
-        <autodoc>HasV(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasPOV" type="bool" overloaded="no">
-        <autodoc>HasPOV(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasPOV4Dir" type="bool" overloaded="no">
-        <autodoc>HasPOV4Dir(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasPOVCTS" type="bool" overloaded="no">
-        <autodoc>HasPOVCTS(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetCapture" type="bool" overloaded="no">
-        <autodoc>SetCapture(self, Window win, int pollingFreq=0) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-          <param name="pollingFreq" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="ReleaseCapture" type="bool" overloaded="no">
-        <autodoc>ReleaseCapture(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="JoystickEvent" oldname="wxJoystickEvent" module="_misc">
-      <baseclass name="Event"/>
-      <constructor name="JoystickEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int state=0, int joystick=JOYSTICK1, 
-    int change=0) -&gt; JoystickEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="state" type="int" default="0"/>
-          <param name="joystick" type="int" default="wxJOYSTICK1"/>
-          <param name="change" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <property name="m_pos" type="Point" readonly="no"/>
-      <property name="m_zPosition" type="int" readonly="no"/>
-      <property name="m_buttonChange" type="int" readonly="no"/>
-      <property name="m_buttonState" type="int" readonly="no"/>
-      <property name="m_joyStick" type="int" readonly="no"/>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetZPosition" type="int" overloaded="no">
-        <autodoc>GetZPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetButtonState" type="int" overloaded="no">
-        <autodoc>GetButtonState(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetButtonChange" type="int" overloaded="no">
-        <autodoc>GetButtonChange(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetJoystick" type="int" overloaded="no">
-        <autodoc>GetJoystick(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetJoystick" type="" overloaded="no">
-        <autodoc>SetJoystick(self, int stick)</autodoc>
-        <paramlist>
-          <param name="stick" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetButtonState" type="" overloaded="no">
-        <autodoc>SetButtonState(self, int state)</autodoc>
-        <paramlist>
-          <param name="state" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetButtonChange" type="" overloaded="no">
-        <autodoc>SetButtonChange(self, int change)</autodoc>
-        <paramlist>
-          <param name="change" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetZPosition" type="" overloaded="no">
-        <autodoc>SetZPosition(self, int zPos)</autodoc>
-        <paramlist>
-          <param name="zPos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsButton" type="bool" overloaded="no">
-        <autodoc>IsButton(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsMove" type="bool" overloaded="no">
-        <autodoc>IsMove(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsZMove" type="bool" overloaded="no">
-        <autodoc>IsZMove(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ButtonDown" type="bool" overloaded="no">
-        <autodoc>ButtonDown(self, int but=JOY_BUTTON_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxJOY_BUTTON_ANY"/>
-        </paramlist>
-      </method>
-      <method name="ButtonUp" type="bool" overloaded="no">
-        <autodoc>ButtonUp(self, int but=JOY_BUTTON_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxJOY_BUTTON_ANY"/>
-        </paramlist>
-      </method>
-      <method name="ButtonIsDown" type="bool" overloaded="no">
-        <autodoc>ButtonIsDown(self, int but=JOY_BUTTON_ANY) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="but" type="int" default="wxJOY_BUTTON_ANY"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-EVT_JOY_BUTTON_DOWN = wx.PyEventBinder( wxEVT_JOY_BUTTON_DOWN )
-EVT_JOY_BUTTON_UP = wx.PyEventBinder( wxEVT_JOY_BUTTON_UP )
-EVT_JOY_MOVE = wx.PyEventBinder( wxEVT_JOY_MOVE )
-EVT_JOY_ZMOVE = wx.PyEventBinder( wxEVT_JOY_ZMOVE )
-
-EVT_JOYSTICK_EVENTS = wx.PyEventBinder([ wxEVT_JOY_BUTTON_DOWN,
-                                        wxEVT_JOY_BUTTON_UP, 
-                                        wxEVT_JOY_MOVE, 
-                                        wxEVT_JOY_ZMOVE,
-                                        ])
-
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Sound" oldname="wxSound" module="_misc">
-      <constructor name="Sound" overloaded="no">
-        <autodoc>__init__(self, String fileName=EmptyString) -&gt; Sound</autodoc>
-        <paramlist>
-          <param name="fileName" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <constructor name="SoundFromData" overloaded="no">
-        <autodoc>SoundFromData(PyObject data) -&gt; Sound</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxSound" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, String fileName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="fileName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateFromData" type="bool" overloaded="no">
-        <autodoc>CreateFromData(self, PyObject data) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Play" type="bool" overloaded="no">
-        <autodoc>Play(self, unsigned int flags=SOUND_ASYNC) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="flags" type="unsigned int" default="wxSOUND_ASYNC"/>
-        </paramlist>
-      </method>
-      <staticmethod name="PlaySound" type="bool" overloaded="no">
-        <autodoc>PlaySound(String filename, unsigned int flags=SOUND_ASYNC) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="flags" type="unsigned int" default="wxSOUND_ASYNC"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Stop" type="" overloaded="no">
-        <autodoc>Stop()</autodoc>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="FileTypeInfo" oldname="wxFileTypeInfo" module="_misc">
-      <constructor name="FileTypeInfo" overloaded="no">
-        <autodoc>__init__(self, String mimeType, String openCmd, String printCmd, String desc) -&gt; FileTypeInfo</autodoc>
-        <paramlist>
-          <param name="mimeType" type="String" default=""/>
-          <param name="openCmd" type="String" default=""/>
-          <param name="printCmd" type="String" default=""/>
-          <param name="desc" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="FileTypeInfoSequence" overloaded="no">
-        <autodoc>FileTypeInfoSequence(wxArrayString sArray) -&gt; FileTypeInfo</autodoc>
-        <paramlist>
-          <param name="sArray" type="wxArrayString" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="NullFileTypeInfo" overloaded="no">
-        <autodoc>NullFileTypeInfo() -&gt; FileTypeInfo</autodoc>
-      </constructor>
-      <method name="IsValid" type="bool" overloaded="no">
-        <autodoc>IsValid(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetIcon" type="" overloaded="no">
-        <autodoc>SetIcon(self, String iconFile, int iconIndex=0)</autodoc>
-        <paramlist>
-          <param name="iconFile" type="String" default=""/>
-          <param name="iconIndex" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetShortDesc" type="" overloaded="no">
-        <autodoc>SetShortDesc(self, String shortDesc)</autodoc>
-        <paramlist>
-          <param name="shortDesc" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMimeType" type="String" overloaded="no">
-        <autodoc>GetMimeType(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetOpenCommand" type="String" overloaded="no">
-        <autodoc>GetOpenCommand(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPrintCommand" type="String" overloaded="no">
-        <autodoc>GetPrintCommand(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetShortDesc" type="String" overloaded="no">
-        <autodoc>GetShortDesc(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetDescription" type="String" overloaded="no">
-        <autodoc>GetDescription(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetExtensions" type="wxArrayString" overloaded="no">
-        <autodoc>GetExtensions(self) -&gt; wxArrayString</autodoc>
-      </method>
-      <method name="GetExtensionsCount" type="int" overloaded="no">
-        <autodoc>GetExtensionsCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetIconFile" type="String" overloaded="no">
-        <autodoc>GetIconFile(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetIconIndex" type="int" overloaded="no">
-        <autodoc>GetIconIndex(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="FileType" oldname="wxFileType" module="_misc">
-      <constructor name="FileType" overloaded="no">
-        <autodoc>__init__(self, FileTypeInfo ftInfo) -&gt; FileType</autodoc>
-        <paramlist>
-          <param name="ftInfo" type="FileTypeInfo" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFileType" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetMimeType" type="PyObject" overloaded="no">
-        <autodoc>GetMimeType(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetMimeTypes" type="PyObject" overloaded="no">
-        <autodoc>GetMimeTypes(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetExtensions" type="PyObject" overloaded="no">
-        <autodoc>GetExtensions(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetIcon" type="Icon" overloaded="no">
-        <autodoc>GetIcon(self) -&gt; Icon</autodoc>
-      </method>
-      <method name="GetIconInfo" type="PyObject" overloaded="no">
-        <autodoc>GetIconInfo(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetDescription" type="PyObject" overloaded="no">
-        <autodoc>GetDescription(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetOpenCommand" type="PyObject" overloaded="no">
-        <autodoc>GetOpenCommand(self, String filename, String mimetype=EmptyString) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="mimetype" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetPrintCommand" type="PyObject" overloaded="no">
-        <autodoc>GetPrintCommand(self, String filename, String mimetype=EmptyString) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="mimetype" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetAllCommands" type="PyObject" overloaded="no">
-        <autodoc>GetAllCommands(self, String filename, String mimetype=EmptyString) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="mimetype" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="SetCommand" type="bool" overloaded="no">
-        <autodoc>SetCommand(self, String cmd, String verb, bool overwriteprompt=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="cmd" type="String" default=""/>
-          <param name="verb" type="String" default=""/>
-          <param name="overwriteprompt" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultIcon" type="bool" overloaded="no">
-        <autodoc>SetDefaultIcon(self, String cmd=EmptyString, int index=0) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="cmd" type="String" default="wxPyEmptyString"/>
-          <param name="index" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Unassociate" type="bool" overloaded="no">
-        <autodoc>Unassociate(self) -&gt; bool</autodoc>
-      </method>
-      <staticmethod name="ExpandCommand" type="String" overloaded="no">
-        <autodoc>ExpandCommand(String command, String filename, String mimetype=EmptyString) -&gt; String</autodoc>
-        <paramlist>
-          <param name="command" type="String" default=""/>
-          <param name="filename" type="String" default=""/>
-          <param name="mimetype" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="MimeTypesManager" oldname="wxMimeTypesManager" module="_misc">
-      <constructor name="MimeTypesManager" overloaded="no">
-        <autodoc>__init__(self) -&gt; MimeTypesManager</autodoc>
-      </constructor>
-      <destructor name="~wxMimeTypesManager" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="IsOfType" type="bool" overloaded="no">
-        <autodoc>IsOfType(String mimeType, String wildcard) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="mimeType" type="String" default=""/>
-          <param name="wildcard" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="Initialize" type="" overloaded="no">
-        <autodoc>Initialize(self, int mailcapStyle=MAILCAP_ALL, String extraDir=EmptyString)</autodoc>
-        <paramlist>
-          <param name="mailcapStyle" type="int" default="wxMAILCAP_ALL"/>
-          <param name="extraDir" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="ClearData" type="" overloaded="no">
-        <autodoc>ClearData(self)</autodoc>
-      </method>
-      <method name="GetFileTypeFromExtension" type="FileType" overloaded="no">
-        <autodoc>GetFileTypeFromExtension(self, String ext) -&gt; FileType</autodoc>
-        <paramlist>
-          <param name="ext" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFileTypeFromMimeType" type="FileType" overloaded="no">
-        <autodoc>GetFileTypeFromMimeType(self, String mimeType) -&gt; FileType</autodoc>
-        <paramlist>
-          <param name="mimeType" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ReadMailcap" type="bool" overloaded="no">
-        <autodoc>ReadMailcap(self, String filename, bool fallback=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="fallback" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="ReadMimeTypes" type="bool" overloaded="no">
-        <autodoc>ReadMimeTypes(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnumAllFileTypes" type="PyObject" overloaded="no">
-        <autodoc>EnumAllFileTypes(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="AddFallback" type="" overloaded="no">
-        <autodoc>AddFallback(self, FileTypeInfo ft)</autodoc>
-        <paramlist>
-          <param name="ft" type="FileTypeInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="Associate" type="FileType" overloaded="no">
-        <autodoc>Associate(self, FileTypeInfo ftInfo) -&gt; FileType</autodoc>
-        <paramlist>
-          <param name="ftInfo" type="FileTypeInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="Unassociate" type="bool" overloaded="no">
-        <autodoc>Unassociate(self, FileType ft) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="ft" type="FileType" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ArtProvider" oldname="wxPyArtProvider" module="_misc">
-      <docstring>The wx.ArtProvider class is used to customize the look of wxWidgets
-application. When wxWidgets needs to display an icon or a bitmap (e.g.
-in the standard file dialog), it does not use hard-coded resource but
-asks wx.ArtProvider for it instead. This way the users can plug in
-their own wx.ArtProvider class and easily replace standard art with
-his/her own version. It is easy thing to do: all that is needed is
-to derive a class from wx.ArtProvider, override it's CreateBitmap
-method and register the provider with wx.ArtProvider.PushProvider::
-
-    class MyArtProvider(wx.ArtProvider):
-        def __init__(self):
-            wx.ArtProvider.__init__(self)
-
-        def CreateBitmap(self, artid, client, size):
-            ...
-            return bmp
-
-
-Identifying art resources
--------------------------
-
-Every bitmap is known to wx.ArtProvider under an unique ID that is
-used when requesting a resource from it. The IDs can have one of the
-following predefined values.  Additionally, any string recognized by
-custom art providers registered using `PushProvider` may be used.
-
-GTK+ Note
----------
-
-When running under GTK+ 2, GTK+ stock item IDs (e.g. 'gtk-cdrom') may be used
-as well.  Additionally, if wxGTK was compiled against GTK+ &gt;= 2.4, then it is
-also possible to load icons from current icon theme by specifying their name
-without the extension and directory components. Icon themes recognized by GTK+
-follow the freedesktop.org Icon Themes specification.  Note that themes are
-not guaranteed to contain all icons, so wx.ArtProvider may return wx.NullBitmap
-or wx.NullIcon.  The default theme is typically installed in /usr/share/icons/hicolor.
-
-
-    * wx.ART_ADD_BOOKMARK
-    * wx.ART_DEL_BOOKMARK
-    * wx.ART_HELP_SIDE_PANEL
-    * wx.ART_HELP_SETTINGS
-    * wx.ART_HELP_BOOK
-    * wx.ART_HELP_FOLDER
-    * wx.ART_HELP_PAGE
-    * wx.ART_GO_BACK
-    * wx.ART_GO_FORWARD
-    * wx.ART_GO_UP
-    * wx.ART_GO_DOWN
-    * wx.ART_GO_TO_PARENT
-    * wx.ART_GO_HOME
-    * wx.ART_FILE_OPEN
-    * wx.ART_PRINT
-    * wx.ART_HELP
-    * wx.ART_TIP
-    * wx.ART_REPORT_VIEW
-    * wx.ART_LIST_VIEW
-    * wx.ART_NEW_DIR
-    * wx.ART_FOLDER
-    * wx.ART_GO_DIR_UP
-    * wx.ART_EXECUTABLE_FILE
-    * wx.ART_NORMAL_FILE
-    * wx.ART_TICK_MARK
-    * wx.ART_CROSS_MARK
-    * wx.ART_ERROR
-    * wx.ART_QUESTION
-    * wx.ART_WARNING
-    * wx.ART_INFORMATION
-    * wx.ART_MISSING_IMAGE 
-
-
-Clients
--------
-
-The Client is the entity that calls wx.ArtProvider's `GetBitmap` or
-`GetIcon` function.  Client IDs serve as a hint to wx.ArtProvider
-that is supposed to help it to choose the best looking bitmap. For
-example it is often desirable to use slightly different icons in menus
-and toolbars even though they represent the same action (e.g.
-wx.ART_FILE_OPEN). Remember that this is really only a hint for
-wx.ArtProvider -- it is common that `wx.ArtProvider.GetBitmap` returns
-identical bitmap for different client values!
-
-    * wx.ART_TOOLBAR
-    * wx.ART_MENU
-    * wx.ART_FRAME_ICON
-    * wx.ART_CMN_DIALOG
-    * wx.ART_HELP_BROWSER
-    * wx.ART_MESSAGE_BOX
-    * wx.ART_BUTTON
-    * wx.ART_OTHER (used for all requests that don't fit into any
-      of the categories above)
-</docstring>
-      <constructor name="wxPyArtProvider" overloaded="no">
-        <autodoc>__init__(self) -&gt; ArtProvider</autodoc>
-        <docstring>The wx.ArtProvider class is used to customize the look of wxWidgets
-application. When wxWidgets needs to display an icon or a bitmap (e.g.
-in the standard file dialog), it does not use hard-coded resource but
-asks wx.ArtProvider for it instead. This way the users can plug in
-their own wx.ArtProvider class and easily replace standard art with
-his/her own version. It is easy thing to do: all that is needed is
-to derive a class from wx.ArtProvider, override it's CreateBitmap
-method and register the provider with wx.ArtProvider.PushProvider::
-
-    class MyArtProvider(wx.ArtProvider):
-        def __init__(self):
-            wx.ArtProvider.__init__(self)
-
-        def CreateBitmap(self, artid, client, size):
-            ...
-            return bmp
-
-
-Identifying art resources
--------------------------
-
-Every bitmap is known to wx.ArtProvider under an unique ID that is
-used when requesting a resource from it. The IDs can have one of the
-following predefined values.  Additionally, any string recognized by
-custom art providers registered using `PushProvider` may be used.
-
-GTK+ Note
----------
-
-When running under GTK+ 2, GTK+ stock item IDs (e.g. 'gtk-cdrom') may be used
-as well.  Additionally, if wxGTK was compiled against GTK+ &gt;= 2.4, then it is
-also possible to load icons from current icon theme by specifying their name
-without the extension and directory components. Icon themes recognized by GTK+
-follow the freedesktop.org Icon Themes specification.  Note that themes are
-not guaranteed to contain all icons, so wx.ArtProvider may return wx.NullBitmap
-or wx.NullIcon.  The default theme is typically installed in /usr/share/icons/hicolor.
-
-
-    * wx.ART_ADD_BOOKMARK
-    * wx.ART_DEL_BOOKMARK
-    * wx.ART_HELP_SIDE_PANEL
-    * wx.ART_HELP_SETTINGS
-    * wx.ART_HELP_BOOK
-    * wx.ART_HELP_FOLDER
-    * wx.ART_HELP_PAGE
-    * wx.ART_GO_BACK
-    * wx.ART_GO_FORWARD
-    * wx.ART_GO_UP
-    * wx.ART_GO_DOWN
-    * wx.ART_GO_TO_PARENT
-    * wx.ART_GO_HOME
-    * wx.ART_FILE_OPEN
-    * wx.ART_PRINT
-    * wx.ART_HELP
-    * wx.ART_TIP
-    * wx.ART_REPORT_VIEW
-    * wx.ART_LIST_VIEW
-    * wx.ART_NEW_DIR
-    * wx.ART_FOLDER
-    * wx.ART_GO_DIR_UP
-    * wx.ART_EXECUTABLE_FILE
-    * wx.ART_NORMAL_FILE
-    * wx.ART_TICK_MARK
-    * wx.ART_CROSS_MARK
-    * wx.ART_ERROR
-    * wx.ART_QUESTION
-    * wx.ART_WARNING
-    * wx.ART_INFORMATION
-    * wx.ART_MISSING_IMAGE 
-
-
-Clients
--------
-
-The Client is the entity that calls wx.ArtProvider's `GetBitmap` or
-`GetIcon` function.  Client IDs serve as a hint to wx.ArtProvider
-that is supposed to help it to choose the best looking bitmap. For
-example it is often desirable to use slightly different icons in menus
-and toolbars even though they represent the same action (e.g.
-wx.ART_FILE_OPEN). Remember that this is really only a hint for
-wx.ArtProvider -- it is common that `wx.ArtProvider.GetBitmap` returns
-identical bitmap for different client values!
-
-    * wx.ART_TOOLBAR
-    * wx.ART_MENU
-    * wx.ART_FRAME_ICON
-    * wx.ART_CMN_DIALOG
-    * wx.ART_HELP_BROWSER
-    * wx.ART_MESSAGE_BOX
-    * wx.ART_BUTTON
-    * wx.ART_OTHER (used for all requests that don't fit into any
-      of the categories above)
-</docstring>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="PushProvider" type="" overloaded="no">
-        <autodoc>PushProvider(ArtProvider provider)</autodoc>
-        <docstring>Add new provider to the top of providers stack.</docstring>
-        <paramlist>
-          <param name="provider" type="ArtProvider" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="PopProvider" type="bool" overloaded="no">
-        <autodoc>PopProvider() -&gt; bool</autodoc>
-        <docstring>Remove latest added provider and delete it.</docstring>
-      </staticmethod>
-      <staticmethod name="RemoveProvider" type="bool" overloaded="no">
-        <autodoc>RemoveProvider(ArtProvider provider) -&gt; bool</autodoc>
-        <docstring>Remove provider. The provider must have been added previously!  The
-provider is _not_ deleted.</docstring>
-        <paramlist>
-          <param name="provider" type="ArtProvider" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(String id, String client=ART_OTHER, Size size=DefaultSize) -&gt; Bitmap</autodoc>
-        <docstring>Query the providers for bitmap with given ID and return it. Return
-wx.NullBitmap if no provider provides it.</docstring>
-        <paramlist>
-          <param name="id" type="String" default=""/>
-          <param name="client" type="String" default="wxPyART_OTHER"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetIcon" type="Icon" overloaded="no">
-        <autodoc>GetIcon(String id, String client=ART_OTHER, Size size=DefaultSize) -&gt; Icon</autodoc>
-        <docstring>Query the providers for icon with given ID and return it.  Return
-wx.NullIcon if no provider provides it.</docstring>
-        <paramlist>
-          <param name="id" type="String" default=""/>
-          <param name="client" type="String" default="wxPyART_OTHER"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </staticmethod>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ConfigBase" oldname="wxConfigBase" module="_misc">
-      <docstring>wx.ConfigBase class defines the basic interface of all config
-classes. It can not be used by itself (it is an abstract base class)
-and you will always use one of its derivations: wx.Config or
-wx.FileConfig.
-
-wx.ConfigBase organizes the items in a tree-like structure, modeled
-after the Unix/Dos filesystem. There are groups that act like
-directories and entries, key/value pairs that act like files.  There
-is always one current group given by the current path.  As in the file
-system case, to specify a key in the config class you must use a path
-to it.  Config classes also support the notion of the current group,
-which makes it possible to use relative paths.
-
-Keys are pairs "key_name = value" where value may be of string,
-integer floating point or boolean, you can not store binary data
-without first encoding it as a string.  For performance reasons items
-should be kept small, no more than a couple kilobytes.
-</docstring>
-      <destructor name="~wxConfigBase" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="Set" type="ConfigBase" overloaded="no">
-        <autodoc>Set(ConfigBase config) -&gt; ConfigBase</autodoc>
-        <docstring>Sets the global config object (the one returned by Get) and returns a
-reference to the previous global config object.</docstring>
-        <paramlist>
-          <param name="config" type="ConfigBase" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Get" type="ConfigBase" overloaded="no">
-        <autodoc>Get(bool createOnDemand=True) -&gt; ConfigBase</autodoc>
-        <docstring>Returns the current global config object, creating one if neccessary.</docstring>
-        <paramlist>
-          <param name="createOnDemand" type="bool" default="True"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Create" type="ConfigBase" overloaded="no">
-        <autodoc>Create() -&gt; ConfigBase</autodoc>
-        <docstring>Create and return a new global config object.  This function will
-create the "best" implementation of wx.Config available for the
-current platform.</docstring>
-      </staticmethod>
-      <staticmethod name="DontCreateOnDemand" type="" overloaded="no">
-        <autodoc>DontCreateOnDemand()</autodoc>
-        <docstring>Should Get() try to create a new log object if there isn't a current
-one?</docstring>
-      </staticmethod>
-      <method name="SetPath" type="" overloaded="no">
-        <autodoc>SetPath(self, String path)</autodoc>
-        <docstring>Set current path: if the first character is '/', it's the absolute
-path, otherwise it's a relative path. '..' is supported. If the
-strPath doesn't exist it is created.</docstring>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPath" type="String" overloaded="no">
-        <autodoc>GetPath(self) -&gt; String</autodoc>
-        <docstring>Retrieve the current path (always as absolute path)</docstring>
-      </method>
-      <method name="GetFirstGroup" type="PyObject" overloaded="no">
-        <autodoc>GetFirstGroup() -&gt; (more, value, index)</autodoc>
-        <docstring>Allows enumerating the subgroups in a config object.  Returns a tuple
-containing a flag indicating there are more items, the name of the
-current item, and an index to pass to GetNextGroup to fetch the next
-item.</docstring>
-      </method>
-      <method name="GetNextGroup" type="PyObject" overloaded="no">
-        <autodoc>GetNextGroup(long index) -&gt; (more, value, index)</autodoc>
-        <docstring>Allows enumerating the subgroups in a config object.  Returns a tuple
-containing a flag indicating there are more items, the name of the
-current item, and an index to pass to GetNextGroup to fetch the next
-item.</docstring>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstEntry" type="PyObject" overloaded="no">
-        <autodoc>GetFirstEntry() -&gt; (more, value, index)</autodoc>
-        <docstring>Allows enumerating the entries in the current group in a config
-object.  Returns a tuple containing a flag indicating there are more
-items, the name of the current item, and an index to pass to
-GetNextGroup to fetch the next item.</docstring>
-      </method>
-      <method name="GetNextEntry" type="PyObject" overloaded="no">
-        <autodoc>GetNextEntry(long index) -&gt; (more, value, index)</autodoc>
-        <docstring>Allows enumerating the entries in the current group in a config
-object.  Returns a tuple containing a flag indicating there are more
-items, the name of the current item, and an index to pass to
-GetNextGroup to fetch the next item.</docstring>
-        <paramlist>
-          <param name="index" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNumberOfEntries" type="size_t" overloaded="no">
-        <autodoc>GetNumberOfEntries(self, bool recursive=False) -&gt; size_t</autodoc>
-        <docstring>Get the number of entries in the current group, with or without its
-subgroups.</docstring>
-        <paramlist>
-          <param name="recursive" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetNumberOfGroups" type="size_t" overloaded="no">
-        <autodoc>GetNumberOfGroups(self, bool recursive=False) -&gt; size_t</autodoc>
-        <docstring>Get the number of subgroups in the current group, with or without its
-subgroups.</docstring>
-        <paramlist>
-          <param name="recursive" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="HasGroup" type="bool" overloaded="no">
-        <autodoc>HasGroup(self, String name) -&gt; bool</autodoc>
-        <docstring>Returns True if the group by this name exists</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasEntry" type="bool" overloaded="no">
-        <autodoc>HasEntry(self, String name) -&gt; bool</autodoc>
-        <docstring>Returns True if the entry by this name exists</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Exists" type="bool" overloaded="no">
-        <autodoc>Exists(self, String name) -&gt; bool</autodoc>
-        <docstring>Returns True if either a group or an entry with a given name exists</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEntryType" type="wxConfigBase::EntryType" overloaded="no">
-        <autodoc>GetEntryType(self, String name) -&gt; int</autodoc>
-        <docstring>Get the type of the entry.  Returns one of the wx.Config.Type_XXX values.</docstring>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Read" type="String" overloaded="no">
-        <autodoc>Read(self, String key, String defaultVal=EmptyString) -&gt; String</autodoc>
-        <docstring>Returns the value of key if it exists, defaultVal otherwise.</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="defaultVal" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="ReadInt" type="long" overloaded="no">
-        <autodoc>ReadInt(self, String key, long defaultVal=0) -&gt; long</autodoc>
-        <docstring>Returns the value of key if it exists, defaultVal otherwise.</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="defaultVal" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="ReadFloat" type="double" overloaded="no">
-        <autodoc>ReadFloat(self, String key, double defaultVal=0.0) -&gt; double</autodoc>
-        <docstring>Returns the value of key if it exists, defaultVal otherwise.</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="defaultVal" type="double" default="0.0"/>
-        </paramlist>
-      </method>
-      <method name="ReadBool" type="bool" overloaded="no">
-        <autodoc>ReadBool(self, String key, bool defaultVal=False) -&gt; bool</autodoc>
-        <docstring>Returns the value of key if it exists, defaultVal otherwise.</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="defaultVal" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Write" type="bool" overloaded="no">
-        <autodoc>Write(self, String key, String value) -&gt; bool</autodoc>
-        <docstring>write the value (return True on success)</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="WriteInt" type="bool" overloaded="no">
-        <autodoc>WriteInt(self, String key, long value) -&gt; bool</autodoc>
-        <docstring>write the value (return True on success)</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="value" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="WriteFloat" type="bool" overloaded="no">
-        <autodoc>WriteFloat(self, String key, double value) -&gt; bool</autodoc>
-        <docstring>write the value (return True on success)</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="value" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="WriteBool" type="bool" overloaded="no">
-        <autodoc>WriteBool(self, String key, bool value) -&gt; bool</autodoc>
-        <docstring>write the value (return True on success)</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="value" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Flush" type="bool" overloaded="no">
-        <autodoc>Flush(self, bool currentOnly=False) -&gt; bool</autodoc>
-        <docstring>permanently writes all changes</docstring>
-        <paramlist>
-          <param name="currentOnly" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="RenameEntry" type="bool" overloaded="no">
-        <autodoc>RenameEntry(self, String oldName, String newName) -&gt; bool</autodoc>
-        <docstring>Rename an entry.  Returns False on failure (probably because the new
-name is already taken by an existing entry)</docstring>
-        <paramlist>
-          <param name="oldName" type="String" default=""/>
-          <param name="newName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="RenameGroup" type="bool" overloaded="no">
-        <autodoc>RenameGroup(self, String oldName, String newName) -&gt; bool</autodoc>
-        <docstring>Rename a group.  Returns False on failure (probably because the new
-name is already taken by an existing entry)</docstring>
-        <paramlist>
-          <param name="oldName" type="String" default=""/>
-          <param name="newName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteEntry" type="bool" overloaded="no">
-        <autodoc>DeleteEntry(self, String key, bool deleteGroupIfEmpty=True) -&gt; bool</autodoc>
-        <docstring>Deletes the specified entry and the group it belongs to if it was the
-last key in it and the second parameter is True</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="deleteGroupIfEmpty" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DeleteGroup" type="bool" overloaded="no">
-        <autodoc>DeleteGroup(self, String key) -&gt; bool</autodoc>
-        <docstring>Delete the group (with all subgroups)</docstring>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAll" type="bool" overloaded="no">
-        <autodoc>DeleteAll(self) -&gt; bool</autodoc>
-        <docstring>Delete the whole underlying object (disk file, registry key, ...)
-primarly intended for use by deinstallation routine.</docstring>
-      </method>
-      <method name="SetExpandEnvVars" type="" overloaded="no">
-        <autodoc>SetExpandEnvVars(self, bool doIt=True)</autodoc>
-        <docstring>We can automatically expand environment variables in the config
-entries this option is on by default, you can turn it on/off at any
-time)</docstring>
-        <paramlist>
-          <param name="doIt" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsExpandingEnvVars" type="bool" overloaded="no">
-        <autodoc>IsExpandingEnvVars(self) -&gt; bool</autodoc>
-        <docstring>Are we currently expanding environment variables?</docstring>
-      </method>
-      <method name="SetRecordDefaults" type="" overloaded="no">
-        <autodoc>SetRecordDefaults(self, bool doIt=True)</autodoc>
-        <docstring>Set whether the config objec should record default values.</docstring>
-        <paramlist>
-          <param name="doIt" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="IsRecordingDefaults" type="bool" overloaded="no">
-        <autodoc>IsRecordingDefaults(self) -&gt; bool</autodoc>
-        <docstring>Are we currently recording default values?</docstring>
-      </method>
-      <method name="ExpandEnvVars" type="String" overloaded="no">
-        <autodoc>ExpandEnvVars(self, String str) -&gt; String</autodoc>
-        <docstring>Expand any environment variables in str and return the result</docstring>
-        <paramlist>
-          <param name="str" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAppName" type="String" overloaded="no">
-        <autodoc>GetAppName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetVendorName" type="String" overloaded="no">
-        <autodoc>GetVendorName(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetAppName" type="" overloaded="no">
-        <autodoc>SetAppName(self, String appName)</autodoc>
-        <paramlist>
-          <param name="appName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVendorName" type="" overloaded="no">
-        <autodoc>SetVendorName(self, String vendorName)</autodoc>
-        <paramlist>
-          <param name="vendorName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, long style)</autodoc>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStyle" type="long" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; long</autodoc>
-      </method>
-    </class>
-    <class name="Config" oldname="wxConfig" module="_misc">
-      <docstring>This ConfigBase-derived class will use the registry on Windows,
-and will be a wx.FileConfig on other platforms.</docstring>
-      <baseclass name="ConfigBase"/>
-      <constructor name="Config" overloaded="no">
-        <autodoc>__init__(self, String appName=EmptyString, String vendorName=EmptyString, 
-    String localFilename=EmptyString, String globalFilename=EmptyString, 
-    long style=wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_GLOBAL_FILE) -&gt; Config</autodoc>
-        <paramlist>
-          <param name="appName" type="String" default="wxPyEmptyString"/>
-          <param name="vendorName" type="String" default="wxPyEmptyString"/>
-          <param name="localFilename" type="String" default="wxPyEmptyString"/>
-          <param name="globalFilename" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="long" default="wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_GLOBAL_FILE"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxConfig" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="FileConfig" oldname="wxFileConfig" module="_misc">
-      <docstring>This config class will use a file for storage on all platforms.</docstring>
-      <baseclass name="ConfigBase"/>
-      <constructor name="FileConfig" overloaded="no">
-        <autodoc>__init__(self, String appName=EmptyString, String vendorName=EmptyString, 
-    String localFilename=EmptyString, String globalFilename=EmptyString, 
-    long style=wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_GLOBAL_FILE) -&gt; FileConfig</autodoc>
-        <paramlist>
-          <param name="appName" type="String" default="wxPyEmptyString"/>
-          <param name="vendorName" type="String" default="wxPyEmptyString"/>
-          <param name="localFilename" type="String" default="wxPyEmptyString"/>
-          <param name="globalFilename" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="long" default="wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_GLOBAL_FILE"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxFileConfig" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-    </class>
-    <class name="ConfigPathChanger" oldname="wxConfigPathChanger" module="_misc">
-      <docstring>A handy little class which changes current path to the path of given
-entry and restores it in the destructoir: so if you declare a local
-variable of this type, you work in the entry directory and the path is
-automatically restored when the function returns.</docstring>
-      <constructor name="ConfigPathChanger" overloaded="no">
-        <autodoc>__init__(self, ConfigBase config, String entry) -&gt; ConfigPathChanger</autodoc>
-        <paramlist>
-          <param name="config" type="ConfigBase" default=""/>
-          <param name="entry" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxConfigPathChanger" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Name" type="String" overloaded="no">
-        <autodoc>Name(self) -&gt; String</autodoc>
-        <docstring>Get the key name</docstring>
-      </method>
-    </class>
-    <method name="ExpandEnvVars" oldname="wxExpandEnvVars" type="String" overloaded="no">
-      <autodoc>ExpandEnvVars(String sz) -&gt; String</autodoc>
-      <docstring>Replace environment variables ($SOMETHING) with their values. The
-format is $VARNAME or ${VARNAME} where VARNAME contains alphanumeric
-characters and '_' only. '$' must be escaped ('\\$') in order to be
-taken literally.</docstring>
-      <paramlist>
-        <param name="sz" type="String" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DateTime" oldname="wxDateTime" module="_misc">
-      <constructor name="DateTime" overloaded="no">
-        <autodoc>__init__(self) -&gt; DateTime</autodoc>
-      </constructor>
-      <constructor name="DateTimeFromTimeT" overloaded="no">
-        <autodoc>DateTimeFromTimeT(time_t timet) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="timet" type="time_t" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="DateTimeFromJDN" overloaded="no">
-        <autodoc>DateTimeFromJDN(double jdn) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="jdn" type="double" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="DateTimeFromHMS" overloaded="no">
-        <autodoc>DateTimeFromHMS(int hour, int minute=0, int second=0, int millisec=0) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="hour" type="int" default=""/>
-          <param name="minute" type="int" default="0"/>
-          <param name="second" type="int" default="0"/>
-          <param name="millisec" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <constructor name="DateTimeFromDMY" overloaded="no">
-        <autodoc>DateTimeFromDMY(int day, int month=Inv_Month, int year=Inv_Year, int hour=0, 
-    int minute=0, int second=0, int millisec=0) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="day" type="int" default=""/>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="hour" type="int" default="0"/>
-          <param name="minute" type="int" default="0"/>
-          <param name="second" type="int" default="0"/>
-          <param name="millisec" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxDateTime" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="SetCountry" type="" overloaded="no">
-        <autodoc>SetCountry(int country)</autodoc>
-        <paramlist>
-          <param name="country" type="wxDateTime::Country" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetCountry" type="wxDateTime::Country" overloaded="no">
-        <autodoc>GetCountry() -&gt; int</autodoc>
-      </staticmethod>
-      <staticmethod name="IsWestEuropeanCountry" type="bool" overloaded="no">
-        <autodoc>IsWestEuropeanCountry(int country=Country_Default) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetCurrentYear" type="int" overloaded="no">
-        <autodoc>GetCurrentYear(int cal=Gregorian) -&gt; int</autodoc>
-        <paramlist>
-          <param name="cal" type="wxDateTime::Calendar" default="wxDateTime::Gregorian"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="ConvertYearToBC" type="int" overloaded="no">
-        <autodoc>ConvertYearToBC(int year) -&gt; int</autodoc>
-        <paramlist>
-          <param name="year" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetCurrentMonth" type="wxDateTime::Month" overloaded="no">
-        <autodoc>GetCurrentMonth(int cal=Gregorian) -&gt; int</autodoc>
-        <paramlist>
-          <param name="cal" type="wxDateTime::Calendar" default="wxDateTime::Gregorian"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="IsLeapYear" type="bool" overloaded="no">
-        <autodoc>IsLeapYear(int year=Inv_Year, int cal=Gregorian) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="cal" type="wxDateTime::Calendar" default="wxDateTime::Gregorian"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetCentury" type="int" overloaded="no">
-        <autodoc>GetCentury(int year=Inv_Year) -&gt; int</autodoc>
-        <paramlist>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetNumberOfDaysinYear" type="int" overloaded="no">
-        <autodoc>GetNumberOfDaysinYear(int year, int cal=Gregorian) -&gt; int</autodoc>
-        <paramlist>
-          <param name="year" type="int" default=""/>
-          <param name="cal" type="wxDateTime::Calendar" default="wxDateTime::Gregorian"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetNumberOfDaysInMonth" type="int" overloaded="no">
-        <autodoc>GetNumberOfDaysInMonth(int month, int year=Inv_Year, int cal=Gregorian) -&gt; int</autodoc>
-        <paramlist>
-          <param name="month" type="wxDateTime::Month" default=""/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="cal" type="wxDateTime::Calendar" default="wxDateTime::Gregorian"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetMonthName" type="String" overloaded="no">
-        <autodoc>GetMonthName(int month, int flags=Name_Full) -&gt; String</autodoc>
-        <paramlist>
-          <param name="month" type="wxDateTime::Month" default=""/>
-          <param name="flags" type="wxDateTime::NameFlags" default="wxDateTime::Name_Full"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetWeekDayName" type="String" overloaded="no">
-        <autodoc>GetWeekDayName(int weekday, int flags=Name_Full) -&gt; String</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="flags" type="wxDateTime::NameFlags" default="wxDateTime::Name_Full"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetAmPmStrings" type="" overloaded="no">
-        <autodoc>GetAmPmStrings() -&gt; (am, pm)</autodoc>
-        <docstring>Get the AM and PM strings in the current locale (may be empty)</docstring>
-        <paramlist>
-          <param name="OUTPUT" type="String" default=""/>
-          <param name="OUTPUT" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="IsDSTApplicable" type="bool" overloaded="no">
-        <autodoc>IsDSTApplicable(int year=Inv_Year, int country=Country_Default) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetBeginDST" type="DateTime" overloaded="no">
-        <autodoc>GetBeginDST(int year=Inv_Year, int country=Country_Default) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetEndDST" type="DateTime" overloaded="no">
-        <autodoc>GetEndDST(int year=Inv_Year, int country=Country_Default) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Now" type="DateTime" overloaded="no">
-        <autodoc>Now() -&gt; DateTime</autodoc>
-      </staticmethod>
-      <staticmethod name="UNow" type="DateTime" overloaded="no">
-        <autodoc>UNow() -&gt; DateTime</autodoc>
-      </staticmethod>
-      <staticmethod name="Today" type="DateTime" overloaded="no">
-        <autodoc>Today() -&gt; DateTime</autodoc>
-      </staticmethod>
-      <method name="SetToCurrent" type="DateTime" overloaded="no">
-        <autodoc>SetToCurrent(self) -&gt; DateTime</autodoc>
-      </method>
-      <method name="SetTimeT" type="DateTime" overloaded="no">
-        <autodoc>SetTimeT(self, time_t timet) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="timet" type="time_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetJDN" type="DateTime" overloaded="no">
-        <autodoc>SetJDN(self, double jdn) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="jdn" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHMS" type="DateTime" overloaded="no">
-        <autodoc>SetHMS(self, int hour, int minute=0, int second=0, int millisec=0) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="hour" type="int" default=""/>
-          <param name="minute" type="int" default="0"/>
-          <param name="second" type="int" default="0"/>
-          <param name="millisec" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Set" type="DateTime" overloaded="no">
-        <autodoc>Set(self, int day, int month=Inv_Month, int year=Inv_Year, int hour=0, 
-    int minute=0, int second=0, int millisec=0) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="day" type="int" default=""/>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-          <param name="hour" type="int" default="0"/>
-          <param name="minute" type="int" default="0"/>
-          <param name="second" type="int" default="0"/>
-          <param name="millisec" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="ResetTime" type="DateTime" overloaded="no">
-        <autodoc>ResetTime(self) -&gt; DateTime</autodoc>
-      </method>
-      <method name="SetYear" type="DateTime" overloaded="no">
-        <autodoc>SetYear(self, int year) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="year" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMonth" type="DateTime" overloaded="no">
-        <autodoc>SetMonth(self, int month) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="month" type="wxDateTime::Month" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDay" type="DateTime" overloaded="no">
-        <autodoc>SetDay(self, int day) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="day" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHour" type="DateTime" overloaded="no">
-        <autodoc>SetHour(self, int hour) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="hour" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinute" type="DateTime" overloaded="no">
-        <autodoc>SetMinute(self, int minute) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="minute" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSecond" type="DateTime" overloaded="no">
-        <autodoc>SetSecond(self, int second) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="second" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMillisecond" type="DateTime" overloaded="no">
-        <autodoc>SetMillisecond(self, int millisecond) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="millisecond" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToWeekDayInSameWeek" type="DateTime" overloaded="no">
-        <autodoc>SetToWeekDayInSameWeek(self, int weekday, int flags=Monday_First) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-        </paramlist>
-      </method>
-      <method name="GetWeekDayInSameWeek" type="DateTime" overloaded="no">
-        <autodoc>GetWeekDayInSameWeek(self, int weekday, int flags=Monday_First) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-        </paramlist>
-      </method>
-      <method name="SetToNextWeekDay" type="DateTime" overloaded="no">
-        <autodoc>SetToNextWeekDay(self, int weekday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextWeekDay" type="DateTime" overloaded="no">
-        <autodoc>GetNextWeekDay(self, int weekday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToPrevWeekDay" type="DateTime" overloaded="no">
-        <autodoc>SetToPrevWeekDay(self, int weekday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrevWeekDay" type="DateTime" overloaded="no">
-        <autodoc>GetPrevWeekDay(self, int weekday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToWeekDay" type="bool" overloaded="no">
-        <autodoc>SetToWeekDay(self, int weekday, int n=1, int month=Inv_Month, int year=Inv_Year) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="n" type="int" default="1"/>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </method>
-      <method name="SetToLastWeekDay" type="bool" overloaded="no">
-        <autodoc>SetToLastWeekDay(self, int weekday, int month=Inv_Month, int year=Inv_Year) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </method>
-      <method name="GetLastWeekDay" type="DateTime" overloaded="no">
-        <autodoc>GetLastWeekDay(self, int weekday, int month=Inv_Month, int year=Inv_Year) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="weekday" type="wxDateTime::WeekDay" default=""/>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </method>
-      <method name="SetToTheWeek" type="bool" overloaded="no">
-        <autodoc>SetToTheWeek(self, int numWeek, int weekday=Mon, int flags=Monday_First) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numWeek" type="int" default=""/>
-          <param name="weekday" type="wxDateTime::WeekDay" default="wxDateTime::Mon"/>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-        </paramlist>
-      </method>
-      <method name="GetWeek" type="DateTime" overloaded="no">
-        <autodoc>GetWeek(self, int numWeek, int weekday=Mon, int flags=Monday_First) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="numWeek" type="int" default=""/>
-          <param name="weekday" type="wxDateTime::WeekDay" default="wxDateTime::Mon"/>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-        </paramlist>
-      </method>
-      <method name="SetToLastMonthDay" type="DateTime" overloaded="no">
-        <autodoc>SetToLastMonthDay(self, int month=Inv_Month, int year=Inv_Year) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </method>
-      <method name="GetLastMonthDay" type="DateTime" overloaded="no">
-        <autodoc>GetLastMonthDay(self, int month=Inv_Month, int year=Inv_Year) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="month" type="wxDateTime::Month" default="wxDateTime::Inv_Month"/>
-          <param name="year" type="int" default="wxDateTime::Inv_Year"/>
-        </paramlist>
-      </method>
-      <method name="SetToYearDay" type="DateTime" overloaded="no">
-        <autodoc>SetToYearDay(self, int yday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="yday" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetYearDay" type="DateTime" overloaded="no">
-        <autodoc>GetYearDay(self, int yday) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="yday" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetJulianDayNumber" type="double" overloaded="no">
-        <autodoc>GetJulianDayNumber(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetJDN" type="double" overloaded="no">
-        <autodoc>GetJDN(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetModifiedJulianDayNumber" type="double" overloaded="no">
-        <autodoc>GetModifiedJulianDayNumber(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetMJD" type="double" overloaded="no">
-        <autodoc>GetMJD(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetRataDie" type="double" overloaded="no">
-        <autodoc>GetRataDie(self) -&gt; double</autodoc>
-      </method>
-      <method name="ToTimezone" type="DateTime" overloaded="no">
-        <autodoc>ToTimezone(self, wxDateTime::TimeZone tz, bool noDST=False) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default=""/>
-          <param name="noDST" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="MakeTimezone" type="DateTime" overloaded="no">
-        <autodoc>MakeTimezone(self, wxDateTime::TimeZone tz, bool noDST=False) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default=""/>
-          <param name="noDST" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="ToGMT" type="DateTime" overloaded="no">
-        <autodoc>ToGMT(self, bool noDST=False) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="noDST" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="MakeGMT" type="DateTime" overloaded="no">
-        <autodoc>MakeGMT(self, bool noDST=False) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="noDST" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="IsDST" type="int" overloaded="no">
-        <autodoc>IsDST(self, int country=Country_Default) -&gt; int</autodoc>
-        <paramlist>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </method>
-      <method name="IsValid" type="bool" overloaded="no">
-        <autodoc>IsValid(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetTicks" type="time_t" overloaded="no">
-        <autodoc>GetTicks(self) -&gt; time_t</autodoc>
-      </method>
-      <method name="GetYear" type="int" overloaded="no">
-        <autodoc>GetYear(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetMonth" type="wxDateTime::Month" overloaded="no">
-        <autodoc>GetMonth(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetDay" type="int" overloaded="no">
-        <autodoc>GetDay(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetWeekDay" type="wxDateTime::WeekDay" overloaded="no">
-        <autodoc>GetWeekDay(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetHour" type="int" overloaded="no">
-        <autodoc>GetHour(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetMinute" type="int" overloaded="no">
-        <autodoc>GetMinute(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetSecond" type="int" overloaded="no">
-        <autodoc>GetSecond(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetMillisecond" type="int" overloaded="no">
-        <autodoc>GetMillisecond(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetDayOfYear" type="int" overloaded="no">
-        <autodoc>GetDayOfYear(self, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetWeekOfYear" type="int" overloaded="no">
-        <autodoc>GetWeekOfYear(self, int flags=Monday_First, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="GetWeekOfMonth" type="int" overloaded="no">
-        <autodoc>GetWeekOfMonth(self, int flags=Monday_First, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; int</autodoc>
-        <paramlist>
-          <param name="flags" type="wxDateTime::WeekFlags" default="wxDateTime::Monday_First"/>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="IsWorkDay" type="bool" overloaded="no">
-        <autodoc>IsWorkDay(self, int country=Country_Default) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="country" type="wxDateTime::Country" default="wxDateTime::Country_Default"/>
-        </paramlist>
-      </method>
-      <method name="IsEqualTo" type="bool" overloaded="no">
-        <autodoc>IsEqualTo(self, DateTime datetime) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="datetime" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEarlierThan" type="bool" overloaded="no">
-        <autodoc>IsEarlierThan(self, DateTime datetime) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="datetime" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsLaterThan" type="bool" overloaded="no">
-        <autodoc>IsLaterThan(self, DateTime datetime) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="datetime" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsStrictlyBetween" type="bool" overloaded="no">
-        <autodoc>IsStrictlyBetween(self, DateTime t1, DateTime t2) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="t1" type="DateTime" default=""/>
-          <param name="t2" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsBetween" type="bool" overloaded="no">
-        <autodoc>IsBetween(self, DateTime t1, DateTime t2) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="t1" type="DateTime" default=""/>
-          <param name="t2" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSameDate" type="bool" overloaded="no">
-        <autodoc>IsSameDate(self, DateTime dt) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dt" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSameTime" type="bool" overloaded="no">
-        <autodoc>IsSameTime(self, DateTime dt) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dt" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEqualUpTo" type="bool" overloaded="no">
-        <autodoc>IsEqualUpTo(self, DateTime dt, TimeSpan ts) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dt" type="DateTime" default=""/>
-          <param name="ts" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddTS" type="DateTime" overloaded="no">
-        <autodoc>AddTS(self, TimeSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddDS" type="DateTime" overloaded="no">
-        <autodoc>AddDS(self, DateSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="SubtractTS" type="DateTime" overloaded="no">
-        <autodoc>SubtractTS(self, TimeSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="SubtractDS" type="DateTime" overloaded="no">
-        <autodoc>SubtractDS(self, DateSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Subtract" type="wxTimeSpan" overloaded="no">
-        <autodoc>Subtract(self, DateTime dt) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="dt" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__iadd__" type="DateTime" overloaded="yes">
-        <paramlist>
-          <param name="diff" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__iadd__" type="DateTime" overloaded="yes">
-        <autodoc>__iadd__(self, TimeSpan diff) -&gt; DateTime
-__iadd__(self, DateSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="DateTime" overloaded="yes">
-        <paramlist>
-          <param name="diff" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="DateTime" overloaded="yes">
-        <autodoc>__isub__(self, TimeSpan diff) -&gt; DateTime
-__isub__(self, DateSpan diff) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="diff" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="DateTime" overloaded="yes">
-        <paramlist>
-          <param name="other" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="DateTime" overloaded="yes">
-        <autodoc>__add__(self, TimeSpan other) -&gt; DateTime
-__add__(self, DateSpan other) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="other" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="wxTimeSpan" overloaded="yes">
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="DateTime" overloaded="yes">
-        <paramlist>
-          <param name="other" type="wxTimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="DateTime" overloaded="yes">
-        <autodoc>__sub__(self, DateTime other) -&gt; TimeSpan
-__sub__(self, TimeSpan other) -&gt; DateTime
-__sub__(self, DateSpan other) -&gt; DateTime</autodoc>
-        <paramlist>
-          <param name="other" type="wxDateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__lt__" type="bool" overloaded="no">
-        <autodoc>__lt__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__le__" type="bool" overloaded="no">
-        <autodoc>__le__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__gt__" type="bool" overloaded="no">
-        <autodoc>__gt__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ge__" type="bool" overloaded="no">
-        <autodoc>__ge__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, DateTime other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="ParseRfc822Date" type="int" overloaded="no">
-        <autodoc>ParseRfc822Date(self, String date) -&gt; int</autodoc>
-        <paramlist>
-          <param name="date" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ParseFormat" type="int" overloaded="no">
-        <autodoc>ParseFormat(self, String date, String format=DateFormatStr, DateTime dateDef=DefaultDateTime) -&gt; int</autodoc>
-        <paramlist>
-          <param name="date" type="String" default=""/>
-          <param name="format" type="String" default="wxPyDateFormatStr"/>
-          <param name="dateDef" type="DateTime" default="wxDefaultDateTime"/>
-        </paramlist>
-      </method>
-      <method name="ParseDateTime" type="int" overloaded="no">
-        <autodoc>ParseDateTime(self, String datetime) -&gt; int</autodoc>
-        <paramlist>
-          <param name="datetime" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ParseDate" type="int" overloaded="no">
-        <autodoc>ParseDate(self, String date) -&gt; int</autodoc>
-        <paramlist>
-          <param name="date" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ParseTime" type="int" overloaded="no">
-        <autodoc>ParseTime(self, String time) -&gt; int</autodoc>
-        <paramlist>
-          <param name="time" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Format" type="String" overloaded="no">
-        <autodoc>Format(self, String format=DateFormatStr, wxDateTime::TimeZone tz=LOCAL_TZ) -&gt; String</autodoc>
-        <paramlist>
-          <param name="format" type="String" default="wxPyDateFormatStr"/>
-          <param name="tz" type="wxDateTime::TimeZone" default="LOCAL_TZ"/>
-        </paramlist>
-      </method>
-      <method name="FormatDate" type="String" overloaded="no">
-        <autodoc>FormatDate(self) -&gt; String</autodoc>
-      </method>
-      <method name="FormatTime" type="String" overloaded="no">
-        <autodoc>FormatTime(self) -&gt; String</autodoc>
-      </method>
-      <method name="FormatISODate" type="String" overloaded="no">
-        <autodoc>FormatISODate(self) -&gt; String</autodoc>
-      </method>
-      <method name="FormatISOTime" type="String" overloaded="no">
-        <autodoc>FormatISOTime(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="TimeSpan" oldname="wxTimeSpan" module="_misc">
-      <constructor name="TimeSpan" overloaded="no">
-        <autodoc>__init__(self, long hours=0, long minutes=0, long seconds=0, long milliseconds=0) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="hours" type="long" default="0"/>
-          <param name="minutes" type="long" default="0"/>
-          <param name="seconds" type="long" default="0"/>
-          <param name="milliseconds" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxTimeSpan" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="Seconds" type="TimeSpan" overloaded="no">
-        <autodoc>Seconds(long sec) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="sec" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Second" type="TimeSpan" overloaded="no">
-        <autodoc>Second() -&gt; TimeSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Minutes" type="TimeSpan" overloaded="no">
-        <autodoc>Minutes(long min) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="min" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Minute" type="TimeSpan" overloaded="no">
-        <autodoc>Minute() -&gt; TimeSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Hours" type="TimeSpan" overloaded="no">
-        <autodoc>Hours(long hours) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="hours" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Hour" type="TimeSpan" overloaded="no">
-        <autodoc>Hour() -&gt; TimeSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Days" type="TimeSpan" overloaded="no">
-        <autodoc>Days(long days) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="days" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Day" type="TimeSpan" overloaded="no">
-        <autodoc>Day() -&gt; TimeSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Weeks" type="TimeSpan" overloaded="no">
-        <autodoc>Weeks(long days) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="days" type="long" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Week" type="TimeSpan" overloaded="no">
-        <autodoc>Week() -&gt; TimeSpan</autodoc>
-      </staticmethod>
-      <method name="Add" type="TimeSpan" overloaded="no">
-        <autodoc>Add(self, TimeSpan diff) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="diff" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Subtract" type="TimeSpan" overloaded="no">
-        <autodoc>Subtract(self, TimeSpan diff) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="diff" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Multiply" type="TimeSpan" overloaded="no">
-        <autodoc>Multiply(self, int n) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Neg" type="TimeSpan" overloaded="no">
-        <autodoc>Neg(self) -&gt; TimeSpan</autodoc>
-      </method>
-      <method name="Abs" type="TimeSpan" overloaded="no">
-        <autodoc>Abs(self) -&gt; TimeSpan</autodoc>
-      </method>
-      <method name="__iadd__" type="TimeSpan" overloaded="no">
-        <autodoc>__iadd__(self, TimeSpan diff) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="diff" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="TimeSpan" overloaded="no">
-        <autodoc>__isub__(self, TimeSpan diff) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="diff" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__imul__" type="TimeSpan" overloaded="no">
-        <autodoc>__imul__(self, int n) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__neg__" type="TimeSpan" overloaded="no">
-        <autodoc>__neg__(self) -&gt; TimeSpan</autodoc>
-      </method>
-      <method name="__add__" type="TimeSpan" overloaded="no">
-        <autodoc>__add__(self, TimeSpan other) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="TimeSpan" overloaded="no">
-        <autodoc>__sub__(self, TimeSpan other) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__mul__" type="TimeSpan" overloaded="no">
-        <autodoc>__mul__(self, int n) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__rmul__" type="TimeSpan" overloaded="no">
-        <autodoc>__rmul__(self, int n) -&gt; TimeSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__lt__" type="bool" overloaded="no">
-        <autodoc>__lt__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__le__" type="bool" overloaded="no">
-        <autodoc>__le__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__gt__" type="bool" overloaded="no">
-        <autodoc>__gt__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ge__" type="bool" overloaded="no">
-        <autodoc>__ge__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, TimeSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsNull" type="bool" overloaded="no">
-        <autodoc>IsNull(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsPositive" type="bool" overloaded="no">
-        <autodoc>IsPositive(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsNegative" type="bool" overloaded="no">
-        <autodoc>IsNegative(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsEqualTo" type="bool" overloaded="no">
-        <autodoc>IsEqualTo(self, TimeSpan ts) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="ts" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsLongerThan" type="bool" overloaded="no">
-        <autodoc>IsLongerThan(self, TimeSpan ts) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="ts" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsShorterThan" type="bool" overloaded="no">
-        <autodoc>IsShorterThan(self, TimeSpan t) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="t" type="TimeSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWeeks" type="int" overloaded="no">
-        <autodoc>GetWeeks(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDays" type="int" overloaded="no">
-        <autodoc>GetDays(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHours" type="int" overloaded="no">
-        <autodoc>GetHours(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMinutes" type="int" overloaded="no">
-        <autodoc>GetMinutes(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetSeconds" type="wxLongLong" overloaded="no">
-        <autodoc>GetSeconds(self) -&gt; wxLongLong</autodoc>
-      </method>
-      <method name="GetMilliseconds" type="wxLongLong" overloaded="no">
-        <autodoc>GetMilliseconds(self) -&gt; wxLongLong</autodoc>
-      </method>
-      <method name="Format" type="String" overloaded="no">
-        <autodoc>Format(self, String format=TimeSpanFormatStr) -&gt; String</autodoc>
-        <paramlist>
-          <param name="format" type="String" default="wxPyTimeSpanFormatStr"/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DateSpan" oldname="wxDateSpan" module="_misc">
-      <constructor name="DateSpan" overloaded="no">
-        <autodoc>__init__(self, int years=0, int months=0, int weeks=0, int days=0) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="years" type="int" default="0"/>
-          <param name="months" type="int" default="0"/>
-          <param name="weeks" type="int" default="0"/>
-          <param name="days" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxDateSpan" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="Days" type="DateSpan" overloaded="no">
-        <autodoc>Days(int days) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="days" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Day" type="DateSpan" overloaded="no">
-        <autodoc>Day() -&gt; DateSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Weeks" type="DateSpan" overloaded="no">
-        <autodoc>Weeks(int weeks) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="weeks" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Week" type="DateSpan" overloaded="no">
-        <autodoc>Week() -&gt; DateSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Months" type="DateSpan" overloaded="no">
-        <autodoc>Months(int mon) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="mon" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Month" type="DateSpan" overloaded="no">
-        <autodoc>Month() -&gt; DateSpan</autodoc>
-      </staticmethod>
-      <staticmethod name="Years" type="DateSpan" overloaded="no">
-        <autodoc>Years(int years) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="years" type="int" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="Year" type="DateSpan" overloaded="no">
-        <autodoc>Year() -&gt; DateSpan</autodoc>
-      </staticmethod>
-      <method name="SetYears" type="DateSpan" overloaded="no">
-        <autodoc>SetYears(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMonths" type="DateSpan" overloaded="no">
-        <autodoc>SetMonths(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWeeks" type="DateSpan" overloaded="no">
-        <autodoc>SetWeeks(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDays" type="DateSpan" overloaded="no">
-        <autodoc>SetDays(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetYears" type="int" overloaded="no">
-        <autodoc>GetYears(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMonths" type="int" overloaded="no">
-        <autodoc>GetMonths(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWeeks" type="int" overloaded="no">
-        <autodoc>GetWeeks(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDays" type="int" overloaded="no">
-        <autodoc>GetDays(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetTotalDays" type="int" overloaded="no">
-        <autodoc>GetTotalDays(self) -&gt; int</autodoc>
-      </method>
-      <method name="Add" type="DateSpan" overloaded="no">
-        <autodoc>Add(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Subtract" type="DateSpan" overloaded="no">
-        <autodoc>Subtract(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="Neg" type="DateSpan" overloaded="no">
-        <autodoc>Neg(self) -&gt; DateSpan</autodoc>
-      </method>
-      <method name="Multiply" type="DateSpan" overloaded="no">
-        <autodoc>Multiply(self, int factor) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="factor" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__iadd__" type="DateSpan" overloaded="no">
-        <autodoc>__iadd__(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__isub__" type="DateSpan" overloaded="no">
-        <autodoc>__isub__(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__neg__" type="DateSpan" overloaded="no">
-        <autodoc>__neg__(self) -&gt; DateSpan</autodoc>
-      </method>
-      <method name="__imul__" type="DateSpan" overloaded="no">
-        <autodoc>__imul__(self, int factor) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="factor" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__add__" type="DateSpan" overloaded="no">
-        <autodoc>__add__(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__sub__" type="DateSpan" overloaded="no">
-        <autodoc>__sub__(self, DateSpan other) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__mul__" type="DateSpan" overloaded="no">
-        <autodoc>__mul__(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__rmul__" type="DateSpan" overloaded="no">
-        <autodoc>__rmul__(self, int n) -&gt; DateSpan</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, DateSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, DateSpan other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="DateSpan" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <method name="GetLocalTime" oldname="wxGetLocalTime" type="long" overloaded="no">
-      <autodoc>GetLocalTime() -&gt; long</autodoc>
-    </method>
-    <method name="GetUTCTime" oldname="wxGetUTCTime" type="long" overloaded="no">
-      <autodoc>GetUTCTime() -&gt; long</autodoc>
-    </method>
-    <method name="GetCurrentTime" oldname="wxGetCurrentTime" type="long" overloaded="no">
-      <autodoc>GetCurrentTime() -&gt; long</autodoc>
-    </method>
-    <method name="GetLocalTimeMillis" oldname="wxGetLocalTimeMillis" type="wxLongLong" overloaded="no">
-      <autodoc>GetLocalTimeMillis() -&gt; wxLongLong</autodoc>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="DataFormat" oldname="wxDataFormat" module="_misc">
-      <docstring>A wx.DataFormat is an encapsulation of a platform-specific format
-handle which is used by the system for the clipboard and drag and drop
-operations. The applications are usually only interested in, for
-example, pasting data from the clipboard only if the data is in a
-format the program understands.  A data format is is used to uniquely
-identify this format.
-On the system level, a data format is usually just a number, (which
-may be the CLIPFORMAT under Windows or Atom under X11, for example.)
-
-The standard format IDs are:
-
-    ================    =====================================
-    wx.DF_INVALID       An invalid format
-    wx.DF_TEXT          Text format 
-    wx.DF_BITMAP        A bitmap (wx.Bitmap)
-    wx.DF_METAFILE      A metafile (wx.Metafile, Windows only)
-    wx.DF_FILENAME      A list of filenames
-    wx.DF_HTML          An HTML string. This is only valid on
-                        Windows and non-unicode builds
-    ================    =====================================
-
-Aside the standard formats, the application may also use custom
-formats which are identified by their names (strings) and not numeric
-identifiers. Although internally custom format must be created (or
-registered) first, you shouldn't care about it because it is done
-automatically the first time the wxDataFormat object corresponding to
-a given format name is created.
-
-</docstring>
-      <constructor name="DataFormat" overloaded="no">
-        <autodoc>__init__(self, int type) -&gt; DataFormat</autodoc>
-        <docstring>Constructs a data format object for one of the standard data formats
-or an empty data object (use SetType or SetId later in this case)</docstring>
-        <paramlist>
-          <param name="type" type="wxDataFormatId" default=""/>
-        </paramlist>
-      </constructor>
-      <constructor name="CustomDataFormat" overloaded="no">
-        <autodoc>CustomDataFormat(String format) -&gt; DataFormat</autodoc>
-        <docstring>Constructs a data format object for a custom format identified by its
-name.</docstring>
-        <paramlist>
-          <param name="format" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxDataFormat" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="__eq__" type="bool" overloaded="yes">
-        <paramlist>
-          <param name="format" type="wxDataFormatId" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="yes">
-        <paramlist>
-          <param name="format" type="wxDataFormatId" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="yes">
-        <autodoc>__eq__(self, int format) -&gt; bool
-__eq__(self, DataFormat format) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="yes">
-        <autodoc>__ne__(self, int format) -&gt; bool
-__ne__(self, DataFormat format) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetType" type="" overloaded="no">
-        <autodoc>SetType(self, int format)</autodoc>
-        <docstring>Sets the format to the given value, which should be one of wx.DF_XXX
-constants.</docstring>
-        <paramlist>
-          <param name="format" type="wxDataFormatId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetType" type="wxDataFormatId" overloaded="no">
-        <autodoc>GetType(self) -&gt; int</autodoc>
-        <docstring>Returns the platform-specific number identifying the format.</docstring>
-      </method>
-      <method name="GetId" type="String" overloaded="no">
-        <autodoc>GetId(self) -&gt; String</autodoc>
-        <docstring>Returns the name of a custom format (this function will fail for a
-standard format).</docstring>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, String format)</autodoc>
-        <docstring>Sets the format to be the custom format identified by the given name.</docstring>
-        <paramlist>
-          <param name="format" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DataObject" oldname="wxDataObject" module="_misc">
-      <docstring>A wx.DataObject represents data that can be copied to or from the
-clipboard, or dragged and dropped. The important thing about
-wx.DataObject is that this is a 'smart' piece of data unlike usual
-'dumb' data containers such as memory buffers or files. Being 'smart'
-here means that the data object itself should know what data formats
-it supports and how to render itself in each of supported formats.
-
-**NOTE**: This class is an abstract base class and can not be used
-directly from Python.  If you need a custom type of data object then
-you should instead derive from `wx.PyDataObjectSimple` or use
-`wx.CustomDataObject`.
-
-Not surprisingly, being 'smart' comes at a price of added
-complexity. This is reasonable for the situations when you really need
-to support multiple formats, but may be annoying if you only want to
-do something simple like cut and paste text.
-
-To provide a solution for both cases, wxWidgets has two predefined
-classes which derive from wx.DataObject: `wx.DataObjectSimple` and
-`wx.DataObjectComposite`.  `wx.DataObjectSimple` is the simplest
-wx.DataObject possible and only holds data in a single format (such as
-text or bitmap) and `wx.DataObjectComposite` is the simplest way to
-implement a wx.DataObject which supports multiple simultaneous formats
-because it achievs this by simply holding several
-`wx.DataObjectSimple` objects.
-
-Please note that the easiest way to use drag and drop and the
-clipboard with multiple formats is by using `wx.DataObjectComposite`,
-but it is not the most efficient one as each `wx.DataObjectSimple`
-would contain the whole data in its respective formats. Now imagine
-that you want to paste 200 pages of text in your proprietary format,
-as well as Word, RTF, HTML, Unicode and plain text to the clipboard
-and even today's computers are in trouble. For this case, you will
-have to derive from wx.DataObject directly and make it enumerate its
-formats and provide the data in the requested format on
-demand. (**TODO**: This is currently not possible from Python.  Make
-it so.)
-
-Note that the platform transfer mechanisms for the clipboard and drag
-and drop, do not copy any data out of the source application until
-another application actually requests the data. This is in contrast to
-the 'feel' offered to the user of a program who would normally think
-that the data resides in the clipboard after having pressed 'Copy' -
-in reality it is only declared to be available.
-</docstring>
-      <destructor name="~wxDataObject" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetPreferredFormat" type="DataFormat" overloaded="no">
-        <autodoc>GetPreferredFormat(self, int dir=Get) -&gt; DataFormat</autodoc>
-        <docstring>Returns the preferred format for either rendering the data (if dir is
-Get, its default value) or for setting it. Usually this will be the
-native format of the wx.DataObject.</docstring>
-        <paramlist>
-          <param name="dir" type="wxDataObject::Direction" default="wxDataObject::Get"/>
-        </paramlist>
-      </method>
-      <method name="GetFormatCount" type="size_t" overloaded="no">
-        <autodoc>GetFormatCount(self, int dir=Get) -&gt; size_t</autodoc>
-        <docstring>Returns the number of available formats for rendering or setting the
-data.</docstring>
-        <paramlist>
-          <param name="dir" type="wxDataObject::Direction" default="wxDataObject::Get"/>
-        </paramlist>
-      </method>
-      <method name="IsSupported" type="bool" overloaded="no">
-        <autodoc>IsSupported(self, DataFormat format, int dir=Get) -&gt; bool</autodoc>
-        <docstring>Returns True if this format is supported.</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-          <param name="dir" type="wxDataObject::Direction" default="wxDataObject::Get"/>
-        </paramlist>
-      </method>
-      <method name="GetDataSize" type="size_t" overloaded="no">
-        <autodoc>GetDataSize(self, DataFormat format) -&gt; size_t</autodoc>
-        <docstring>Get the (total) size of data for the given format</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAllFormats" type="PyObject" overloaded="no">
-        <autodoc>GetAllFormats(self, int dir=Get) -&gt; [formats]</autodoc>
-        <docstring>Returns a list of all the wx.DataFormats that this dataobject supports
-in the given direction.</docstring>
-        <paramlist>
-          <param name="dir" type="wxDataObject::Direction" default="wxDataObject::Get"/>
-        </paramlist>
-      </method>
-      <method name="GetDataHere" type="PyObject" overloaded="no">
-        <autodoc>GetDataHere(self, DataFormat format) -&gt; String</autodoc>
-        <docstring>Get the data bytes in the specified format, returns None on failure.
-
-:todo: This should use the python buffer interface isntead...</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetData" type="bool" overloaded="no">
-        <autodoc>SetData(self, DataFormat format, String data) -&gt; bool</autodoc>
-        <docstring>Set the data in the specified format from the bytes in the the data string.
-
-:todo: This should use the python buffer interface isntead...</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DataObjectSimple" oldname="wxDataObjectSimple" module="_misc">
-      <docstring>wx.DataObjectSimple is a `wx.DataObject` which only supports one
-format.  This is the simplest possible `wx.DataObject` implementation.
-
-This is still an "abstract base class" meaning that you can't use it
-directly.  You either need to use one of the predefined base classes,
-or derive your own class from `wx.PyDataObjectSimple`.
-</docstring>
-      <baseclass name="DataObject"/>
-      <constructor name="DataObjectSimple" overloaded="no">
-        <autodoc>__init__(self, DataFormat format=FormatInvalid) -&gt; DataObjectSimple</autodoc>
-        <docstring>Constructor accepts the supported format (none by default) which may
-also be set later with `SetFormat`.</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default="wxFormatInvalid"/>
-        </paramlist>
-      </constructor>
-      <method name="GetFormat" type="DataFormat" overloaded="no">
-        <autodoc>GetFormat(self) -&gt; DataFormat</autodoc>
-        <docstring>Returns the (one and only one) format supported by this object. It is
-assumed that the format is supported in both directions.</docstring>
-      </method>
-      <method name="SetFormat" type="" overloaded="no">
-        <autodoc>SetFormat(self, DataFormat format)</autodoc>
-        <docstring>Sets the supported format.</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDataSize" type="size_t" overloaded="no">
-        <autodoc>GetDataSize(self) -&gt; size_t</autodoc>
-        <docstring>Get the size of our data.</docstring>
-      </method>
-      <method name="GetDataHere" type="PyObject" overloaded="no">
-        <autodoc>GetDataHere(self) -&gt; String</autodoc>
-        <docstring>Returns the data bytes from the data object as a string, returns None
-on failure.  Must be implemented in the derived class if the object
-supports rendering its data.</docstring>
-      </method>
-      <method name="SetData" type="bool" overloaded="no">
-        <autodoc>SetData(self, String data) -&gt; bool</autodoc>
-        <docstring>Copy the data value to the data object.  Must be implemented in the
-derived class if the object supports setting its data.
-</docstring>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyDataObjectSimple" oldname="wxPyDataObjectSimple" module="_misc">
-      <docstring>wx.PyDataObjectSimple is a version of `wx.DataObjectSimple` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class.  You should derive from this
-class and overload `GetDataSize`, `GetDataHere` and `SetData` when you
-need to create your own simple single-format type of `wx.DataObject`.
-
-Here is a simple example::
-
-    class MyDataObject(wx.PyDataObjectSimple):
-        def __init__(self):
-            wx.PyDataObjectSimple.__init__(
-                self, wx.CustomDataFormat('MyDOFormat'))
-            self.data = ''
-
-        def GetDataSize(self):
-            return len(self.data)
-        def GetDataHere(self):
-            return self.data  # returns a string  
-        def SetData(self, data):
-            self.data = data
-            return True
-
-Note that there is already a `wx.CustomDataObject` class that behaves
-very similarly to this example.  The value of creating your own
-derived class like this is to be able to do additional things when the
-data is requested or given via the clipboard or drag and drop
-operation, such as generate the data value or decode it into needed
-data structures.
-</docstring>
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="PyDataObjectSimple" overloaded="no">
-        <autodoc>__init__(self, DataFormat format=FormatInvalid) -&gt; PyDataObjectSimple</autodoc>
-        <docstring>wx.PyDataObjectSimple is a version of `wx.DataObjectSimple` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class.  You should derive from this
-class and overload `GetDataSize`, `GetDataHere` and `SetData` when you
-need to create your own simple single-format type of `wx.DataObject`.
-
-Here is a simple example::
-
-    class MyDataObject(wx.PyDataObjectSimple):
-        def __init__(self):
-            wx.PyDataObjectSimple.__init__(
-                self, wx.CustomDataFormat('MyDOFormat'))
-            self.data = ''
-
-        def GetDataSize(self):
-            return len(self.data)
-        def GetDataHere(self):
-            return self.data  # returns a string  
-        def SetData(self, data):
-            self.data = data
-            return True
-
-Note that there is already a `wx.CustomDataObject` class that behaves
-very similarly to this example.  The value of creating your own
-derived class like this is to be able to do additional things when the
-data is requested or given via the clipboard or drag and drop
-operation, such as generate the data value or decode it into needed
-data structures.
-</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default="wxFormatInvalid"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DataObjectComposite" oldname="wxDataObjectComposite" module="_misc">
-      <docstring>wx.DataObjectComposite is the simplest `wx.DataObject` derivation
-which may be sued to support multiple formats. It contains several
-'wx.DataObjectSimple` objects and supports any format supported by at
-least one of them. Only one of these data objects is *preferred* (the
-first one if not explicitly changed by using the second parameter of
-`Add`) and its format determines the preferred format of the composite
-data object as well.
-
-See `wx.DataObject` documentation for the reasons why you might prefer
-to use wx.DataObject directly instead of wx.DataObjectComposite for
-efficiency reasons.
-</docstring>
-      <baseclass name="DataObject"/>
-      <constructor name="DataObjectComposite" overloaded="no">
-        <autodoc>__init__(self) -&gt; DataObjectComposite</autodoc>
-        <docstring>wx.DataObjectComposite is the simplest `wx.DataObject` derivation
-which may be sued to support multiple formats. It contains several
-'wx.DataObjectSimple` objects and supports any format supported by at
-least one of them. Only one of these data objects is *preferred* (the
-first one if not explicitly changed by using the second parameter of
-`Add`) and its format determines the preferred format of the composite
-data object as well.
-
-See `wx.DataObject` documentation for the reasons why you might prefer
-to use wx.DataObject directly instead of wx.DataObjectComposite for
-efficiency reasons.
-</docstring>
-      </constructor>
-      <method name="Add" type="" overloaded="no">
-        <autodoc>Add(self, DataObjectSimple dataObject, bool preferred=False)</autodoc>
-        <docstring>Adds the dataObject to the list of supported objects and it becomes
-the preferred object if preferred is True.</docstring>
-        <paramlist>
-          <param name="dataObject" type="DataObjectSimple" default=""/>
-          <param name="preferred" type="bool" default="False"/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="TextDataObject" oldname="wxTextDataObject" module="_misc">
-      <docstring>wx.TextDataObject is a specialization of `wx.DataObject` for text
-data. It can be used without change to paste data into the `wx.Clipboard`
-or a `wx.DropSource`.
-
-Alternativly, you may wish to derive a new class from the
-`wx.PyTextDataObject` class for providing text on-demand in order to
-minimize memory consumption when offering data in several formats,
-such as plain text and RTF, because by default the text is stored in a
-string in this class, but it might as well be generated on demand when
-requested. For this, `GetTextLength` and `GetText` will have to be
-overridden.</docstring>
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="TextDataObject" overloaded="no">
-        <autodoc>__init__(self, String text=EmptyString) -&gt; TextDataObject</autodoc>
-        <docstring>Constructor, may be used to initialise the text (otherwise `SetText`
-should be used later).</docstring>
-        <paramlist>
-          <param name="text" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <method name="GetTextLength" type="size_t" overloaded="no">
-        <autodoc>GetTextLength(self) -&gt; size_t</autodoc>
-        <docstring>Returns the data size.  By default, returns the size of the text data
-set in the constructor or using `SetText`.  This can be overridden (via
-`wx.PyTextDataObject`) to provide text size data on-demand. It is
-recommended to return the text length plus 1 for a trailing zero, but
-this is not strictly required.</docstring>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-        <docstring>Returns the text associated with the data object.</docstring>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String text)</autodoc>
-        <docstring>Sets the text associated with the data object. This method is called
-when the data object receives the data and, by default, copies the
-text into the member variable. If you want to process the text on the
-fly you may wish to override this function (via
-`wx.PyTextDataObject`.)</docstring>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyTextDataObject" oldname="wxPyTextDataObject" module="_misc">
-      <docstring>wx.PyTextDataObject is a version of `wx.TextDataObject` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class.  You should derive from this
-class and overload `GetTextLength`, `GetText`, and `SetText` when you
-want to be able to provide text on demand instead of preloading it
-into the data object.</docstring>
-      <baseclass name="TextDataObject"/>
-      <constructor name="PyTextDataObject" overloaded="no">
-        <autodoc>__init__(self, String text=EmptyString) -&gt; PyTextDataObject</autodoc>
-        <docstring>wx.PyTextDataObject is a version of `wx.TextDataObject` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class.  You should derive from this
-class and overload `GetTextLength`, `GetText`, and `SetText` when you
-want to be able to provide text on demand instead of preloading it
-into the data object.</docstring>
-        <paramlist>
-          <param name="text" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="BitmapDataObject" oldname="wxBitmapDataObject" module="_misc">
-      <docstring>wx.BitmapDataObject is a specialization of wxDataObject for bitmap
-data. It can be used without change to paste data into the `wx.Clipboard`
-or a `wx.DropSource`.
-
-:see: `wx.PyBitmapDataObject` if you wish to override `GetBitmap` to increase efficiency.</docstring>
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="BitmapDataObject" overloaded="no">
-        <autodoc>__init__(self, Bitmap bitmap=wxNullBitmap) -&gt; BitmapDataObject</autodoc>
-        <docstring>Constructor, optionally passing a bitmap (otherwise use `SetBitmap`
-later).</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-        </paramlist>
-      </constructor>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-        <docstring>Returns the bitmap associated with the data object.  You may wish to
-override this method (by deriving from `wx.PyBitmapDataObject`) when
-offering data on-demand, but this is not required by wxWidgets'
-internals. Use this method to get data in bitmap form from the
-`wx.Clipboard`.</docstring>
-      </method>
-      <method name="SetBitmap" type="" overloaded="no">
-        <autodoc>SetBitmap(self, Bitmap bitmap)</autodoc>
-        <docstring>Sets the bitmap associated with the data object. This method is called
-when the data object receives data. Usually there will be no reason to
-override this function.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyBitmapDataObject" oldname="wxPyBitmapDataObject" module="_misc">
-      <docstring>wx.PyBitmapDataObject is a version of `wx.BitmapDataObject` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class. To be able to provide bitmap
-data on demand derive from this class and overload `GetBitmap`.</docstring>
-      <baseclass name="BitmapDataObject"/>
-      <constructor name="PyBitmapDataObject" overloaded="no">
-        <autodoc>__init__(self, Bitmap bitmap=wxNullBitmap) -&gt; PyBitmapDataObject</autodoc>
-        <docstring>wx.PyBitmapDataObject is a version of `wx.BitmapDataObject` that is
-Python-aware and knows how to reflect calls to its C++ virtual methods
-to methods in the Python derived class. To be able to provide bitmap
-data on demand derive from this class and overload `GetBitmap`.</docstring>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FileDataObject" oldname="wxFileDataObject" module="_misc">
-      <docstring>wx.FileDataObject is a specialization of `wx.DataObjectSimple` for
-file names. The program works with it just as if it were a list of
-absolute file names, but internally it uses the same format as
-Explorer and other compatible programs under Windows or GNOME/KDE
-filemanager under Unix which makes it possible to receive files from
-them using this class.
-
-:Warning: Under all non-Windows platforms this class is currently
-    "input-only", i.e. you can receive the files from another
-    application, but copying (or dragging) file(s) from a wxWidgets
-    application is not currently supported.
-</docstring>
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="FileDataObject" overloaded="no">
-        <autodoc>__init__(self) -&gt; FileDataObject</autodoc>
-      </constructor>
-      <method name="GetFilenames" type="wxArrayString" overloaded="no">
-        <autodoc>GetFilenames(self) -&gt; [names]</autodoc>
-        <docstring>Returns a list of file names.</docstring>
-      </method>
-      <method name="AddFile" type="" overloaded="no">
-        <autodoc>AddFile(self, String filename)</autodoc>
-        <docstring>Adds a file to the list of files represented by this data object.</docstring>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="CustomDataObject" oldname="wxCustomDataObject" module="_misc">
-      <docstring>wx.CustomDataObject is a specialization of `wx.DataObjectSimple` for
-some application-specific data in arbitrary format.  Python strings
-are used for getting and setting data, but any picklable object can
-easily be transfered via strings.  A copy of the data is stored in the
-data object.</docstring>
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="CustomDataObject" overloaded="no">
-        <autodoc>__init__(self, DataFormat format=FormatInvalid) -&gt; CustomDataObject</autodoc>
-        <docstring>wx.CustomDataObject is a specialization of `wx.DataObjectSimple` for
-some application-specific data in arbitrary format.  Python strings
-are used for getting and setting data, but any picklable object can
-easily be transfered via strings.  A copy of the data is stored in the
-data object.</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default="wxFormatInvalid"/>
-        </paramlist>
-      </constructor>
-      <method name="SetData" type="bool" overloaded="no">
-        <autodoc>SetData(self, String data) -&gt; bool</autodoc>
-        <docstring>Copy the data value to the data object.</docstring>
-        <paramlist>
-          <param name="data" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="size_t" overloaded="no">
-        <autodoc>GetSize(self) -&gt; size_t</autodoc>
-        <docstring>Get the size of the data.</docstring>
-      </method>
-      <method name="GetData" type="PyObject" overloaded="no">
-        <autodoc>GetData(self) -&gt; String</autodoc>
-        <docstring>Returns the data bytes from the data object as a string.</docstring>
-      </method>
-    </class>
-    <class name="URLDataObject" oldname="wxURLDataObject" module="_misc">
-      <docstring>This data object holds a URL in a format that is compatible with some
-browsers such that it is able to be dragged to or from them.</docstring>
-      <baseclass name="DataObjectComposite"/>
-      <constructor name="URLDataObject" overloaded="no">
-        <autodoc>__init__(self) -&gt; URLDataObject</autodoc>
-        <docstring>This data object holds a URL in a format that is compatible with some
-browsers such that it is able to be dragged to or from them.</docstring>
-      </constructor>
-      <method name="GetURL" type="String" overloaded="no">
-        <autodoc>GetURL(self) -&gt; String</autodoc>
-        <docstring>Returns a string containing the current URL.</docstring>
-      </method>
-      <method name="SetURL" type="" overloaded="no">
-        <autodoc>SetURL(self, String url)</autodoc>
-        <docstring>Set the URL.</docstring>
-        <paramlist>
-          <param name="url" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="MetafileDataObject" oldname="wxMetafileDataObject" module="_misc">
-      <baseclass name="DataObjectSimple"/>
-      <constructor name="MetafileDataObject" overloaded="no">
-        <autodoc>__init__(self) -&gt; MetafileDataObject</autodoc>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <method name="IsDragResultOk" oldname="wxIsDragResultOk" type="bool" overloaded="no">
-      <autodoc>IsDragResultOk(int res) -&gt; bool</autodoc>
-      <paramlist>
-        <param name="res" type="wxDragResult" default=""/>
-      </paramlist>
-    </method>
-    <class name="DropSource" oldname="wxPyDropSource" module="_misc">
-      <constructor name="wxPyDropSource" overloaded="no">
-        <autodoc>__init__(self, Window win, Icon copy=wxNullIcon, Icon move=wxNullIcon, 
-    Icon none=wxNullIcon) -&gt; DropSource</autodoc>
-        <paramlist>
-          <param name="win" type="Window" default=""/>
-          <param name="copy" type="Icon" default="wxNullIcon"/>
-          <param name="move" type="Icon" default="wxNullIcon"/>
-          <param name="none" type="Icon" default="wxNullIcon"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPyDropSource" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class, int incref)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-          <param name="incref" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetData" type="" overloaded="no">
-        <autodoc>SetData(self, DataObject data)</autodoc>
-        <paramlist>
-          <param name="data" type="DataObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDataObject" type="DataObject" overloaded="no">
-        <autodoc>GetDataObject(self) -&gt; DataObject</autodoc>
-      </method>
-      <method name="SetCursor" type="" overloaded="no">
-        <autodoc>SetCursor(self, int res, Cursor cursor)</autodoc>
-        <paramlist>
-          <param name="res" type="wxDragResult" default=""/>
-          <param name="cursor" type="Cursor" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoDragDrop" type="wxDragResult" overloaded="no">
-        <autodoc>DoDragDrop(self, int flags=Drag_CopyOnly) -&gt; int</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default="wxDrag_CopyOnly"/>
-        </paramlist>
-      </method>
-      <method name="base_GiveFeedback" type="bool" overloaded="no">
-        <autodoc>base_GiveFeedback(self, int effect) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="effect" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DropTarget" oldname="wxPyDropTarget" module="_misc">
-      <constructor name="DropTarget" overloaded="no">
-        <autodoc>__init__(self, DataObject dataObject=None) -&gt; DropTarget</autodoc>
-        <paramlist>
-          <param name="dataObject" type="DataObject" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxPyDropTarget" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDataObject" type="DataObject" overloaded="no">
-        <autodoc>GetDataObject(self) -&gt; DataObject</autodoc>
-      </method>
-      <method name="SetDataObject" type="" overloaded="no">
-        <autodoc>SetDataObject(self, DataObject dataObject)</autodoc>
-        <paramlist>
-          <param name="dataObject" type="DataObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEnter" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnEnter(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragOver" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnDragOver(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeave" type="" overloaded="no">
-        <autodoc>base_OnLeave(self)</autodoc>
-      </method>
-      <method name="base_OnDrop" type="bool" overloaded="no">
-        <autodoc>base_OnDrop(self, int x, int y) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetData" type="bool" overloaded="no">
-        <autodoc>GetData(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <pythoncode> PyDropTarget = DropTarget </pythoncode>
-    <class name="TextDropTarget" oldname="wxPyTextDropTarget" module="_misc">
-      <baseclass name="DropTarget"/>
-      <constructor name="wxPyTextDropTarget" overloaded="no">
-        <autodoc>__init__(self) -&gt; TextDropTarget</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEnter" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnEnter(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragOver" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnDragOver(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeave" type="" overloaded="no">
-        <autodoc>base_OnLeave(self)</autodoc>
-      </method>
-      <method name="base_OnDrop" type="bool" overloaded="no">
-        <autodoc>base_OnDrop(self, int x, int y) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnData" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnData(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="FileDropTarget" oldname="wxPyFileDropTarget" module="_misc">
-      <baseclass name="DropTarget"/>
-      <constructor name="wxPyFileDropTarget" overloaded="no">
-        <autodoc>__init__(self) -&gt; FileDropTarget</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEnter" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnEnter(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragOver" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnDragOver(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeave" type="" overloaded="no">
-        <autodoc>base_OnLeave(self)</autodoc>
-      </method>
-      <method name="base_OnDrop" type="bool" overloaded="no">
-        <autodoc>base_OnDrop(self, int x, int y) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnData" type="wxDragResult" overloaded="no">
-        <autodoc>base_OnData(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="Clipboard" oldname="wxClipboard" module="_misc">
-      <docstring>wx.Clipboard represents the system clipboard and provides methods to
-copy data to it or paste data from it.  Normally, you should only use
-``wx.TheClipboard`` which is a reference to a global wx.Clipboard
-instance.
-
-Call ``wx.TheClipboard``'s `Open` method to get ownership of the
-clipboard. If this operation returns True, you now own the
-clipboard. Call `SetData` to put data on the clipboard, or `GetData`
-to retrieve data from the clipboard.  Call `Close` to close the
-clipboard and relinquish ownership. You should keep the clipboard open
-only momentarily.
-
-:see: `wx.DataObject`
-</docstring>
-      <baseclass name="Object"/>
-      <constructor name="Clipboard" overloaded="no">
-        <autodoc>__init__(self) -&gt; Clipboard</autodoc>
-      </constructor>
-      <destructor name="~wxClipboard" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Open" type="bool" overloaded="no">
-        <autodoc>Open(self) -&gt; bool</autodoc>
-        <docstring>Call this function to open the clipboard before calling SetData and
-GetData.  Call Close when you have finished with the clipboard.  You
-should keep the clipboard open for only a very short time.  Returns
-True on success.</docstring>
-      </method>
-      <method name="Close" type="" overloaded="no">
-        <autodoc>Close(self)</autodoc>
-        <docstring>Closes the clipboard.</docstring>
-      </method>
-      <method name="IsOpened" type="bool" overloaded="no">
-        <autodoc>IsOpened(self) -&gt; bool</autodoc>
-        <docstring>Query whether the clipboard is opened</docstring>
-      </method>
-      <method name="AddData" type="bool" overloaded="no">
-        <autodoc>AddData(self, DataObject data) -&gt; bool</autodoc>
-        <docstring>Call this function to add the data object to the clipboard. You may
-call this function repeatedly after having cleared the clipboard.
-After this function has been called, the clipboard owns the data, so
-do not delete the data explicitly.
-
-:see: `wx.DataObject`</docstring>
-        <paramlist>
-          <param name="data" type="DataObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetData" type="bool" overloaded="no">
-        <autodoc>SetData(self, DataObject data) -&gt; bool</autodoc>
-        <docstring>Set the clipboard data, this is the same as `Clear` followed by
-`AddData`.
-
-:see: `wx.DataObject`</docstring>
-        <paramlist>
-          <param name="data" type="DataObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSupported" type="bool" overloaded="no">
-        <autodoc>IsSupported(self, DataFormat format) -&gt; bool</autodoc>
-        <docstring>Returns True if the given format is available in the data object(s) on
-the clipboard.</docstring>
-        <paramlist>
-          <param name="format" type="DataFormat" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetData" type="bool" overloaded="no">
-        <autodoc>GetData(self, DataObject data) -&gt; bool</autodoc>
-        <docstring>Call this function to fill data with data on the clipboard, if
-available in the required format. Returns true on success.</docstring>
-        <paramlist>
-          <param name="data" type="DataObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-        <docstring>Clears data from the clipboard object and also the system's clipboard
-if possible.</docstring>
-      </method>
-      <method name="Flush" type="bool" overloaded="no">
-        <autodoc>Flush(self) -&gt; bool</autodoc>
-        <docstring>Flushes the clipboard: this means that the data which is currently on
-clipboard will stay available even after the application exits,
-possibly eating memory, otherwise the clipboard will be emptied on
-exit.  Returns False if the operation is unsuccesful for any reason.</docstring>
-      </method>
-      <method name="UsePrimarySelection" type="" overloaded="no">
-        <autodoc>UsePrimarySelection(self, bool primary=True)</autodoc>
-        <docstring>On platforms supporting it (the X11 based platforms), selects the
-so called PRIMARY SELECTION as the clipboard as opposed to the
-normal clipboard, if primary is True.</docstring>
-        <paramlist>
-          <param name="primary" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <staticmethod name="Get" type="Clipboard" overloaded="no">
-        <autodoc>Get() -&gt; Clipboard</autodoc>
-        <docstring>Returns global instance (wxTheClipboard) of the object.</docstring>
-      </staticmethod>
-    </class>
-    <pythoncode>
-    class _wxPyDelayedInitWrapper(object):
-        def __init__(self, initfunc, *args, **kwargs):
-            self._initfunc = initfunc
-            self._args = args
-            self._kwargs = kwargs
-            self._instance = None
-        def _checkInstance(self):
-            if self._instance is None:
-                self._instance = self._initfunc(*self._args, **self._kwargs)        
-        def __getattr__(self, name):
-            self._checkInstance()
-            return getattr(self._instance, name)
-        def __repr__(self):
-            self._checkInstance()
-            return repr(self._instance)
-    TheClipboard = _wxPyDelayedInitWrapper(Clipboard.Get)
-</pythoncode>
-    <class name="ClipboardLocker" oldname="wxClipboardLocker" module="_misc">
-      <docstring>A helpful class for opening the clipboard and automatically
-closing it when the locker is destroyed.</docstring>
-      <constructor name="ClipboardLocker" overloaded="no">
-        <autodoc>__init__(self, Clipboard clipboard=None) -&gt; ClipboardLocker</autodoc>
-        <docstring>A helpful class for opening the clipboard and automatically
-closing it when the locker is destroyed.</docstring>
-        <paramlist>
-          <param name="clipboard" type="Clipboard" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxClipboardLocker" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="__nonzero__" type="bool" overloaded="no">
-        <autodoc>__nonzero__(self) -&gt; bool</autodoc>
-        <docstring>A ClipboardLocker instance evaluates to True if the clipboard was
-successfully opened.</docstring>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="VideoMode" oldname="wxVideoMode" module="_misc">
-      <docstring>A simple struct containing video mode parameters for a display</docstring>
-      <constructor name="VideoMode" overloaded="no">
-        <autodoc>__init__(self, int width=0, int height=0, int depth=0, int freq=0) -&gt; VideoMode</autodoc>
-        <docstring>A simple struct containing video mode parameters for a display</docstring>
-        <paramlist>
-          <param name="width" type="int" default="0"/>
-          <param name="height" type="int" default="0"/>
-          <param name="depth" type="int" default="0"/>
-          <param name="freq" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxVideoMode" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Matches" type="bool" overloaded="no">
-        <autodoc>Matches(self, VideoMode other) -&gt; bool</autodoc>
-        <docstring>Returns true if this mode matches the other one in the sense that all
-non zero fields of the other mode have the same value in this
-one (except for refresh which is allowed to have a greater value)</docstring>
-        <paramlist>
-          <param name="other" type="VideoMode" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-        <docstring>Returns the screen width in pixels (e.g. 640*480), 0 means unspecified</docstring>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-        <docstring>Returns the screen width in pixels (e.g. 640*480), 0 means
-unspecified</docstring>
-      </method>
-      <method name="GetDepth" type="int" overloaded="no">
-        <autodoc>GetDepth(self) -&gt; int</autodoc>
-        <docstring>Returns the screen's bits per pixel (e.g. 32), 1 is monochrome and 0
-means unspecified/known</docstring>
-      </method>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-        <docstring>returns true if the object has been initialized</docstring>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, VideoMode other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="VideoMode" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, VideoMode other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="VideoMode" default=""/>
-        </paramlist>
-      </method>
-      <property name="w" type="int" readonly="no"/>
-      <property name="h" type="int" readonly="no"/>
-      <property name="bpp" type="int" readonly="no"/>
-      <property name="refresh" type="int" readonly="no"/>
-    </class>
-    <class name="Display" oldname="wxDisplay" module="_misc">
-      <docstring>Represents a display/monitor attached to the system</docstring>
-      <constructor name="Display" overloaded="no">
-        <autodoc>__init__(self, size_t index=0) -&gt; Display</autodoc>
-        <docstring>Set up a Display instance with the specified display.  The displays
-are numbered from 0 to GetCount() - 1, 0 is always the primary display
-and the only one which is always supported</docstring>
-        <paramlist>
-          <param name="index" type="size_t" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxDisplay" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <staticmethod name="GetCount" type="size_t" overloaded="no">
-        <autodoc>GetCount() -&gt; size_t</autodoc>
-        <docstring>Return the number of available displays.</docstring>
-      </staticmethod>
-      <staticmethod name="GetFromPoint" type="int" overloaded="no">
-        <autodoc>GetFromPoint(Point pt) -&gt; int</autodoc>
-        <docstring>Find the display where the given point lies, return wx.NOT_FOUND if it
-doesn't belong to any display</docstring>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="GetFromWindow" type="int" overloaded="no">
-        <autodoc>GetFromWindow(Window window) -&gt; int</autodoc>
-        <docstring>Find the display where the given window lies, return wx.NOT_FOUND if
-it is not shown at all.</docstring>
-        <paramlist>
-          <param name="window" type="Window" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-        <docstring>Return true if the object was initialized successfully</docstring>
-      </method>
-      <method name="GetGeometry" type="Rect" overloaded="no">
-        <autodoc>GetGeometry(self) -&gt; Rect</autodoc>
-        <docstring>Returns the bounding rectangle of the display whose index was passed
-to the constructor.</docstring>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-        <docstring>Returns the display's name. A name is not available on all platforms.</docstring>
-      </method>
-      <method name="IsPrimary" type="bool" overloaded="no">
-        <autodoc>IsPrimary(self) -&gt; bool</autodoc>
-        <docstring>Returns true if the display is the primary display. The primary
-display is the one whose index is 0.</docstring>
-      </method>
-      <method name="GetModes" type="PyObject" overloaded="no">
-        <autodoc>GetModes(VideoMode mode=DefaultVideoMode) -&gt; [videoMode...]</autodoc>
-        <docstring>Enumerate all video modes supported by this display matching the given
-one (in the sense of VideoMode.Match()).
-
-As any mode matches the default value of the argument and there is
-always at least one video mode supported by display, the returned
-array is only empty for the default value of the argument if this
-function is not supported at all on this platform.</docstring>
-        <paramlist>
-          <param name="mode" type="VideoMode" default="wxDefaultVideoMode"/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentMode" type="VideoMode" overloaded="no">
-        <autodoc>GetCurrentMode(self) -&gt; VideoMode</autodoc>
-        <docstring>Get the current video mode.</docstring>
-      </method>
-      <method name="ChangeMode" type="bool" overloaded="no">
-        <autodoc>ChangeMode(self, VideoMode mode=DefaultVideoMode) -&gt; bool</autodoc>
-        <docstring>Changes the video mode of this display to the mode specified in the
-mode parameter.
-
-If wx.DefaultVideoMode is passed in as the mode parameter, the defined
-behaviour is that wx.Display will reset the video mode to the default
-mode used by the display.  On Windows, the behavior is normal.
-However, there are differences on other platforms. On Unix variations
-using X11 extensions it should behave as defined, but some
-irregularities may occur.
-
-On wxMac passing in wx.DefaultVideoMode as the mode parameter does
-nothing.  This happens because Carbon no longer has access to
-DMUseScreenPrefs, an undocumented function that changed the video mode
-to the system default by using the system's 'scrn' resource.
-
-Returns True if succeeded, False otherwise</docstring>
-        <paramlist>
-          <param name="mode" type="VideoMode" default="wxDefaultVideoMode"/>
-        </paramlist>
-      </method>
-      <method name="ResetMode" type="" overloaded="no">
-        <autodoc>ResetMode(self)</autodoc>
-        <docstring>Restore the default video mode (just a more readable synonym)</docstring>
-      </method>
-    </class>
-  </module>
-  <module name="calendar">
-    <import name="_misc"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <class name="CalendarDateAttr" oldname="wxCalendarDateAttr" module="calendar">
-      <docstring>A set of customization attributes for a calendar date, which can be
-used to control the look of the Calendar object.</docstring>
-      <constructor name="CalendarDateAttr" overloaded="no">
-        <autodoc>__init__(self, Colour colText=wxNullColour, Colour colBack=wxNullColour, 
-    Colour colBorder=wxNullColour, Font font=wxNullFont, 
-    int border=CAL_BORDER_NONE) -&gt; CalendarDateAttr</autodoc>
-        <docstring>Create a CalendarDateAttr.</docstring>
-        <paramlist>
-          <param name="colText" type="Colour" default="wxNullColour"/>
-          <param name="colBack" type="Colour" default="wxNullColour"/>
-          <param name="colBorder" type="Colour" default="wxNullColour"/>
-          <param name="font" type="Font" default="wxNullFont"/>
-          <param name="border" type="wxCalendarDateBorder" default="wxCAL_BORDER_NONE"/>
-        </paramlist>
-      </constructor>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colText)</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colBack)</autodoc>
-        <paramlist>
-          <param name="colBack" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBorderColour" type="" overloaded="no">
-        <autodoc>SetBorderColour(self, Colour col)</autodoc>
-        <paramlist>
-          <param name="col" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBorder" type="" overloaded="no">
-        <autodoc>SetBorder(self, int border)</autodoc>
-        <paramlist>
-          <param name="border" type="wxCalendarDateBorder" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHoliday" type="" overloaded="no">
-        <autodoc>SetHoliday(self, bool holiday)</autodoc>
-        <paramlist>
-          <param name="holiday" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasTextColour" type="bool" overloaded="no">
-        <autodoc>HasTextColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBackgroundColour" type="bool" overloaded="no">
-        <autodoc>HasBackgroundColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBorderColour" type="bool" overloaded="no">
-        <autodoc>HasBorderColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasFont" type="bool" overloaded="no">
-        <autodoc>HasFont(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBorder" type="bool" overloaded="no">
-        <autodoc>HasBorder(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsHoliday" type="bool" overloaded="no">
-        <autodoc>IsHoliday(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBorderColour" type="Colour" overloaded="no">
-        <autodoc>GetBorderColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetBorder" type="wxCalendarDateBorder" overloaded="no">
-        <autodoc>GetBorder(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="CalendarEvent" oldname="wxCalendarEvent" module="calendar">
-      <baseclass name="CommandEvent"/>
-      <constructor name="CalendarEvent" overloaded="no">
-        <autodoc>__init__(self, CalendarCtrl cal, wxEventType type) -&gt; CalendarEvent</autodoc>
-        <paramlist>
-          <param name="cal" type="wxCalendarCtrl" default=""/>
-          <param name="type" type="wxEventType" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetDate" type="DateTime" overloaded="no">
-        <autodoc>GetDate(self) -&gt; DateTime</autodoc>
-      </method>
-      <method name="SetDate" type="" overloaded="no">
-        <autodoc>SetDate(self, DateTime date)</autodoc>
-        <paramlist>
-          <param name="date" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWeekDay" type="" overloaded="no">
-        <autodoc>SetWeekDay(self, int wd)</autodoc>
-        <paramlist>
-          <param name="wd" type="wxDateTime::WeekDay" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWeekDay" type="wxDateTime::WeekDay" overloaded="no">
-        <autodoc>GetWeekDay(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-EVT_CALENDAR =                 wx.PyEventBinder( wxEVT_CALENDAR_DOUBLECLICKED, 1)
-EVT_CALENDAR_SEL_CHANGED =     wx.PyEventBinder( wxEVT_CALENDAR_SEL_CHANGED, 1)
-EVT_CALENDAR_DAY =             wx.PyEventBinder( wxEVT_CALENDAR_DAY_CHANGED, 1)
-EVT_CALENDAR_MONTH =           wx.PyEventBinder( wxEVT_CALENDAR_MONTH_CHANGED, 1)
-EVT_CALENDAR_YEAR =            wx.PyEventBinder( wxEVT_CALENDAR_YEAR_CHANGED, 1)
-EVT_CALENDAR_WEEKDAY_CLICKED = wx.PyEventBinder( wxEVT_CALENDAR_WEEKDAY_CLICKED, 1)
-</pythoncode>
-    <class name="CalendarCtrl" oldname="wxCalendarCtrl" module="calendar">
-      <docstring>The calendar control allows the user to pick a date interactively.
-
-The CalendarCtrl displays a window containing several parts: the
-control to pick the month and the year at the top (either or both of
-them may be disabled) and a month area below them which shows all the
-days in the month. The user can move the current selection using the
-keyboard and select the date (generating EVT_CALENDAR event) by
-pressing &lt;Return&gt; or double clicking it.
-
-It has advanced possibilities for the customization of its
-display. All global settings (such as colours and fonts used) can, of
-course, be changed. But also, the display style for each day in the
-month can be set independently using CalendarDateAttr class.
-
-An item without custom attributes is drawn with the default colours
-and font and without border, but setting custom attributes with
-SetAttr allows to modify its appearance. Just create a custom
-attribute object and set it for the day you want to be displayed
-specially A day may be marked as being a holiday, (even if it is not
-recognized as one by wx.DateTime) by using the SetHoliday method.
-
-As the attributes are specified for each day, they may change when the
-month is changed, so you will often want to update them in an
-EVT_CALENDAR_MONTH event handler.
-
-Window Styles
--------------
-    ==============================   ============================
-    CAL_SUNDAY_FIRST                 Show Sunday as the first day
-                                     in the week
-    CAL_MONDAY_FIRST                 Show Monday as the first day
-                                     in the week
-    CAL_SHOW_HOLIDAYS                Highlight holidays in the
-                                     calendar
-    CAL_NO_YEAR_CHANGE               Disable the year changing
-    CAL_NO_MONTH_CHANGE              Disable the month (and,
-                                     implicitly, the year) changing
-    CAL_SHOW_SURROUNDING_WEEKS       Show the neighbouring weeks in
-                                     the previous and next months
-    CAL_SEQUENTIAL_MONTH_SELECTION   Use alternative, more compact,
-                                     style for the month and year
-                                     selection controls.
-    ==============================   ============================
-
-The default calendar style is CAL_SHOW_HOLIDAYS.
-
-Events
--------
-    =============================  ==============================
-    EVT_CALENDAR                   A day was double clicked in the
-                                   calendar.
-    EVT_CALENDAR_SEL_CHANGED       The selected date changed.
-    EVT_CALENDAR_DAY               The selected day changed.
-    EVT_CALENDAR_MONTH             The selected month changed.
-    EVT_CALENDAR_YEAR              The selected year changed.
-    EVT_CALENDAR_WEEKDAY_CLICKED   User clicked on the week day
-                                   header
-    =============================  ==============================
-
-Note that changing the selected date will result in one of
-EVT_CALENDAR_DAY, MONTH or YEAR events and an EVT_CALENDAR_SEL_CHANGED
-event.
-    
-</docstring>
-      <baseclass name="Control"/>
-      <constructor name="CalendarCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, DateTime date=DefaultDateTime, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxCAL_SHOW_HOLIDAYS|wxWANTS_CHARS, 
-    String name=CalendarNameStr) -&gt; CalendarCtrl</autodoc>
-        <docstring>Create and show a calendar control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="date" type="DateTime" default="wxDefaultDateTime"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCAL_SHOW_HOLIDAYS|wxWANTS_CHARS"/>
-          <param name="name" type="String" default="wxPyCalendarNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreCalendarCtrl" overloaded="no">
-        <autodoc>PreCalendarCtrl() -&gt; CalendarCtrl</autodoc>
-        <docstring>Precreate a CalendarCtrl for 2-phase creation.</docstring>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id, DateTime date=DefaultDateTime, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxCAL_SHOW_HOLIDAYS|wxWANTS_CHARS, 
-    String name=CalendarNameStr) -&gt; bool</autodoc>
-        <docstring>Acutally create the GUI portion of the CalendarCtrl for 2-phase
-creation.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="date" type="DateTime" default="wxDefaultDateTime"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCAL_SHOW_HOLIDAYS|wxWANTS_CHARS"/>
-          <param name="name" type="String" default="wxPyCalendarNameStr"/>
-        </paramlist>
-      </method>
-      <method name="SetDate" type="" overloaded="no">
-        <autodoc>SetDate(self, DateTime date)</autodoc>
-        <docstring>Sets the current date.</docstring>
-        <paramlist>
-          <param name="date" type="DateTime" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDate" type="DateTime" overloaded="no">
-        <autodoc>GetDate(self) -&gt; DateTime</autodoc>
-        <docstring>Gets the currently selected date.</docstring>
-      </method>
-      <method name="SetLowerDateLimit" type="bool" overloaded="no">
-        <autodoc>SetLowerDateLimit(self, DateTime date=DefaultDateTime) -&gt; bool</autodoc>
-        <docstring>set the range in which selection can occur</docstring>
-        <paramlist>
-          <param name="date" type="DateTime" default="wxDefaultDateTime"/>
-        </paramlist>
-      </method>
-      <method name="SetUpperDateLimit" type="bool" overloaded="no">
-        <autodoc>SetUpperDateLimit(self, DateTime date=DefaultDateTime) -&gt; bool</autodoc>
-        <docstring>set the range in which selection can occur</docstring>
-        <paramlist>
-          <param name="date" type="DateTime" default="wxDefaultDateTime"/>
-        </paramlist>
-      </method>
-      <method name="GetLowerDateLimit" type="DateTime" overloaded="no">
-        <autodoc>GetLowerDateLimit(self) -&gt; DateTime</autodoc>
-        <docstring>get the range in which selection can occur</docstring>
-      </method>
-      <method name="GetUpperDateLimit" type="DateTime" overloaded="no">
-        <autodoc>GetUpperDateLimit(self) -&gt; DateTime</autodoc>
-        <docstring>get the range in which selection can occur</docstring>
-      </method>
-      <method name="SetDateRange" type="bool" overloaded="no">
-        <autodoc>SetDateRange(self, DateTime lowerdate=DefaultDateTime, DateTime upperdate=DefaultDateTime) -&gt; bool</autodoc>
-        <docstring>set the range in which selection can occur</docstring>
-        <paramlist>
-          <param name="lowerdate" type="DateTime" default="wxDefaultDateTime"/>
-          <param name="upperdate" type="DateTime" default="wxDefaultDateTime"/>
-        </paramlist>
-      </method>
-      <method name="EnableYearChange" type="" overloaded="no">
-        <autodoc>EnableYearChange(self, bool enable=True)</autodoc>
-        <docstring>This function should be used instead of changing CAL_NO_YEAR_CHANGE
-style bit directly. It allows or disallows the user to change the year
-interactively.</docstring>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="EnableMonthChange" type="" overloaded="no">
-        <autodoc>EnableMonthChange(self, bool enable=True)</autodoc>
-        <docstring>This function should be used instead of changing CAL_NO_MONTH_CHANGE
-style bit. It allows or disallows the user to change the month
-interactively. Note that if the month can not be changed, the year can
-not be changed either.</docstring>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="EnableHolidayDisplay" type="" overloaded="no">
-        <autodoc>EnableHolidayDisplay(self, bool display=True)</autodoc>
-        <docstring>This function should be used instead of changing CAL_SHOW_HOLIDAYS
-style bit directly. It enables or disables the special highlighting of
-the holidays.</docstring>
-        <paramlist>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetHeaderColours" type="" overloaded="no">
-        <autodoc>SetHeaderColours(self, Colour colFg, Colour colBg)</autodoc>
-        <docstring>Header colours are used for painting the weekdays at the top.</docstring>
-        <paramlist>
-          <param name="colFg" type="Colour" default=""/>
-          <param name="colBg" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHeaderColourFg" type="Colour" overloaded="no">
-        <autodoc>GetHeaderColourFg(self) -&gt; Colour</autodoc>
-        <docstring>Header colours are used for painting the weekdays at the top.</docstring>
-      </method>
-      <method name="GetHeaderColourBg" type="Colour" overloaded="no">
-        <autodoc>GetHeaderColourBg(self) -&gt; Colour</autodoc>
-        <docstring>Header colours are used for painting the weekdays at the top.</docstring>
-      </method>
-      <method name="SetHighlightColours" type="" overloaded="no">
-        <autodoc>SetHighlightColours(self, Colour colFg, Colour colBg)</autodoc>
-        <docstring>Highlight colour is used for the currently selected date.</docstring>
-        <paramlist>
-          <param name="colFg" type="Colour" default=""/>
-          <param name="colBg" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHighlightColourFg" type="Colour" overloaded="no">
-        <autodoc>GetHighlightColourFg(self) -&gt; Colour</autodoc>
-        <docstring>Highlight colour is used for the currently selected date.</docstring>
-      </method>
-      <method name="GetHighlightColourBg" type="Colour" overloaded="no">
-        <autodoc>GetHighlightColourBg(self) -&gt; Colour</autodoc>
-        <docstring>Highlight colour is used for the currently selected date.</docstring>
-      </method>
-      <method name="SetHolidayColours" type="" overloaded="no">
-        <autodoc>SetHolidayColours(self, Colour colFg, Colour colBg)</autodoc>
-        <docstring>Holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is
-used).</docstring>
-        <paramlist>
-          <param name="colFg" type="Colour" default=""/>
-          <param name="colBg" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHolidayColourFg" type="Colour" overloaded="no">
-        <autodoc>GetHolidayColourFg(self) -&gt; Colour</autodoc>
-        <docstring>Holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is
-used).</docstring>
-      </method>
-      <method name="GetHolidayColourBg" type="Colour" overloaded="no">
-        <autodoc>GetHolidayColourBg(self) -&gt; Colour</autodoc>
-        <docstring>Holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is
-used).</docstring>
-      </method>
-      <method name="GetAttr" type="CalendarDateAttr" overloaded="no">
-        <autodoc>GetAttr(self, size_t day) -&gt; CalendarDateAttr</autodoc>
-        <docstring>Returns the attribute for the given date (should be in the range
-1...31).  The returned value may be None</docstring>
-        <paramlist>
-          <param name="day" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttr" type="" overloaded="no">
-        <autodoc>SetAttr(self, size_t day, CalendarDateAttr attr)</autodoc>
-        <docstring>Associates the attribute with the specified date (in the range
-1...31).  If the attribute passed is None, the items attribute is
-cleared.</docstring>
-        <paramlist>
-          <param name="day" type="size_t" default=""/>
-          <param name="attr" type="CalendarDateAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHoliday" type="" overloaded="no">
-        <autodoc>SetHoliday(self, size_t day)</autodoc>
-        <docstring>Marks the specified day as being a holiday in the current month.</docstring>
-        <paramlist>
-          <param name="day" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="ResetAttr" type="" overloaded="no">
-        <autodoc>ResetAttr(self, size_t day)</autodoc>
-        <docstring>Clears any attributes associated with the given day (in the range
-1...31).</docstring>
-        <paramlist>
-          <param name="day" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="PyObject" overloaded="no">
-        <autodoc>HitTest(Point pos) -&gt; (result, date, weekday)</autodoc>
-        <docstring>Returns 3-tuple with information about the given position on the
-calendar control.  The first value of the tuple is a result code and
-determines the validity of the remaining two values.
-The result codes are:
-
-    ===================    ============================================
-    CAL_HITTEST_NOWHERE    hit outside of anything
-    CAL_HITTEST_HEADER     hit on the header, weekday is valid
-    CAL_HITTEST_DAY        hit on a day in the calendar, date is set.
-    ===================    ============================================
-</docstring>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMonthControl" type="Control" overloaded="no">
-        <autodoc>GetMonthControl(self) -&gt; Control</autodoc>
-        <docstring>Get the currently shown control for month.</docstring>
-      </method>
-      <method name="GetYearControl" type="Control" overloaded="no">
-        <autodoc>GetYearControl(self) -&gt; Control</autodoc>
-        <docstring>Get the currently shown control for year.</docstring>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-  </module>
-  <module name="grid">
-    <import name="_windows"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <class name="GridCellRenderer" oldname="wxGridCellRenderer" module="grid">
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParameters" type="" overloaded="no">
-        <autodoc>SetParameters(self, String params)</autodoc>
-        <paramlist>
-          <param name="params" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IncRef" type="" overloaded="no">
-        <autodoc>IncRef(self)</autodoc>
-      </method>
-      <method name="DecRef" type="" overloaded="no">
-        <autodoc>DecRef(self)</autodoc>
-      </method>
-      <method name="Draw" type="" overloaded="no">
-        <autodoc>Draw(self, Grid grid, GridCellAttr attr, DC dc, Rect rect, int row, 
-    int col, bool isSelected)</autodoc>
-        <paramlist>
-          <param name="grid" type="wxGrid" default=""/>
-          <param name="attr" type="wxGridCellAttr" default=""/>
-          <param name="dc" type="DC" default=""/>
-          <param name="rect" type="Rect" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="isSelected" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBestSize" type="Size" overloaded="no">
-        <autodoc>GetBestSize(self, Grid grid, GridCellAttr attr, DC dc, int row, int col) -&gt; Size</autodoc>
-        <paramlist>
-          <param name="grid" type="wxGrid" default=""/>
-          <param name="attr" type="wxGridCellAttr" default=""/>
-          <param name="dc" type="DC" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clone" type="GridCellRenderer" overloaded="no">
-        <autodoc>Clone(self) -&gt; GridCellRenderer</autodoc>
-      </method>
-    </class>
-    <class name="PyGridCellRenderer" oldname="wxPyGridCellRenderer" module="grid">
-      <baseclass name="GridCellRenderer"/>
-      <constructor name="PyGridCellRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyGridCellRenderer</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetParameters" type="" overloaded="no">
-        <autodoc>base_SetParameters(self, String params)</autodoc>
-        <paramlist>
-          <param name="params" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridCellStringRenderer" oldname="wxGridCellStringRenderer" module="grid">
-      <baseclass name="GridCellRenderer"/>
-      <constructor name="GridCellStringRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellStringRenderer</autodoc>
-      </constructor>
-    </class>
-    <class name="GridCellNumberRenderer" oldname="wxGridCellNumberRenderer" module="grid">
-      <baseclass name="GridCellStringRenderer"/>
-      <constructor name="GridCellNumberRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellNumberRenderer</autodoc>
-      </constructor>
-    </class>
-    <class name="GridCellFloatRenderer" oldname="wxGridCellFloatRenderer" module="grid">
-      <baseclass name="GridCellStringRenderer"/>
-      <constructor name="GridCellFloatRenderer" overloaded="no">
-        <autodoc>__init__(self, int width=-1, int precision=-1) -&gt; GridCellFloatRenderer</autodoc>
-        <paramlist>
-          <param name="width" type="int" default="-1"/>
-          <param name="precision" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrecision" type="int" overloaded="no">
-        <autodoc>GetPrecision(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPrecision" type="" overloaded="no">
-        <autodoc>SetPrecision(self, int precision)</autodoc>
-        <paramlist>
-          <param name="precision" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridCellBoolRenderer" oldname="wxGridCellBoolRenderer" module="grid">
-      <baseclass name="GridCellRenderer"/>
-      <constructor name="GridCellBoolRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellBoolRenderer</autodoc>
-      </constructor>
-    </class>
-    <class name="GridCellDateTimeRenderer" oldname="wxGridCellDateTimeRenderer" module="grid">
-      <baseclass name="GridCellStringRenderer"/>
-      <constructor name="GridCellDateTimeRenderer" overloaded="no">
-        <autodoc>__init__(self, String outformat=DateTimeFormatStr, String informat=DateTimeFormatStr) -&gt; GridCellDateTimeRenderer</autodoc>
-        <paramlist>
-          <param name="outformat" type="String" default="wxPyDateTimeFormatStr"/>
-          <param name="informat" type="String" default="wxPyDateTimeFormatStr"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="GridCellEnumRenderer" oldname="wxGridCellEnumRenderer" module="grid">
-      <baseclass name="GridCellStringRenderer"/>
-      <constructor name="GridCellEnumRenderer" overloaded="no">
-        <autodoc>__init__(self, String choices=EmptyString) -&gt; GridCellEnumRenderer</autodoc>
-        <paramlist>
-          <param name="choices" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="GridCellAutoWrapStringRenderer" oldname="wxGridCellAutoWrapStringRenderer" module="grid">
-      <baseclass name="GridCellStringRenderer"/>
-      <constructor name="GridCellAutoWrapStringRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellAutoWrapStringRenderer</autodoc>
-      </constructor>
-    </class>
-    <class name="GridCellEditor" oldname="wxGridCellEditor" module="grid">
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsCreated" type="bool" overloaded="no">
-        <autodoc>IsCreated(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetControl" type="Control" overloaded="no">
-        <autodoc>GetControl(self) -&gt; Control</autodoc>
-      </method>
-      <method name="SetControl" type="" overloaded="no">
-        <autodoc>SetControl(self, Control control)</autodoc>
-        <paramlist>
-          <param name="control" type="Control" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCellAttr" type="wxGridCellAttr" overloaded="no">
-        <autodoc>GetCellAttr(self) -&gt; GridCellAttr</autodoc>
-      </method>
-      <method name="SetCellAttr" type="" overloaded="no">
-        <autodoc>SetCellAttr(self, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="attr" type="wxGridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParameters" type="" overloaded="no">
-        <autodoc>SetParameters(self, String params)</autodoc>
-        <paramlist>
-          <param name="params" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IncRef" type="" overloaded="no">
-        <autodoc>IncRef(self)</autodoc>
-      </method>
-      <method name="DecRef" type="" overloaded="no">
-        <autodoc>DecRef(self)</autodoc>
-      </method>
-      <method name="Create" type="" overloaded="no">
-        <autodoc>Create(self, Window parent, int id, EvtHandler evtHandler)</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="evtHandler" type="EvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="BeginEdit" type="" overloaded="no">
-        <autodoc>BeginEdit(self, int row, int col, Grid grid)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="grid" type="wxGrid" default=""/>
-        </paramlist>
-      </method>
-      <method name="EndEdit" type="bool" overloaded="no">
-        <autodoc>EndEdit(self, int row, int col, Grid grid) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="grid" type="wxGrid" default=""/>
-        </paramlist>
-      </method>
-      <method name="Reset" type="" overloaded="no">
-        <autodoc>Reset(self)</autodoc>
-      </method>
-      <method name="Clone" type="GridCellEditor" overloaded="no">
-        <autodoc>Clone(self) -&gt; GridCellEditor</autodoc>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, bool show, GridCellAttr attr=None)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-          <param name="attr" type="wxGridCellAttr" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="PaintBackground" type="" overloaded="no">
-        <autodoc>PaintBackground(self, Rect rectCell, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="rectCell" type="Rect" default=""/>
-          <param name="attr" type="wxGridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsAcceptedKey" type="bool" overloaded="no">
-        <autodoc>IsAcceptedKey(self, KeyEvent event) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="StartingKey" type="" overloaded="no">
-        <autodoc>StartingKey(self, KeyEvent event)</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="StartingClick" type="" overloaded="no">
-        <autodoc>StartingClick(self)</autodoc>
-      </method>
-      <method name="HandleReturn" type="" overloaded="no">
-        <autodoc>HandleReturn(self, KeyEvent event)</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-      </method>
-    </class>
-    <class name="PyGridCellEditor" oldname="wxPyGridCellEditor" module="grid">
-      <baseclass name="GridCellEditor"/>
-      <constructor name="PyGridCellEditor" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyGridCellEditor</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetSize" type="" overloaded="no">
-        <autodoc>base_SetSize(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_Show" type="" overloaded="no">
-        <autodoc>base_Show(self, bool show, GridCellAttr attr=None)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-          <param name="attr" type="wxGridCellAttr" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="base_PaintBackground" type="" overloaded="no">
-        <autodoc>base_PaintBackground(self, Rect rectCell, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="rectCell" type="Rect" default=""/>
-          <param name="attr" type="wxGridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_IsAcceptedKey" type="bool" overloaded="no">
-        <autodoc>base_IsAcceptedKey(self, KeyEvent event) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_StartingKey" type="" overloaded="no">
-        <autodoc>base_StartingKey(self, KeyEvent event)</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_StartingClick" type="" overloaded="no">
-        <autodoc>base_StartingClick(self)</autodoc>
-      </method>
-      <method name="base_HandleReturn" type="" overloaded="no">
-        <autodoc>base_HandleReturn(self, KeyEvent event)</autodoc>
-        <paramlist>
-          <param name="event" type="KeyEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_Destroy" type="" overloaded="no">
-        <autodoc>base_Destroy(self)</autodoc>
-      </method>
-      <method name="base_SetParameters" type="" overloaded="no">
-        <autodoc>base_SetParameters(self, String params)</autodoc>
-        <paramlist>
-          <param name="params" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridCellTextEditor" oldname="wxGridCellTextEditor" module="grid">
-      <baseclass name="GridCellEditor"/>
-      <constructor name="GridCellTextEditor" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellTextEditor</autodoc>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellNumberEditor" oldname="wxGridCellNumberEditor" module="grid">
-      <baseclass name="GridCellTextEditor"/>
-      <constructor name="GridCellNumberEditor" overloaded="no">
-        <autodoc>__init__(self, int min=-1, int max=-1) -&gt; GridCellNumberEditor</autodoc>
-        <paramlist>
-          <param name="min" type="int" default="-1"/>
-          <param name="max" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellFloatEditor" oldname="wxGridCellFloatEditor" module="grid">
-      <baseclass name="GridCellTextEditor"/>
-      <constructor name="GridCellFloatEditor" overloaded="no">
-        <autodoc>__init__(self, int width=-1, int precision=-1) -&gt; GridCellFloatEditor</autodoc>
-        <paramlist>
-          <param name="width" type="int" default="-1"/>
-          <param name="precision" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellBoolEditor" oldname="wxGridCellBoolEditor" module="grid">
-      <baseclass name="GridCellEditor"/>
-      <constructor name="GridCellBoolEditor" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellBoolEditor</autodoc>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellChoiceEditor" oldname="wxGridCellChoiceEditor" module="grid">
-      <baseclass name="GridCellEditor"/>
-      <constructor name="GridCellChoiceEditor" overloaded="no">
-        <autodoc>__init__(self, int choices=0, String choices_array=None, bool allowOthers=False) -&gt; GridCellChoiceEditor</autodoc>
-        <paramlist>
-          <param name="choices" type="int" default="0"/>
-          <param name="choices_array" type="String" default="NULL"/>
-          <param name="allowOthers" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellEnumEditor" oldname="wxGridCellEnumEditor" module="grid">
-      <baseclass name="GridCellChoiceEditor"/>
-      <constructor name="GridCellEnumEditor" overloaded="no">
-        <autodoc>__init__(self, String choices=EmptyString) -&gt; GridCellEnumEditor</autodoc>
-        <paramlist>
-          <param name="choices" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellAutoWrapStringEditor" oldname="wxGridCellAutoWrapStringEditor" module="grid">
-      <baseclass name="GridCellTextEditor"/>
-      <constructor name="GridCellAutoWrapStringEditor" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellAutoWrapStringEditor</autodoc>
-      </constructor>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-    </class>
-    <class name="GridCellAttr" oldname="wxGridCellAttr" module="grid">
-      <constructor name="GridCellAttr" overloaded="no">
-        <autodoc>__init__(self, GridCellAttr attrDefault=None) -&gt; GridCellAttr</autodoc>
-        <paramlist>
-          <param name="attrDefault" type="GridCellAttr" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clone" type="GridCellAttr" overloaded="no">
-        <autodoc>Clone(self) -&gt; GridCellAttr</autodoc>
-      </method>
-      <method name="MergeWith" type="" overloaded="no">
-        <autodoc>MergeWith(self, GridCellAttr mergefrom)</autodoc>
-        <paramlist>
-          <param name="mergefrom" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="IncRef" type="" overloaded="no">
-        <autodoc>IncRef(self)</autodoc>
-      </method>
-      <method name="DecRef" type="" overloaded="no">
-        <autodoc>DecRef(self)</autodoc>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colText)</autodoc>
-        <paramlist>
-          <param name="colText" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colBack)</autodoc>
-        <paramlist>
-          <param name="colBack" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int hAlign, int vAlign)</autodoc>
-        <paramlist>
-          <param name="hAlign" type="int" default=""/>
-          <param name="vAlign" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, int num_rows, int num_cols)</autodoc>
-        <paramlist>
-          <param name="num_rows" type="int" default=""/>
-          <param name="num_cols" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOverflow" type="" overloaded="no">
-        <autodoc>SetOverflow(self, bool allow=True)</autodoc>
-        <paramlist>
-          <param name="allow" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetReadOnly" type="" overloaded="no">
-        <autodoc>SetReadOnly(self, bool isReadOnly=True)</autodoc>
-        <paramlist>
-          <param name="isReadOnly" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetRenderer" type="" overloaded="no">
-        <autodoc>SetRenderer(self, GridCellRenderer renderer)</autodoc>
-        <paramlist>
-          <param name="renderer" type="GridCellRenderer" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEditor" type="" overloaded="no">
-        <autodoc>SetEditor(self, GridCellEditor editor)</autodoc>
-        <paramlist>
-          <param name="editor" type="GridCellEditor" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetKind" type="" overloaded="no">
-        <autodoc>SetKind(self, int kind)</autodoc>
-        <paramlist>
-          <param name="kind" type="wxGridCellAttr::wxAttrKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasTextColour" type="bool" overloaded="no">
-        <autodoc>HasTextColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasBackgroundColour" type="bool" overloaded="no">
-        <autodoc>HasBackgroundColour(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasFont" type="bool" overloaded="no">
-        <autodoc>HasFont(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasAlignment" type="bool" overloaded="no">
-        <autodoc>HasAlignment(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasRenderer" type="bool" overloaded="no">
-        <autodoc>HasRenderer(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasEditor" type="bool" overloaded="no">
-        <autodoc>HasEditor(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasReadWriteMode" type="bool" overloaded="no">
-        <autodoc>HasReadWriteMode(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasOverflowMode" type="bool" overloaded="no">
-        <autodoc>HasOverflowMode(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetTextColour" type="Colour" overloaded="no">
-        <autodoc>GetTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetAlignment" type="" overloaded="no">
-        <autodoc>GetAlignment() -&gt; (hAlign, vAlign)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="" overloaded="no">
-        <autodoc>GetSize() -&gt; (num_rows, num_cols)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOverflow" type="bool" overloaded="no">
-        <autodoc>GetOverflow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetRenderer" type="GridCellRenderer" overloaded="no">
-        <autodoc>GetRenderer(self, Grid grid, int row, int col) -&gt; GridCellRenderer</autodoc>
-        <paramlist>
-          <param name="grid" type="wxGrid" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEditor" type="GridCellEditor" overloaded="no">
-        <autodoc>GetEditor(self, Grid grid, int row, int col) -&gt; GridCellEditor</autodoc>
-        <paramlist>
-          <param name="grid" type="wxGrid" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsReadOnly" type="bool" overloaded="no">
-        <autodoc>IsReadOnly(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetKind" type="wxGridCellAttr::wxAttrKind" overloaded="no">
-        <autodoc>GetKind(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetDefAttr" type="" overloaded="no">
-        <autodoc>SetDefAttr(self, GridCellAttr defAttr)</autodoc>
-        <paramlist>
-          <param name="defAttr" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridCellAttrProvider" oldname="wxGridCellAttrProvider" module="grid">
-      <constructor name="GridCellAttrProvider" overloaded="no">
-        <autodoc>__init__(self) -&gt; GridCellAttrProvider</autodoc>
-      </constructor>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttr" type="GridCellAttr" overloaded="no">
-        <autodoc>GetAttr(self, int row, int col, int kind) -&gt; GridCellAttr</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="kind" type="wxGridCellAttr::wxAttrKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttr" type="" overloaded="no">
-        <autodoc>SetAttr(self, GridCellAttr attr, int row, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowAttr" type="" overloaded="no">
-        <autodoc>SetRowAttr(self, GridCellAttr attr, int row)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColAttr" type="" overloaded="no">
-        <autodoc>SetColAttr(self, GridCellAttr attr, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="UpdateAttrRows" type="" overloaded="no">
-        <autodoc>UpdateAttrRows(self, size_t pos, int numRows)</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="numRows" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="UpdateAttrCols" type="" overloaded="no">
-        <autodoc>UpdateAttrCols(self, size_t pos, int numCols)</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default=""/>
-          <param name="numCols" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyGridCellAttrProvider" oldname="wxPyGridCellAttrProvider" module="grid">
-      <baseclass name="GridCellAttrProvider"/>
-      <constructor name="PyGridCellAttrProvider" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyGridCellAttrProvider</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetAttr" type="GridCellAttr" overloaded="no">
-        <autodoc>base_GetAttr(self, int row, int col, int kind) -&gt; GridCellAttr</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="kind" type="wxGridCellAttr::wxAttrKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetAttr" type="" overloaded="no">
-        <autodoc>base_SetAttr(self, GridCellAttr attr, int row, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetRowAttr" type="" overloaded="no">
-        <autodoc>base_SetRowAttr(self, GridCellAttr attr, int row)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetColAttr" type="" overloaded="no">
-        <autodoc>base_SetColAttr(self, GridCellAttr attr, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridTableBase" oldname="wxGridTableBase" module="grid">
-      <baseclass name="Object"/>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttrProvider" type="" overloaded="no">
-        <autodoc>SetAttrProvider(self, GridCellAttrProvider attrProvider)</autodoc>
-        <paramlist>
-          <param name="attrProvider" type="GridCellAttrProvider" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttrProvider" type="GridCellAttrProvider" overloaded="no">
-        <autodoc>GetAttrProvider(self) -&gt; GridCellAttrProvider</autodoc>
-      </method>
-      <method name="SetView" type="" overloaded="no">
-        <autodoc>SetView(self, Grid grid)</autodoc>
-        <paramlist>
-          <param name="grid" type="wxGrid" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetView" type="wxGrid" overloaded="no">
-        <autodoc>GetView(self) -&gt; Grid</autodoc>
-      </method>
-      <method name="GetNumberRows" type="int" overloaded="no">
-        <autodoc>GetNumberRows(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNumberCols" type="int" overloaded="no">
-        <autodoc>GetNumberCols(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsEmptyCell" type="bool" overloaded="no">
-        <autodoc>IsEmptyCell(self, int row, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self, int row, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, int row, int col, String value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTypeName" type="String" overloaded="no">
-        <autodoc>GetTypeName(self, int row, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanGetValueAs" type="bool" overloaded="no">
-        <autodoc>CanGetValueAs(self, int row, int col, String typeName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanSetValueAs" type="bool" overloaded="no">
-        <autodoc>CanSetValueAs(self, int row, int col, String typeName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValueAsLong" type="long" overloaded="no">
-        <autodoc>GetValueAsLong(self, int row, int col) -&gt; long</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValueAsDouble" type="double" overloaded="no">
-        <autodoc>GetValueAsDouble(self, int row, int col) -&gt; double</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetValueAsBool" type="bool" overloaded="no">
-        <autodoc>GetValueAsBool(self, int row, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValueAsLong" type="" overloaded="no">
-        <autodoc>SetValueAsLong(self, int row, int col, long value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValueAsDouble" type="" overloaded="no">
-        <autodoc>SetValueAsDouble(self, int row, int col, double value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValueAsBool" type="" overloaded="no">
-        <autodoc>SetValueAsBool(self, int row, int col, bool value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="InsertRows" type="bool" overloaded="no">
-        <autodoc>InsertRows(self, size_t pos=0, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="AppendRows" type="bool" overloaded="no">
-        <autodoc>AppendRows(self, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="DeleteRows" type="bool" overloaded="no">
-        <autodoc>DeleteRows(self, size_t pos=0, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="InsertCols" type="bool" overloaded="no">
-        <autodoc>InsertCols(self, size_t pos=0, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="AppendCols" type="bool" overloaded="no">
-        <autodoc>AppendCols(self, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="DeleteCols" type="bool" overloaded="no">
-        <autodoc>DeleteCols(self, size_t pos=0, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="GetRowLabelValue" type="String" overloaded="no">
-        <autodoc>GetRowLabelValue(self, int row) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColLabelValue" type="String" overloaded="no">
-        <autodoc>GetColLabelValue(self, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowLabelValue" type="" overloaded="no">
-        <autodoc>SetRowLabelValue(self, int row, String value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColLabelValue" type="" overloaded="no">
-        <autodoc>SetColLabelValue(self, int col, String value)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanHaveAttributes" type="bool" overloaded="no">
-        <autodoc>CanHaveAttributes(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetAttr" type="GridCellAttr" overloaded="no">
-        <autodoc>GetAttr(self, int row, int col, int kind) -&gt; GridCellAttr</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="kind" type="wxGridCellAttr::wxAttrKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttr" type="" overloaded="no">
-        <autodoc>SetAttr(self, GridCellAttr attr, int row, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowAttr" type="" overloaded="no">
-        <autodoc>SetRowAttr(self, GridCellAttr attr, int row)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColAttr" type="" overloaded="no">
-        <autodoc>SetColAttr(self, GridCellAttr attr, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyGridTableBase" oldname="wxPyGridTableBase" module="grid">
-      <baseclass name="GridTableBase"/>
-      <constructor name="PyGridTableBase" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyGridTableBase</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Destroy" type="" overloaded="no">
-        <autodoc>Destroy(self)</autodoc>
-        <docstring>Deletes the C++ object this Python object is a proxy for.</docstring>
-      </method>
-      <method name="base_GetTypeName" type="String" overloaded="no">
-        <autodoc>base_GetTypeName(self, int row, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_CanGetValueAs" type="bool" overloaded="no">
-        <autodoc>base_CanGetValueAs(self, int row, int col, String typeName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_CanSetValueAs" type="bool" overloaded="no">
-        <autodoc>base_CanSetValueAs(self, int row, int col, String typeName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_Clear" type="" overloaded="no">
-        <autodoc>base_Clear(self)</autodoc>
-      </method>
-      <method name="base_InsertRows" type="bool" overloaded="no">
-        <autodoc>base_InsertRows(self, size_t pos=0, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_AppendRows" type="bool" overloaded="no">
-        <autodoc>base_AppendRows(self, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_DeleteRows" type="bool" overloaded="no">
-        <autodoc>base_DeleteRows(self, size_t pos=0, size_t numRows=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numRows" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_InsertCols" type="bool" overloaded="no">
-        <autodoc>base_InsertCols(self, size_t pos=0, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_AppendCols" type="bool" overloaded="no">
-        <autodoc>base_AppendCols(self, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_DeleteCols" type="bool" overloaded="no">
-        <autodoc>base_DeleteCols(self, size_t pos=0, size_t numCols=1) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="size_t" default="0"/>
-          <param name="numCols" type="size_t" default="1"/>
-        </paramlist>
-      </method>
-      <method name="base_GetRowLabelValue" type="String" overloaded="no">
-        <autodoc>base_GetRowLabelValue(self, int row) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_GetColLabelValue" type="String" overloaded="no">
-        <autodoc>base_GetColLabelValue(self, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetRowLabelValue" type="" overloaded="no">
-        <autodoc>base_SetRowLabelValue(self, int row, String value)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetColLabelValue" type="" overloaded="no">
-        <autodoc>base_SetColLabelValue(self, int col, String value)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_CanHaveAttributes" type="bool" overloaded="no">
-        <autodoc>base_CanHaveAttributes(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetAttr" type="GridCellAttr" overloaded="no">
-        <autodoc>base_GetAttr(self, int row, int col, int kind) -&gt; GridCellAttr</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="kind" type="wxGridCellAttr::wxAttrKind" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetAttr" type="" overloaded="no">
-        <autodoc>base_SetAttr(self, GridCellAttr attr, int row, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetRowAttr" type="" overloaded="no">
-        <autodoc>base_SetRowAttr(self, GridCellAttr attr, int row)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_SetColAttr" type="" overloaded="no">
-        <autodoc>base_SetColAttr(self, GridCellAttr attr, int col)</autodoc>
-        <paramlist>
-          <param name="attr" type="GridCellAttr" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="GridStringTable" oldname="wxGridStringTable" module="grid">
-      <baseclass name="GridTableBase"/>
-      <constructor name="GridStringTable" overloaded="no">
-        <autodoc>__init__(self, int numRows=0, int numCols=0) -&gt; GridStringTable</autodoc>
-        <paramlist>
-          <param name="numRows" type="int" default="0"/>
-          <param name="numCols" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="GridTableMessage" oldname="wxGridTableMessage" module="grid">
-      <constructor name="GridTableMessage" overloaded="no">
-        <autodoc>__init__(self, GridTableBase table, int id, int comInt1=-1, int comInt2=-1) -&gt; GridTableMessage</autodoc>
-        <paramlist>
-          <param name="table" type="GridTableBase" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="comInt1" type="int" default="-1"/>
-          <param name="comInt2" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxGridTableMessage" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetTableObject" type="" overloaded="no">
-        <autodoc>SetTableObject(self, GridTableBase table)</autodoc>
-        <paramlist>
-          <param name="table" type="GridTableBase" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTableObject" type="GridTableBase" overloaded="no">
-        <autodoc>GetTableObject(self) -&gt; GridTableBase</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, int id)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="int" overloaded="no">
-        <autodoc>GetId(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCommandInt" type="" overloaded="no">
-        <autodoc>SetCommandInt(self, int comInt1)</autodoc>
-        <paramlist>
-          <param name="comInt1" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCommandInt" type="int" overloaded="no">
-        <autodoc>GetCommandInt(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCommandInt2" type="" overloaded="no">
-        <autodoc>SetCommandInt2(self, int comInt2)</autodoc>
-        <paramlist>
-          <param name="comInt2" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCommandInt2" type="int" overloaded="no">
-        <autodoc>GetCommandInt2(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="GridCellCoords" oldname="wxGridCellCoords" module="grid">
-      <constructor name="GridCellCoords" overloaded="no">
-        <autodoc>__init__(self, int r=-1, int c=-1) -&gt; GridCellCoords</autodoc>
-        <paramlist>
-          <param name="r" type="int" default="-1"/>
-          <param name="c" type="int" default="-1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxGridCellCoords" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="GetRow" type="int" overloaded="no">
-        <autodoc>GetRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRow" type="" overloaded="no">
-        <autodoc>SetRow(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCol" type="int" overloaded="no">
-        <autodoc>GetCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCol" type="" overloaded="no">
-        <autodoc>SetCol(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, int row, int col)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="__eq__" type="bool" overloaded="no">
-        <autodoc>__eq__(self, GridCellCoords other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GridCellCoords" default=""/>
-        </paramlist>
-      </method>
-      <method name="__ne__" type="bool" overloaded="no">
-        <autodoc>__ne__(self, GridCellCoords other) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="other" type="GridCellCoords" default=""/>
-        </paramlist>
-      </method>
-      <method name="Get" type="PyObject" overloaded="no">
-        <autodoc>Get(self) -&gt; PyObject</autodoc>
-      </method>
-    </class>
-    <class name="Grid" oldname="wxGrid" module="grid">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="Grid" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=WANTS_CHARS, 
-    String name=PanelNameStr) -&gt; Grid</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxWANTS_CHARS"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreGrid" overloaded="no">
-        <autodoc>PreGrid() -&gt; Grid</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=WANTS_CHARS, 
-    String name=PanelNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxWANTS_CHARS"/>
-          <param name="name" type="String" default="wxPyPanelNameStr"/>
-        </paramlist>
-      </method>
-      <method name="CreateGrid" type="bool" overloaded="no">
-        <autodoc>CreateGrid(self, int numRows, int numCols, WXGRIDSELECTIONMODES selmode=wxGridSelectCells) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numRows" type="int" default=""/>
-          <param name="numCols" type="int" default=""/>
-          <param name="selmode" type="WXGRIDSELECTIONMODES" default="wxGrid::wxGridSelectCells"/>
-        </paramlist>
-      </method>
-      <method name="SetSelectionMode" type="" overloaded="no">
-        <autodoc>SetSelectionMode(self, WXGRIDSELECTIONMODES selmode)</autodoc>
-        <paramlist>
-          <param name="selmode" type="WXGRIDSELECTIONMODES" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionMode" type="WXGRIDSELECTIONMODES" overloaded="no">
-        <autodoc>GetSelectionMode(self) -&gt; WXGRIDSELECTIONMODES</autodoc>
-      </method>
-      <method name="GetNumberRows" type="int" overloaded="no">
-        <autodoc>GetNumberRows(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetNumberCols" type="int" overloaded="no">
-        <autodoc>GetNumberCols(self) -&gt; int</autodoc>
-      </method>
-      <method name="ProcessTableMessage" type="bool" overloaded="no">
-        <autodoc>ProcessTableMessage(self, GridTableMessage ??) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="" type="GridTableMessage" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTable" type="GridTableBase" overloaded="no">
-        <autodoc>GetTable(self) -&gt; GridTableBase</autodoc>
-      </method>
-      <method name="SetTable" type="bool" overloaded="no">
-        <autodoc>SetTable(self, GridTableBase table, bool takeOwnership=False, WXGRIDSELECTIONMODES selmode=wxGridSelectCells) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="table" type="GridTableBase" default=""/>
-          <param name="takeOwnership" type="bool" default="False"/>
-          <param name="selmode" type="WXGRIDSELECTIONMODES" default="wxGrid::wxGridSelectCells"/>
-        </paramlist>
-      </method>
-      <method name="ClearGrid" type="" overloaded="no">
-        <autodoc>ClearGrid(self)</autodoc>
-      </method>
-      <method name="InsertRows" type="bool" overloaded="no">
-        <autodoc>InsertRows(self, int pos=0, int numRows=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-          <param name="numRows" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AppendRows" type="bool" overloaded="no">
-        <autodoc>AppendRows(self, int numRows=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numRows" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DeleteRows" type="bool" overloaded="no">
-        <autodoc>DeleteRows(self, int pos=0, int numRows=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-          <param name="numRows" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="InsertCols" type="bool" overloaded="no">
-        <autodoc>InsertCols(self, int pos=0, int numCols=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-          <param name="numCols" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AppendCols" type="bool" overloaded="no">
-        <autodoc>AppendCols(self, int numCols=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="numCols" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DeleteCols" type="bool" overloaded="no">
-        <autodoc>DeleteCols(self, int pos=0, int numCols=1, bool updateLabels=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-          <param name="numCols" type="int" default="1"/>
-          <param name="updateLabels" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DrawCellHighlight" type="" overloaded="no">
-        <autodoc>DrawCellHighlight(self, DC dc, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="attr" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawTextRectangle" type="" overloaded="no">
-        <autodoc>DrawTextRectangle(self, DC dc, String ??, Rect ??, int horizontalAlignment=LEFT, 
-    int verticalAlignment=TOP, int textOrientation=HORIZONTAL)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="" type="String" default=""/>
-          <param name="" type="Rect" default=""/>
-          <param name="horizontalAlignment" type="int" default="wxLEFT"/>
-          <param name="verticalAlignment" type="int" default="wxTOP"/>
-          <param name="textOrientation" type="int" default="wxHORIZONTAL"/>
-        </paramlist>
-      </method>
-      <method name="GetTextBoxSize" type="" overloaded="no">
-        <autodoc>GetTextBoxSize(DC dc, list lines) -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="lines" type="wxArrayString" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-          <param name="OUTPUT" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="BeginBatch" type="" overloaded="no">
-        <autodoc>BeginBatch(self)</autodoc>
-      </method>
-      <method name="EndBatch" type="" overloaded="no">
-        <autodoc>EndBatch(self)</autodoc>
-      </method>
-      <method name="GetBatchCount" type="int" overloaded="no">
-        <autodoc>GetBatchCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="ForceRefresh" type="" overloaded="no">
-        <autodoc>ForceRefresh(self)</autodoc>
-      </method>
-      <method name="IsEditable" type="bool" overloaded="no">
-        <autodoc>IsEditable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EnableEditing" type="" overloaded="no">
-        <autodoc>EnableEditing(self, bool edit)</autodoc>
-        <paramlist>
-          <param name="edit" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableCellEditControl" type="" overloaded="no">
-        <autodoc>EnableCellEditControl(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DisableCellEditControl" type="" overloaded="no">
-        <autodoc>DisableCellEditControl(self)</autodoc>
-      </method>
-      <method name="CanEnableCellControl" type="bool" overloaded="no">
-        <autodoc>CanEnableCellControl(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsCellEditControlEnabled" type="bool" overloaded="no">
-        <autodoc>IsCellEditControlEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsCellEditControlShown" type="bool" overloaded="no">
-        <autodoc>IsCellEditControlShown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsCurrentCellReadOnly" type="bool" overloaded="no">
-        <autodoc>IsCurrentCellReadOnly(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShowCellEditControl" type="" overloaded="no">
-        <autodoc>ShowCellEditControl(self)</autodoc>
-      </method>
-      <method name="HideCellEditControl" type="" overloaded="no">
-        <autodoc>HideCellEditControl(self)</autodoc>
-      </method>
-      <method name="SaveEditControlValue" type="" overloaded="no">
-        <autodoc>SaveEditControlValue(self)</autodoc>
-      </method>
-      <method name="XYToCell" type="GridCellCoords" overloaded="no">
-        <autodoc>XYToCell(self, int x, int y) -&gt; GridCellCoords</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="YToRow" type="int" overloaded="no">
-        <autodoc>YToRow(self, int y) -&gt; int</autodoc>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="XToCol" type="int" overloaded="no">
-        <autodoc>XToCol(self, int x) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="YToEdgeOfRow" type="int" overloaded="no">
-        <autodoc>YToEdgeOfRow(self, int y) -&gt; int</autodoc>
-        <paramlist>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="XToEdgeOfCol" type="int" overloaded="no">
-        <autodoc>XToEdgeOfCol(self, int x) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CellToRect" type="Rect" overloaded="no">
-        <autodoc>CellToRect(self, int row, int col) -&gt; Rect</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetGridCursorRow" type="int" overloaded="no">
-        <autodoc>GetGridCursorRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetGridCursorCol" type="int" overloaded="no">
-        <autodoc>GetGridCursorCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsVisible" type="bool" overloaded="no">
-        <autodoc>IsVisible(self, int row, int col, bool wholeCellVisible=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="wholeCellVisible" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="MakeCellVisible" type="" overloaded="no">
-        <autodoc>MakeCellVisible(self, int row, int col)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetGridCursor" type="" overloaded="no">
-        <autodoc>SetGridCursor(self, int row, int col)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorUp" type="bool" overloaded="no">
-        <autodoc>MoveCursorUp(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorDown" type="bool" overloaded="no">
-        <autodoc>MoveCursorDown(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorLeft" type="bool" overloaded="no">
-        <autodoc>MoveCursorLeft(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorRight" type="bool" overloaded="no">
-        <autodoc>MoveCursorRight(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MovePageDown" type="bool" overloaded="no">
-        <autodoc>MovePageDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MovePageUp" type="bool" overloaded="no">
-        <autodoc>MovePageUp(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MoveCursorUpBlock" type="bool" overloaded="no">
-        <autodoc>MoveCursorUpBlock(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorDownBlock" type="bool" overloaded="no">
-        <autodoc>MoveCursorDownBlock(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorLeftBlock" type="bool" overloaded="no">
-        <autodoc>MoveCursorLeftBlock(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="MoveCursorRightBlock" type="bool" overloaded="no">
-        <autodoc>MoveCursorRightBlock(self, bool expandSelection) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="expandSelection" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultRowLabelSize" type="int" overloaded="no">
-        <autodoc>GetDefaultRowLabelSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRowLabelSize" type="int" overloaded="no">
-        <autodoc>GetRowLabelSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDefaultColLabelSize" type="int" overloaded="no">
-        <autodoc>GetDefaultColLabelSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetColLabelSize" type="int" overloaded="no">
-        <autodoc>GetColLabelSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLabelBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetLabelBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetLabelTextColour" type="Colour" overloaded="no">
-        <autodoc>GetLabelTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetLabelFont" type="Font" overloaded="no">
-        <autodoc>GetLabelFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetRowLabelAlignment" type="" overloaded="no">
-        <autodoc>GetRowLabelAlignment() -&gt; (horiz, vert)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColLabelAlignment" type="" overloaded="no">
-        <autodoc>GetColLabelAlignment() -&gt; (horiz, vert)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColLabelTextOrientation" type="int" overloaded="no">
-        <autodoc>GetColLabelTextOrientation(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRowLabelValue" type="String" overloaded="no">
-        <autodoc>GetRowLabelValue(self, int row) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColLabelValue" type="String" overloaded="no">
-        <autodoc>GetColLabelValue(self, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetGridLineColour" type="Colour" overloaded="no">
-        <autodoc>GetGridLineColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetCellHighlightColour" type="Colour" overloaded="no">
-        <autodoc>GetCellHighlightColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetCellHighlightPenWidth" type="int" overloaded="no">
-        <autodoc>GetCellHighlightPenWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCellHighlightROPenWidth" type="int" overloaded="no">
-        <autodoc>GetCellHighlightROPenWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRowLabelSize" type="" overloaded="no">
-        <autodoc>SetRowLabelSize(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColLabelSize" type="" overloaded="no">
-        <autodoc>SetColLabelSize(self, int height)</autodoc>
-        <paramlist>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabelBackgroundColour" type="" overloaded="no">
-        <autodoc>SetLabelBackgroundColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabelTextColour" type="" overloaded="no">
-        <autodoc>SetLabelTextColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLabelFont" type="" overloaded="no">
-        <autodoc>SetLabelFont(self, Font ??)</autodoc>
-        <paramlist>
-          <param name="" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowLabelAlignment" type="" overloaded="no">
-        <autodoc>SetRowLabelAlignment(self, int horiz, int vert)</autodoc>
-        <paramlist>
-          <param name="horiz" type="int" default=""/>
-          <param name="vert" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColLabelAlignment" type="" overloaded="no">
-        <autodoc>SetColLabelAlignment(self, int horiz, int vert)</autodoc>
-        <paramlist>
-          <param name="horiz" type="int" default=""/>
-          <param name="vert" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColLabelTextOrientation" type="" overloaded="no">
-        <autodoc>SetColLabelTextOrientation(self, int textOrientation)</autodoc>
-        <paramlist>
-          <param name="textOrientation" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowLabelValue" type="" overloaded="no">
-        <autodoc>SetRowLabelValue(self, int row, String ??)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColLabelValue" type="" overloaded="no">
-        <autodoc>SetColLabelValue(self, int col, String ??)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetGridLineColour" type="" overloaded="no">
-        <autodoc>SetGridLineColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellHighlightColour" type="" overloaded="no">
-        <autodoc>SetCellHighlightColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellHighlightPenWidth" type="" overloaded="no">
-        <autodoc>SetCellHighlightPenWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellHighlightROPenWidth" type="" overloaded="no">
-        <autodoc>SetCellHighlightROPenWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableDragRowSize" type="" overloaded="no">
-        <autodoc>EnableDragRowSize(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DisableDragRowSize" type="" overloaded="no">
-        <autodoc>DisableDragRowSize(self)</autodoc>
-      </method>
-      <method name="CanDragRowSize" type="bool" overloaded="no">
-        <autodoc>CanDragRowSize(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EnableDragColSize" type="" overloaded="no">
-        <autodoc>EnableDragColSize(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DisableDragColSize" type="" overloaded="no">
-        <autodoc>DisableDragColSize(self)</autodoc>
-      </method>
-      <method name="CanDragColSize" type="bool" overloaded="no">
-        <autodoc>CanDragColSize(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EnableDragGridSize" type="" overloaded="no">
-        <autodoc>EnableDragGridSize(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DisableDragGridSize" type="" overloaded="no">
-        <autodoc>DisableDragGridSize(self)</autodoc>
-      </method>
-      <method name="CanDragGridSize" type="bool" overloaded="no">
-        <autodoc>CanDragGridSize(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EnableDragCell" type="" overloaded="no">
-        <autodoc>EnableDragCell(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="DisableDragCell" type="" overloaded="no">
-        <autodoc>DisableDragCell(self)</autodoc>
-      </method>
-      <method name="CanDragCell" type="bool" overloaded="no">
-        <autodoc>CanDragCell(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetAttr" type="" overloaded="no">
-        <autodoc>SetAttr(self, int row, int col, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="attr" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowAttr" type="" overloaded="no">
-        <autodoc>SetRowAttr(self, int row, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="attr" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColAttr" type="" overloaded="no">
-        <autodoc>SetColAttr(self, int col, GridCellAttr attr)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="attr" type="GridCellAttr" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColFormatBool" type="" overloaded="no">
-        <autodoc>SetColFormatBool(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColFormatNumber" type="" overloaded="no">
-        <autodoc>SetColFormatNumber(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColFormatFloat" type="" overloaded="no">
-        <autodoc>SetColFormatFloat(self, int col, int width=-1, int precision=-1)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="width" type="int" default="-1"/>
-          <param name="precision" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetColFormatCustom" type="" overloaded="no">
-        <autodoc>SetColFormatCustom(self, int col, String typeName)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnableGridLines" type="" overloaded="no">
-        <autodoc>EnableGridLines(self, bool enable=True)</autodoc>
-        <paramlist>
-          <param name="enable" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GridLinesEnabled" type="bool" overloaded="no">
-        <autodoc>GridLinesEnabled(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetDefaultRowSize" type="int" overloaded="no">
-        <autodoc>GetDefaultRowSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRowSize" type="int" overloaded="no">
-        <autodoc>GetRowSize(self, int row) -&gt; int</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultColSize" type="int" overloaded="no">
-        <autodoc>GetDefaultColSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetColSize" type="int" overloaded="no">
-        <autodoc>GetColSize(self, int col) -&gt; int</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultCellBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetDefaultCellBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetCellBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetCellBackgroundColour(self, int row, int col) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultCellTextColour" type="Colour" overloaded="no">
-        <autodoc>GetDefaultCellTextColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetCellTextColour" type="Colour" overloaded="no">
-        <autodoc>GetCellTextColour(self, int row, int col) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultCellFont" type="Font" overloaded="no">
-        <autodoc>GetDefaultCellFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetCellFont" type="Font" overloaded="no">
-        <autodoc>GetCellFont(self, int row, int col) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultCellAlignment" type="" overloaded="no">
-        <autodoc>GetDefaultCellAlignment() -&gt; (horiz, vert)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCellAlignment" type="" overloaded="no">
-        <autodoc>GetCellAlignment() -&gt; (horiz, vert)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultCellOverflow" type="bool" overloaded="no">
-        <autodoc>GetDefaultCellOverflow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetCellOverflow" type="bool" overloaded="no">
-        <autodoc>GetCellOverflow(self, int row, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCellSize" type="" overloaded="no">
-        <autodoc>GetCellSize(int row, int col) -&gt; (num_rows, num_cols)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultRowSize" type="" overloaded="no">
-        <autodoc>SetDefaultRowSize(self, int height, bool resizeExistingRows=False)</autodoc>
-        <paramlist>
-          <param name="height" type="int" default=""/>
-          <param name="resizeExistingRows" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SetRowSize" type="" overloaded="no">
-        <autodoc>SetRowSize(self, int row, int height)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultColSize" type="" overloaded="no">
-        <autodoc>SetDefaultColSize(self, int width, bool resizeExistingCols=False)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="resizeExistingCols" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SetColSize" type="" overloaded="no">
-        <autodoc>SetColSize(self, int col, int width)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoSizeColumn" type="" overloaded="no">
-        <autodoc>AutoSizeColumn(self, int col, bool setAsMin=True)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="setAsMin" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AutoSizeRow" type="" overloaded="no">
-        <autodoc>AutoSizeRow(self, int row, bool setAsMin=True)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="setAsMin" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AutoSizeColumns" type="" overloaded="no">
-        <autodoc>AutoSizeColumns(self, bool setAsMin=True)</autodoc>
-        <paramlist>
-          <param name="setAsMin" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AutoSizeRows" type="" overloaded="no">
-        <autodoc>AutoSizeRows(self, bool setAsMin=True)</autodoc>
-        <paramlist>
-          <param name="setAsMin" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="AutoSize" type="" overloaded="no">
-        <autodoc>AutoSize(self)</autodoc>
-      </method>
-      <method name="AutoSizeRowLabelSize" type="" overloaded="no">
-        <autodoc>AutoSizeRowLabelSize(self, int row)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoSizeColLabelSize" type="" overloaded="no">
-        <autodoc>AutoSizeColLabelSize(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColMinimalWidth" type="" overloaded="no">
-        <autodoc>SetColMinimalWidth(self, int col, int width)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowMinimalHeight" type="" overloaded="no">
-        <autodoc>SetRowMinimalHeight(self, int row, int width)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColMinimalAcceptableWidth" type="" overloaded="no">
-        <autodoc>SetColMinimalAcceptableWidth(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRowMinimalAcceptableHeight" type="" overloaded="no">
-        <autodoc>SetRowMinimalAcceptableHeight(self, int width)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColMinimalAcceptableWidth" type="int" overloaded="no">
-        <autodoc>GetColMinimalAcceptableWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRowMinimalAcceptableHeight" type="int" overloaded="no">
-        <autodoc>GetRowMinimalAcceptableHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetDefaultCellBackgroundColour" type="" overloaded="no">
-        <autodoc>SetDefaultCellBackgroundColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellBackgroundColour" type="" overloaded="no">
-        <autodoc>SetCellBackgroundColour(self, int row, int col, Colour ??)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultCellTextColour" type="" overloaded="no">
-        <autodoc>SetDefaultCellTextColour(self, Colour ??)</autodoc>
-        <paramlist>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellTextColour" type="" overloaded="no">
-        <autodoc>SetCellTextColour(self, int row, int col, Colour ??)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultCellFont" type="" overloaded="no">
-        <autodoc>SetDefaultCellFont(self, Font ??)</autodoc>
-        <paramlist>
-          <param name="" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellFont" type="" overloaded="no">
-        <autodoc>SetCellFont(self, int row, int col, Font ??)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultCellAlignment" type="" overloaded="no">
-        <autodoc>SetDefaultCellAlignment(self, int horiz, int vert)</autodoc>
-        <paramlist>
-          <param name="horiz" type="int" default=""/>
-          <param name="vert" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellAlignment" type="" overloaded="no">
-        <autodoc>SetCellAlignment(self, int row, int col, int horiz, int vert)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="horiz" type="int" default=""/>
-          <param name="vert" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultCellOverflow" type="" overloaded="no">
-        <autodoc>SetDefaultCellOverflow(self, bool allow)</autodoc>
-        <paramlist>
-          <param name="allow" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellOverflow" type="" overloaded="no">
-        <autodoc>SetCellOverflow(self, int row, int col, bool allow)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="allow" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellSize" type="" overloaded="no">
-        <autodoc>SetCellSize(self, int row, int col, int num_rows, int num_cols)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="num_rows" type="int" default=""/>
-          <param name="num_cols" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultRenderer" type="" overloaded="no">
-        <autodoc>SetDefaultRenderer(self, GridCellRenderer renderer)</autodoc>
-        <paramlist>
-          <param name="renderer" type="GridCellRenderer" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellRenderer" type="" overloaded="no">
-        <autodoc>SetCellRenderer(self, int row, int col, GridCellRenderer renderer)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="renderer" type="GridCellRenderer" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultRenderer" type="GridCellRenderer" overloaded="no">
-        <autodoc>GetDefaultRenderer(self) -&gt; GridCellRenderer</autodoc>
-      </method>
-      <method name="GetCellRenderer" type="GridCellRenderer" overloaded="no">
-        <autodoc>GetCellRenderer(self, int row, int col) -&gt; GridCellRenderer</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDefaultEditor" type="" overloaded="no">
-        <autodoc>SetDefaultEditor(self, GridCellEditor editor)</autodoc>
-        <paramlist>
-          <param name="editor" type="GridCellEditor" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellEditor" type="" overloaded="no">
-        <autodoc>SetCellEditor(self, int row, int col, GridCellEditor editor)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="editor" type="GridCellEditor" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultEditor" type="GridCellEditor" overloaded="no">
-        <autodoc>GetDefaultEditor(self) -&gt; GridCellEditor</autodoc>
-      </method>
-      <method name="GetCellEditor" type="GridCellEditor" overloaded="no">
-        <autodoc>GetCellEditor(self, int row, int col) -&gt; GridCellEditor</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCellValue" type="String" overloaded="no">
-        <autodoc>GetCellValue(self, int row, int col) -&gt; String</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCellValue" type="" overloaded="no">
-        <autodoc>SetCellValue(self, int row, int col, String s)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsReadOnly" type="bool" overloaded="no">
-        <autodoc>IsReadOnly(self, int row, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetReadOnly" type="" overloaded="no">
-        <autodoc>SetReadOnly(self, int row, int col, bool isReadOnly=True)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="isReadOnly" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SelectRow" type="" overloaded="no">
-        <autodoc>SelectRow(self, int row, bool addToSelected=False)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="addToSelected" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SelectCol" type="" overloaded="no">
-        <autodoc>SelectCol(self, int col, bool addToSelected=False)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-          <param name="addToSelected" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SelectBlock" type="" overloaded="no">
-        <autodoc>SelectBlock(self, int topRow, int leftCol, int bottomRow, int rightCol, 
-    bool addToSelected=False)</autodoc>
-        <paramlist>
-          <param name="topRow" type="int" default=""/>
-          <param name="leftCol" type="int" default=""/>
-          <param name="bottomRow" type="int" default=""/>
-          <param name="rightCol" type="int" default=""/>
-          <param name="addToSelected" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="" overloaded="no">
-        <autodoc>SelectAll(self)</autodoc>
-      </method>
-      <method name="IsSelection" type="bool" overloaded="no">
-        <autodoc>IsSelection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ClearSelection" type="" overloaded="no">
-        <autodoc>ClearSelection(self)</autodoc>
-      </method>
-      <method name="IsInSelection" type="bool" overloaded="no">
-        <autodoc>IsInSelection(self, int row, int col) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedCells" type="wxGridCellCoordsArray" overloaded="no">
-        <autodoc>GetSelectedCells(self) -&gt; wxGridCellCoordsArray</autodoc>
-      </method>
-      <method name="GetSelectionBlockTopLeft" type="wxGridCellCoordsArray" overloaded="no">
-        <autodoc>GetSelectionBlockTopLeft(self) -&gt; wxGridCellCoordsArray</autodoc>
-      </method>
-      <method name="GetSelectionBlockBottomRight" type="wxGridCellCoordsArray" overloaded="no">
-        <autodoc>GetSelectionBlockBottomRight(self) -&gt; wxGridCellCoordsArray</autodoc>
-      </method>
-      <method name="GetSelectedRows" type="wxArrayInt" overloaded="no">
-        <autodoc>GetSelectedRows(self) -&gt; wxArrayInt</autodoc>
-      </method>
-      <method name="GetSelectedCols" type="wxArrayInt" overloaded="no">
-        <autodoc>GetSelectedCols(self) -&gt; wxArrayInt</autodoc>
-      </method>
-      <method name="DeselectRow" type="" overloaded="no">
-        <autodoc>DeselectRow(self, int row)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeselectCol" type="" overloaded="no">
-        <autodoc>DeselectCol(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeselectCell" type="" overloaded="no">
-        <autodoc>DeselectCell(self, int row, int col)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="BlockToDeviceRect" type="Rect" overloaded="no">
-        <autodoc>BlockToDeviceRect(self, GridCellCoords topLeft, GridCellCoords bottomRight) -&gt; Rect</autodoc>
-        <paramlist>
-          <param name="topLeft" type="GridCellCoords" default=""/>
-          <param name="bottomRight" type="GridCellCoords" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionBackground" type="Colour" overloaded="no">
-        <autodoc>GetSelectionBackground(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetSelectionForeground" type="Colour" overloaded="no">
-        <autodoc>GetSelectionForeground(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetSelectionBackground" type="" overloaded="no">
-        <autodoc>SetSelectionBackground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelectionForeground" type="" overloaded="no">
-        <autodoc>SetSelectionForeground(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="RegisterDataType" type="" overloaded="no">
-        <autodoc>RegisterDataType(self, String typeName, GridCellRenderer renderer, GridCellEditor editor)</autodoc>
-        <paramlist>
-          <param name="typeName" type="String" default=""/>
-          <param name="renderer" type="GridCellRenderer" default=""/>
-          <param name="editor" type="GridCellEditor" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultEditorForCell" type="GridCellEditor" overloaded="no">
-        <autodoc>GetDefaultEditorForCell(self, int row, int col) -&gt; GridCellEditor</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultRendererForCell" type="GridCellRenderer" overloaded="no">
-        <autodoc>GetDefaultRendererForCell(self, int row, int col) -&gt; GridCellRenderer</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultEditorForType" type="GridCellEditor" overloaded="no">
-        <autodoc>GetDefaultEditorForType(self, String typeName) -&gt; GridCellEditor</autodoc>
-        <paramlist>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDefaultRendererForType" type="GridCellRenderer" overloaded="no">
-        <autodoc>GetDefaultRendererForType(self, String typeName) -&gt; GridCellRenderer</autodoc>
-        <paramlist>
-          <param name="typeName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, int extraWidth, int extraHeight)</autodoc>
-        <paramlist>
-          <param name="extraWidth" type="int" default=""/>
-          <param name="extraHeight" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetGridWindow" type="Window" overloaded="no">
-        <autodoc>GetGridWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetGridRowLabelWindow" type="Window" overloaded="no">
-        <autodoc>GetGridRowLabelWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetGridColLabelWindow" type="Window" overloaded="no">
-        <autodoc>GetGridColLabelWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetGridCornerLabelWindow" type="Window" overloaded="no">
-        <autodoc>GetGridCornerLabelWindow(self) -&gt; Window</autodoc>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="GridEvent" oldname="wxGridEvent" module="grid">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="GridEvent" overloaded="no">
-        <autodoc>__init__(self, int id, wxEventType type, Grid obj, int row=-1, int col=-1, 
-    int x=-1, int y=-1, bool sel=True, bool control=False, 
-    bool shift=False, bool alt=False, 
-    bool meta=False) -&gt; GridEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="type" type="wxEventType" default=""/>
-          <param name="obj" type="Grid" default=""/>
-          <param name="row" type="int" default="-1"/>
-          <param name="col" type="int" default="-1"/>
-          <param name="x" type="int" default="-1"/>
-          <param name="y" type="int" default="-1"/>
-          <param name="sel" type="bool" default="True"/>
-          <param name="control" type="bool" default="False"/>
-          <param name="shift" type="bool" default="False"/>
-          <param name="alt" type="bool" default="False"/>
-          <param name="meta" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <method name="GetRow" type="int" overloaded="no">
-        <autodoc>GetRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCol" type="int" overloaded="no">
-        <autodoc>GetCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="Selecting" type="bool" overloaded="no">
-        <autodoc>Selecting(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ControlDown" type="bool" overloaded="no">
-        <autodoc>ControlDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MetaDown" type="bool" overloaded="no">
-        <autodoc>MetaDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShiftDown" type="bool" overloaded="no">
-        <autodoc>ShiftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AltDown" type="bool" overloaded="no">
-        <autodoc>AltDown(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="GridSizeEvent" oldname="wxGridSizeEvent" module="grid">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="GridSizeEvent" overloaded="no">
-        <autodoc>__init__(self, int id, wxEventType type, Grid obj, int rowOrCol=-1, 
-    int x=-1, int y=-1, bool control=False, bool shift=False, 
-    bool alt=False, bool meta=False) -&gt; GridSizeEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="type" type="wxEventType" default=""/>
-          <param name="obj" type="Grid" default=""/>
-          <param name="rowOrCol" type="int" default="-1"/>
-          <param name="x" type="int" default="-1"/>
-          <param name="y" type="int" default="-1"/>
-          <param name="control" type="bool" default="False"/>
-          <param name="shift" type="bool" default="False"/>
-          <param name="alt" type="bool" default="False"/>
-          <param name="meta" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <method name="GetRowOrCol" type="int" overloaded="no">
-        <autodoc>GetRowOrCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; Point</autodoc>
-      </method>
-      <method name="ControlDown" type="bool" overloaded="no">
-        <autodoc>ControlDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MetaDown" type="bool" overloaded="no">
-        <autodoc>MetaDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShiftDown" type="bool" overloaded="no">
-        <autodoc>ShiftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AltDown" type="bool" overloaded="no">
-        <autodoc>AltDown(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="GridRangeSelectEvent" oldname="wxGridRangeSelectEvent" module="grid">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="GridRangeSelectEvent" overloaded="no">
-        <autodoc>__init__(self, int id, wxEventType type, Grid obj, GridCellCoords topLeft, 
-    GridCellCoords bottomRight, bool sel=True, 
-    bool control=False, bool shift=False, 
-    bool alt=False, bool meta=False) -&gt; GridRangeSelectEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="type" type="wxEventType" default=""/>
-          <param name="obj" type="Grid" default=""/>
-          <param name="topLeft" type="GridCellCoords" default=""/>
-          <param name="bottomRight" type="GridCellCoords" default=""/>
-          <param name="sel" type="bool" default="True"/>
-          <param name="control" type="bool" default="False"/>
-          <param name="shift" type="bool" default="False"/>
-          <param name="alt" type="bool" default="False"/>
-          <param name="meta" type="bool" default="False"/>
-        </paramlist>
-      </constructor>
-      <method name="GetTopLeftCoords" type="GridCellCoords" overloaded="no">
-        <autodoc>GetTopLeftCoords(self) -&gt; GridCellCoords</autodoc>
-      </method>
-      <method name="GetBottomRightCoords" type="GridCellCoords" overloaded="no">
-        <autodoc>GetBottomRightCoords(self) -&gt; GridCellCoords</autodoc>
-      </method>
-      <method name="GetTopRow" type="int" overloaded="no">
-        <autodoc>GetTopRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetBottomRow" type="int" overloaded="no">
-        <autodoc>GetBottomRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLeftCol" type="int" overloaded="no">
-        <autodoc>GetLeftCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetRightCol" type="int" overloaded="no">
-        <autodoc>GetRightCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="Selecting" type="bool" overloaded="no">
-        <autodoc>Selecting(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ControlDown" type="bool" overloaded="no">
-        <autodoc>ControlDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MetaDown" type="bool" overloaded="no">
-        <autodoc>MetaDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShiftDown" type="bool" overloaded="no">
-        <autodoc>ShiftDown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AltDown" type="bool" overloaded="no">
-        <autodoc>AltDown(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="GridEditorCreatedEvent" oldname="wxGridEditorCreatedEvent" module="grid">
-      <baseclass name="CommandEvent"/>
-      <constructor name="GridEditorCreatedEvent" overloaded="no">
-        <autodoc>__init__(self, int id, wxEventType type, Object obj, int row, int col, 
-    Control ctrl) -&gt; GridEditorCreatedEvent</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-          <param name="type" type="wxEventType" default=""/>
-          <param name="obj" type="Object" default=""/>
-          <param name="row" type="int" default=""/>
-          <param name="col" type="int" default=""/>
-          <param name="ctrl" type="Control" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetRow" type="int" overloaded="no">
-        <autodoc>GetRow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCol" type="int" overloaded="no">
-        <autodoc>GetCol(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetControl" type="Control" overloaded="no">
-        <autodoc>GetControl(self) -&gt; Control</autodoc>
-      </method>
-      <method name="SetRow" type="" overloaded="no">
-        <autodoc>SetRow(self, int row)</autodoc>
-        <paramlist>
-          <param name="row" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCol" type="" overloaded="no">
-        <autodoc>SetCol(self, int col)</autodoc>
-        <paramlist>
-          <param name="col" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetControl" type="" overloaded="no">
-        <autodoc>SetControl(self, Control ctrl)</autodoc>
-        <paramlist>
-          <param name="ctrl" type="Control" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-EVT_GRID_CELL_LEFT_CLICK = wx.PyEventBinder( wxEVT_GRID_CELL_LEFT_CLICK )
-EVT_GRID_CELL_RIGHT_CLICK = wx.PyEventBinder( wxEVT_GRID_CELL_RIGHT_CLICK )
-EVT_GRID_CELL_LEFT_DCLICK = wx.PyEventBinder( wxEVT_GRID_CELL_LEFT_DCLICK )
-EVT_GRID_CELL_RIGHT_DCLICK = wx.PyEventBinder( wxEVT_GRID_CELL_RIGHT_DCLICK )
-EVT_GRID_LABEL_LEFT_CLICK = wx.PyEventBinder( wxEVT_GRID_LABEL_LEFT_CLICK )
-EVT_GRID_LABEL_RIGHT_CLICK = wx.PyEventBinder( wxEVT_GRID_LABEL_RIGHT_CLICK )
-EVT_GRID_LABEL_LEFT_DCLICK = wx.PyEventBinder( wxEVT_GRID_LABEL_LEFT_DCLICK )
-EVT_GRID_LABEL_RIGHT_DCLICK = wx.PyEventBinder( wxEVT_GRID_LABEL_RIGHT_DCLICK )
-EVT_GRID_ROW_SIZE = wx.PyEventBinder( wxEVT_GRID_ROW_SIZE )
-EVT_GRID_COL_SIZE = wx.PyEventBinder( wxEVT_GRID_COL_SIZE )
-EVT_GRID_RANGE_SELECT = wx.PyEventBinder( wxEVT_GRID_RANGE_SELECT )
-EVT_GRID_CELL_CHANGE = wx.PyEventBinder( wxEVT_GRID_CELL_CHANGE )
-EVT_GRID_SELECT_CELL = wx.PyEventBinder( wxEVT_GRID_SELECT_CELL )
-EVT_GRID_EDITOR_SHOWN = wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN )
-EVT_GRID_EDITOR_HIDDEN = wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN )
-EVT_GRID_EDITOR_CREATED = wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED )
-EVT_GRID_CELL_BEGIN_DRAG = wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG )
-
-
-# The same as above but with the ability to specify an identifier
-EVT_GRID_CMD_CELL_LEFT_CLICK =     wx.PyEventBinder( wxEVT_GRID_CELL_LEFT_CLICK,    1 )
-EVT_GRID_CMD_CELL_RIGHT_CLICK =    wx.PyEventBinder( wxEVT_GRID_CELL_RIGHT_CLICK,   1 )
-EVT_GRID_CMD_CELL_LEFT_DCLICK =    wx.PyEventBinder( wxEVT_GRID_CELL_LEFT_DCLICK,   1 )
-EVT_GRID_CMD_CELL_RIGHT_DCLICK =   wx.PyEventBinder( wxEVT_GRID_CELL_RIGHT_DCLICK,  1 )
-EVT_GRID_CMD_LABEL_LEFT_CLICK =    wx.PyEventBinder( wxEVT_GRID_LABEL_LEFT_CLICK,   1 )
-EVT_GRID_CMD_LABEL_RIGHT_CLICK =   wx.PyEventBinder( wxEVT_GRID_LABEL_RIGHT_CLICK,  1 )
-EVT_GRID_CMD_LABEL_LEFT_DCLICK =   wx.PyEventBinder( wxEVT_GRID_LABEL_LEFT_DCLICK,  1 )
-EVT_GRID_CMD_LABEL_RIGHT_DCLICK =  wx.PyEventBinder( wxEVT_GRID_LABEL_RIGHT_DCLICK, 1 )
-EVT_GRID_CMD_ROW_SIZE =            wx.PyEventBinder( wxEVT_GRID_ROW_SIZE,           1 )
-EVT_GRID_CMD_COL_SIZE =            wx.PyEventBinder( wxEVT_GRID_COL_SIZE,           1 )
-EVT_GRID_CMD_RANGE_SELECT =        wx.PyEventBinder( wxEVT_GRID_RANGE_SELECT,       1 )
-EVT_GRID_CMD_CELL_CHANGE =         wx.PyEventBinder( wxEVT_GRID_CELL_CHANGE,        1 )
-EVT_GRID_CMD_SELECT_CELL =         wx.PyEventBinder( wxEVT_GRID_SELECT_CELL,        1 )
-EVT_GRID_CMD_EDITOR_SHOWN =        wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN,       1 )
-EVT_GRID_CMD_EDITOR_HIDDEN =       wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN,      1 )
-EVT_GRID_CMD_EDITOR_CREATED =      wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED,     1 )
-EVT_GRID_CMD_CELL_BEGIN_DRAG =     wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG,    1 )
-    
-</pythoncode>
-  </module>
-  <module name="html">
-    <import name="_windows"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlLinkInfo" oldname="wxHtmlLinkInfo" module="html">
-      <baseclass name="Object"/>
-      <constructor name="HtmlLinkInfo" overloaded="no">
-        <autodoc>__init__(self, String href, String target=EmptyString) -&gt; HtmlLinkInfo</autodoc>
-        <paramlist>
-          <param name="href" type="String" default=""/>
-          <param name="target" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <method name="GetHref" type="String" overloaded="no">
-        <autodoc>GetHref(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetTarget" type="String" overloaded="no">
-        <autodoc>GetTarget(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetEvent" type="MouseEvent" overloaded="no">
-        <autodoc>GetEvent(self) -&gt; MouseEvent</autodoc>
-      </method>
-      <method name="GetHtmlCell" type="wxHtmlCell" overloaded="no">
-        <autodoc>GetHtmlCell(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="SetEvent" type="" overloaded="no">
-        <autodoc>SetEvent(self, MouseEvent e)</autodoc>
-        <paramlist>
-          <param name="e" type="MouseEvent" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHtmlCell" type="" overloaded="no">
-        <autodoc>SetHtmlCell(self, HtmlCell e)</autodoc>
-        <paramlist>
-          <param name="e" type="wxHtmlCell" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlTag" oldname="wxHtmlTag" module="html">
-      <baseclass name="Object"/>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="HasParam" type="bool" overloaded="no">
-        <autodoc>HasParam(self, String par) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="par" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParam" type="String" overloaded="no">
-        <autodoc>GetParam(self, String par, int with_commas=False) -&gt; String</autodoc>
-        <paramlist>
-          <param name="par" type="String" default=""/>
-          <param name="with_commas" type="int" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetAllParams" type="String" overloaded="no">
-        <autodoc>GetAllParams(self) -&gt; String</autodoc>
-      </method>
-      <method name="HasEnding" type="bool" overloaded="no">
-        <autodoc>HasEnding(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetBeginPos" type="int" overloaded="no">
-        <autodoc>GetBeginPos(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetEndPos1" type="int" overloaded="no">
-        <autodoc>GetEndPos1(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetEndPos2" type="int" overloaded="no">
-        <autodoc>GetEndPos2(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="HtmlParser" oldname="wxHtmlParser" module="html">
-      <baseclass name="Object"/>
-      <method name="SetFS" type="" overloaded="no">
-        <autodoc>SetFS(self, FileSystem fs)</autodoc>
-        <paramlist>
-          <param name="fs" type="FileSystem" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFS" type="FileSystem" overloaded="no">
-        <autodoc>GetFS(self) -&gt; FileSystem</autodoc>
-      </method>
-      <method name="Parse" type="Object" overloaded="no">
-        <autodoc>Parse(self, String source) -&gt; Object</autodoc>
-        <paramlist>
-          <param name="source" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="InitParser" type="" overloaded="no">
-        <autodoc>InitParser(self, String source)</autodoc>
-        <paramlist>
-          <param name="source" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoneParser" type="" overloaded="no">
-        <autodoc>DoneParser(self)</autodoc>
-      </method>
-      <method name="DoParsing" type="" overloaded="no">
-        <autodoc>DoParsing(self, int begin_pos, int end_pos)</autodoc>
-        <paramlist>
-          <param name="begin_pos" type="int" default=""/>
-          <param name="end_pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StopParsing" type="" overloaded="no">
-        <autodoc>StopParsing(self)</autodoc>
-      </method>
-      <method name="AddTagHandler" type="" overloaded="no">
-        <autodoc>AddTagHandler(self, HtmlTagHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="wxHtmlTagHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSource" type="String" overloaded="no">
-        <autodoc>GetSource(self) -&gt; String</autodoc>
-      </method>
-      <method name="PushTagHandler" type="" overloaded="no">
-        <autodoc>PushTagHandler(self, HtmlTagHandler handler, String tags)</autodoc>
-        <paramlist>
-          <param name="handler" type="wxHtmlTagHandler" default=""/>
-          <param name="tags" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="PopTagHandler" type="" overloaded="no">
-        <autodoc>PopTagHandler(self)</autodoc>
-      </method>
-    </class>
-    <class name="HtmlWinParser" oldname="wxHtmlWinParser" module="html">
-      <baseclass name="HtmlParser"/>
-      <constructor name="HtmlWinParser" overloaded="no">
-        <autodoc>__init__(self, HtmlWindow wnd=None) -&gt; HtmlWinParser</autodoc>
-        <paramlist>
-          <param name="wnd" type="wxPyHtmlWindow" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="SetDC" type="" overloaded="no">
-        <autodoc>SetDC(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDC" type="DC" overloaded="no">
-        <autodoc>GetDC(self) -&gt; DC</autodoc>
-      </method>
-      <method name="GetCharHeight" type="int" overloaded="no">
-        <autodoc>GetCharHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCharWidth" type="int" overloaded="no">
-        <autodoc>GetCharWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWindow" type="wxPyHtmlWindow" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; HtmlWindow</autodoc>
-      </method>
-      <method name="SetFonts" type="" overloaded="no">
-        <autodoc>SetFonts(self, String normal_face, String fixed_face, PyObject sizes=None)</autodoc>
-        <paramlist>
-          <param name="normal_face" type="String" default=""/>
-          <param name="fixed_face" type="String" default=""/>
-          <param name="sizes" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="NormalizeFontSizes" type="" overloaded="no">
-        <autodoc>NormalizeFontSizes(self, int size=-1)</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetContainer" type="wxHtmlContainerCell" overloaded="no">
-        <autodoc>GetContainer(self) -&gt; HtmlContainerCell</autodoc>
-      </method>
-      <method name="OpenContainer" type="wxHtmlContainerCell" overloaded="no">
-        <autodoc>OpenContainer(self) -&gt; HtmlContainerCell</autodoc>
-      </method>
-      <method name="SetContainer" type="wxHtmlContainerCell" overloaded="no">
-        <autodoc>SetContainer(self, HtmlContainerCell c) -&gt; HtmlContainerCell</autodoc>
-        <paramlist>
-          <param name="c" type="wxHtmlContainerCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="CloseContainer" type="wxHtmlContainerCell" overloaded="no">
-        <autodoc>CloseContainer(self) -&gt; HtmlContainerCell</autodoc>
-      </method>
-      <method name="GetFontSize" type="int" overloaded="no">
-        <autodoc>GetFontSize(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFontSize" type="" overloaded="no">
-        <autodoc>SetFontSize(self, int s)</autodoc>
-        <paramlist>
-          <param name="s" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFontBold" type="int" overloaded="no">
-        <autodoc>GetFontBold(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFontBold" type="" overloaded="no">
-        <autodoc>SetFontBold(self, int x)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFontItalic" type="int" overloaded="no">
-        <autodoc>GetFontItalic(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFontItalic" type="" overloaded="no">
-        <autodoc>SetFontItalic(self, int x)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFontUnderlined" type="int" overloaded="no">
-        <autodoc>GetFontUnderlined(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFontUnderlined" type="" overloaded="no">
-        <autodoc>SetFontUnderlined(self, int x)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFontFixed" type="int" overloaded="no">
-        <autodoc>GetFontFixed(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFontFixed" type="" overloaded="no">
-        <autodoc>SetFontFixed(self, int x)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlign" type="int" overloaded="no">
-        <autodoc>GetAlign(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetAlign" type="" overloaded="no">
-        <autodoc>SetAlign(self, int a)</autodoc>
-        <paramlist>
-          <param name="a" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLinkColor" type="Colour" overloaded="no">
-        <autodoc>GetLinkColor(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetLinkColor" type="" overloaded="no">
-        <autodoc>SetLinkColor(self, Colour clr)</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetActualColor" type="Colour" overloaded="no">
-        <autodoc>GetActualColor(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetActualColor" type="" overloaded="no">
-        <autodoc>SetActualColor(self, Colour clr)</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLink" type="" overloaded="no">
-        <autodoc>SetLink(self, String link)</autodoc>
-        <paramlist>
-          <param name="link" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateCurrentFont" type="Font" overloaded="no">
-        <autodoc>CreateCurrentFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetLink" type="HtmlLinkInfo" overloaded="no">
-        <autodoc>GetLink(self) -&gt; HtmlLinkInfo</autodoc>
-      </method>
-    </class>
-    <class name="HtmlTagHandler" oldname="wxPyHtmlTagHandler" module="html">
-      <baseclass name="Object"/>
-      <constructor name="wxPyHtmlTagHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlTagHandler</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParser" type="" overloaded="no">
-        <autodoc>SetParser(self, HtmlParser parser)</autodoc>
-        <paramlist>
-          <param name="parser" type="HtmlParser" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParser" type="HtmlParser" overloaded="no">
-        <autodoc>GetParser(self) -&gt; HtmlParser</autodoc>
-      </method>
-      <method name="ParseInner" type="" overloaded="no">
-        <autodoc>ParseInner(self, HtmlTag tag)</autodoc>
-        <paramlist>
-          <param name="tag" type="HtmlTag" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlWinTagHandler" oldname="wxPyHtmlWinTagHandler" module="html">
-      <baseclass name="HtmlTagHandler"/>
-      <constructor name="wxPyHtmlWinTagHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlWinTagHandler</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParser" type="" overloaded="no">
-        <autodoc>SetParser(self, HtmlParser parser)</autodoc>
-        <paramlist>
-          <param name="parser" type="HtmlParser" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParser" type="HtmlWinParser" overloaded="no">
-        <autodoc>GetParser(self) -&gt; HtmlWinParser</autodoc>
-      </method>
-      <method name="ParseInner" type="" overloaded="no">
-        <autodoc>ParseInner(self, HtmlTag tag)</autodoc>
-        <paramlist>
-          <param name="tag" type="HtmlTag" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <method name="HtmlWinParser_AddTagHandler" oldname="wxHtmlWinParser_AddTagHandler" type="" overloaded="no">
-      <autodoc>HtmlWinParser_AddTagHandler(PyObject tagHandlerClass)</autodoc>
-      <paramlist>
-        <param name="tagHandlerClass" type="PyObject" default=""/>
-      </paramlist>
-    </method>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlSelection" oldname="wxHtmlSelection" module="html">
-      <constructor name="HtmlSelection" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlSelection</autodoc>
-      </constructor>
-      <destructor name="~wxHtmlSelection" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Set" type="" overloaded="no">
-        <autodoc>Set(self, Point fromPos, HtmlCell fromCell, Point toPos, HtmlCell toCell)</autodoc>
-        <paramlist>
-          <param name="fromPos" type="Point" default=""/>
-          <param name="fromCell" type="wxHtmlCell" default=""/>
-          <param name="toPos" type="Point" default=""/>
-          <param name="toCell" type="wxHtmlCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCells" type="" overloaded="no">
-        <autodoc>SetCells(self, HtmlCell fromCell, HtmlCell toCell)</autodoc>
-        <paramlist>
-          <param name="fromCell" type="wxHtmlCell" default=""/>
-          <param name="toCell" type="wxHtmlCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFromCell" type="wxHtmlCell" overloaded="no">
-        <autodoc>GetFromCell(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetToCell" type="wxHtmlCell" overloaded="no">
-        <autodoc>GetToCell(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetFromPos" type="Point" overloaded="no">
-        <autodoc>GetFromPos(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetToPos" type="Point" overloaded="no">
-        <autodoc>GetToPos(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetFromPrivPos" type="Point" overloaded="no">
-        <autodoc>GetFromPrivPos(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetToPrivPos" type="Point" overloaded="no">
-        <autodoc>GetToPrivPos(self) -&gt; Point</autodoc>
-      </method>
-      <method name="SetFromPrivPos" type="" overloaded="no">
-        <autodoc>SetFromPrivPos(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetToPrivPos" type="" overloaded="no">
-        <autodoc>SetToPrivPos(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearPrivPos" type="" overloaded="no">
-        <autodoc>ClearPrivPos(self)</autodoc>
-      </method>
-      <method name="IsEmpty" type="bool" overloaded="no">
-        <autodoc>IsEmpty(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="HtmlRenderingState" oldname="wxHtmlRenderingState" module="html">
-      <constructor name="HtmlRenderingState" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlRenderingState</autodoc>
-      </constructor>
-      <destructor name="~wxHtmlRenderingState" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetSelectionState" type="" overloaded="no">
-        <autodoc>SetSelectionState(self, int s)</autodoc>
-        <paramlist>
-          <param name="s" type="wxHtmlSelectionState" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionState" type="wxHtmlSelectionState" overloaded="no">
-        <autodoc>GetSelectionState(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFgColour" type="" overloaded="no">
-        <autodoc>SetFgColour(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFgColour" type="Colour" overloaded="no">
-        <autodoc>GetFgColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetBgColour" type="" overloaded="no">
-        <autodoc>SetBgColour(self, Colour c)</autodoc>
-        <paramlist>
-          <param name="c" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBgColour" type="Colour" overloaded="no">
-        <autodoc>GetBgColour(self) -&gt; Colour</autodoc>
-      </method>
-    </class>
-    <class name="HtmlRenderingStyle" oldname="wxHtmlRenderingStyle" module="html">
-      <method name="GetSelectedTextColour" type="Colour" overloaded="no">
-        <autodoc>GetSelectedTextColour(self, Colour clr) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedTextBgColour" type="Colour" overloaded="no">
-        <autodoc>GetSelectedTextBgColour(self, Colour clr) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="DefaultHtmlRenderingStyle" oldname="wxDefaultHtmlRenderingStyle" module="html">
-      <baseclass name="HtmlRenderingStyle"/>
-      <method name="GetSelectedTextColour" type="Colour" overloaded="no">
-        <autodoc>GetSelectedTextColour(self, Colour clr) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedTextBgColour" type="Colour" overloaded="no">
-        <autodoc>GetSelectedTextBgColour(self, Colour clr) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlRenderingInfo" oldname="wxHtmlRenderingInfo" module="html">
-      <constructor name="HtmlRenderingInfo" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlRenderingInfo</autodoc>
-      </constructor>
-      <destructor name="~wxHtmlRenderingInfo" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, HtmlSelection s)</autodoc>
-        <paramlist>
-          <param name="s" type="HtmlSelection" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelection" type="HtmlSelection" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; HtmlSelection</autodoc>
-      </method>
-      <method name="SetStyle" type="" overloaded="no">
-        <autodoc>SetStyle(self, HtmlRenderingStyle style)</autodoc>
-        <paramlist>
-          <param name="style" type="HtmlRenderingStyle" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStyle" type="HtmlRenderingStyle" overloaded="no">
-        <autodoc>GetStyle(self) -&gt; HtmlRenderingStyle</autodoc>
-      </method>
-      <method name="GetState" type="HtmlRenderingState" overloaded="no">
-        <autodoc>GetState(self) -&gt; HtmlRenderingState</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlCell" oldname="wxHtmlCell" module="html">
-      <baseclass name="Object"/>
-      <constructor name="HtmlCell" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlCell</autodoc>
-      </constructor>
-      <method name="GetPosX" type="int" overloaded="no">
-        <autodoc>GetPosX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosY" type="int" overloaded="no">
-        <autodoc>GetPosY(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWidth" type="int" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetHeight" type="int" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDescent" type="int" overloaded="no">
-        <autodoc>GetDescent(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxTotalWidth" type="int" overloaded="no">
-        <autodoc>GetMaxTotalWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetId" type="String" overloaded="no">
-        <autodoc>GetId(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, String id)</autodoc>
-        <paramlist>
-          <param name="id" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLink" type="HtmlLinkInfo" overloaded="no">
-        <autodoc>GetLink(self, int x=0, int y=0) -&gt; HtmlLinkInfo</autodoc>
-        <paramlist>
-          <param name="x" type="int" default="0"/>
-          <param name="y" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetNext" type="HtmlCell" overloaded="no">
-        <autodoc>GetNext(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetParent" type="wxHtmlContainerCell" overloaded="no">
-        <autodoc>GetParent(self) -&gt; HtmlContainerCell</autodoc>
-      </method>
-      <method name="GetFirstChild" type="HtmlCell" overloaded="no">
-        <autodoc>GetFirstChild(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetCursor" type="Cursor" overloaded="no">
-        <autodoc>GetCursor(self) -&gt; Cursor</autodoc>
-      </method>
-      <method name="IsFormattingCell" type="bool" overloaded="no">
-        <autodoc>IsFormattingCell(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetLink" type="" overloaded="no">
-        <autodoc>SetLink(self, HtmlLinkInfo link)</autodoc>
-        <paramlist>
-          <param name="link" type="HtmlLinkInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNext" type="" overloaded="no">
-        <autodoc>SetNext(self, HtmlCell cell)</autodoc>
-        <paramlist>
-          <param name="cell" type="HtmlCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParent" type="" overloaded="no">
-        <autodoc>SetParent(self, HtmlContainerCell p)</autodoc>
-        <paramlist>
-          <param name="p" type="wxHtmlContainerCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPos" type="" overloaded="no">
-        <autodoc>SetPos(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Layout" type="" overloaded="no">
-        <autodoc>Layout(self, int w)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Draw" type="" overloaded="no">
-        <autodoc>Draw(self, DC dc, int x, int y, int view_y1, int view_y2, HtmlRenderingInfo info)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="view_y1" type="int" default=""/>
-          <param name="view_y2" type="int" default=""/>
-          <param name="info" type="HtmlRenderingInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawInvisible" type="" overloaded="no">
-        <autodoc>DrawInvisible(self, DC dc, int x, int y, HtmlRenderingInfo info)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="info" type="HtmlRenderingInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="Find" type="HtmlCell" overloaded="no">
-        <autodoc>Find(self, int condition, void param) -&gt; HtmlCell</autodoc>
-        <paramlist>
-          <param name="condition" type="int" default=""/>
-          <param name="param" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustPagebreak" type="bool" overloaded="no">
-        <autodoc>AdjustPagebreak(self, int INOUT) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="INOUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCanLiveOnPagebreak" type="" overloaded="no">
-        <autodoc>SetCanLiveOnPagebreak(self, bool can)</autodoc>
-        <paramlist>
-          <param name="can" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsLinebreakAllowed" type="bool" overloaded="no">
-        <autodoc>IsLinebreakAllowed(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsTerminalCell" type="bool" overloaded="no">
-        <autodoc>IsTerminalCell(self) -&gt; bool</autodoc>
-      </method>
-      <method name="FindCellByPos" type="HtmlCell" overloaded="no">
-        <autodoc>FindCellByPos(self, int x, int y, unsigned int flags=HTML_FIND_EXACT) -&gt; HtmlCell</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="flags" type="unsigned int" default="wxHTML_FIND_EXACT"/>
-        </paramlist>
-      </method>
-      <method name="GetAbsPos" type="Point" overloaded="no">
-        <autodoc>GetAbsPos(self) -&gt; Point</autodoc>
-      </method>
-      <method name="GetFirstTerminal" type="HtmlCell" overloaded="no">
-        <autodoc>GetFirstTerminal(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetLastTerminal" type="HtmlCell" overloaded="no">
-        <autodoc>GetLastTerminal(self) -&gt; HtmlCell</autodoc>
-      </method>
-      <method name="GetDepth" type="unsigned int" overloaded="no">
-        <autodoc>GetDepth(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="IsBefore" type="bool" overloaded="no">
-        <autodoc>IsBefore(self, HtmlCell cell) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="cell" type="HtmlCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="ConvertToText" type="String" overloaded="no">
-        <autodoc>ConvertToText(self, HtmlSelection sel) -&gt; String</autodoc>
-        <paramlist>
-          <param name="sel" type="HtmlSelection" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlWordCell" oldname="wxHtmlWordCell" module="html">
-      <baseclass name="HtmlCell"/>
-      <constructor name="HtmlWordCell" overloaded="no">
-        <autodoc>__init__(self, String word, DC dc) -&gt; HtmlWordCell</autodoc>
-        <paramlist>
-          <param name="word" type="String" default=""/>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="HtmlContainerCell" oldname="wxHtmlContainerCell" module="html">
-      <baseclass name="HtmlCell"/>
-      <constructor name="HtmlContainerCell" overloaded="no">
-        <autodoc>__init__(self, HtmlContainerCell parent) -&gt; HtmlContainerCell</autodoc>
-        <paramlist>
-          <param name="parent" type="HtmlContainerCell" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="InsertCell" type="" overloaded="no">
-        <autodoc>InsertCell(self, HtmlCell cell)</autodoc>
-        <paramlist>
-          <param name="cell" type="HtmlCell" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlignHor" type="" overloaded="no">
-        <autodoc>SetAlignHor(self, int al)</autodoc>
-        <paramlist>
-          <param name="al" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignHor" type="int" overloaded="no">
-        <autodoc>GetAlignHor(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetAlignVer" type="" overloaded="no">
-        <autodoc>SetAlignVer(self, int al)</autodoc>
-        <paramlist>
-          <param name="al" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignVer" type="int" overloaded="no">
-        <autodoc>GetAlignVer(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetIndent" type="" overloaded="no">
-        <autodoc>SetIndent(self, int i, int what, int units=HTML_UNITS_PIXELS)</autodoc>
-        <paramlist>
-          <param name="i" type="int" default=""/>
-          <param name="what" type="int" default=""/>
-          <param name="units" type="int" default="wxHTML_UNITS_PIXELS"/>
-        </paramlist>
-      </method>
-      <method name="GetIndent" type="int" overloaded="no">
-        <autodoc>GetIndent(self, int ind) -&gt; int</autodoc>
-        <paramlist>
-          <param name="ind" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetIndentUnits" type="int" overloaded="no">
-        <autodoc>GetIndentUnits(self, int ind) -&gt; int</autodoc>
-        <paramlist>
-          <param name="ind" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlign" type="" overloaded="no">
-        <autodoc>SetAlign(self, HtmlTag tag)</autodoc>
-        <paramlist>
-          <param name="tag" type="HtmlTag" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidthFloat" type="" overloaded="no">
-        <autodoc>SetWidthFloat(self, int w, int units)</autodoc>
-        <paramlist>
-          <param name="w" type="int" default=""/>
-          <param name="units" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidthFloatFromTag" type="" overloaded="no">
-        <autodoc>SetWidthFloatFromTag(self, HtmlTag tag)</autodoc>
-        <paramlist>
-          <param name="tag" type="HtmlTag" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinHeight" type="" overloaded="no">
-        <autodoc>SetMinHeight(self, int h, int align=HTML_ALIGN_TOP)</autodoc>
-        <paramlist>
-          <param name="h" type="int" default=""/>
-          <param name="align" type="int" default="wxHTML_ALIGN_TOP"/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour clr)</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetBackgroundColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetBorder" type="" overloaded="no">
-        <autodoc>SetBorder(self, Colour clr1, Colour clr2)</autodoc>
-        <paramlist>
-          <param name="clr1" type="Colour" default=""/>
-          <param name="clr2" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstChild" type="HtmlCell" overloaded="no">
-        <autodoc>GetFirstChild(self) -&gt; HtmlCell</autodoc>
-      </method>
-    </class>
-    <class name="HtmlColourCell" oldname="wxHtmlColourCell" module="html">
-      <baseclass name="HtmlCell"/>
-      <constructor name="HtmlColourCell" overloaded="no">
-        <autodoc>__init__(self, Colour clr, int flags=HTML_CLR_FOREGROUND) -&gt; HtmlColourCell</autodoc>
-        <paramlist>
-          <param name="clr" type="Colour" default=""/>
-          <param name="flags" type="int" default="wxHTML_CLR_FOREGROUND"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="HtmlFontCell" oldname="wxHtmlFontCell" module="html">
-      <baseclass name="HtmlCell"/>
-      <constructor name="HtmlFontCell" overloaded="no">
-        <autodoc>__init__(self, Font font) -&gt; HtmlFontCell</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="HtmlWidgetCell" oldname="wxHtmlWidgetCell" module="html">
-      <baseclass name="HtmlCell"/>
-      <constructor name="HtmlWidgetCell" overloaded="no">
-        <autodoc>__init__(self, Window wnd, int w=0) -&gt; HtmlWidgetCell</autodoc>
-        <paramlist>
-          <param name="wnd" type="Window" default=""/>
-          <param name="w" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlFilter" oldname="wxPyHtmlFilter" module="html">
-      <baseclass name="Object"/>
-      <constructor name="wxPyHtmlFilter" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlFilter</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlWindow" oldname="wxPyHtmlWindow" module="html">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="wxPyHtmlWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, int style=HW_DEFAULT_STYLE, 
-    String name=HtmlWindowNameStr) -&gt; HtmlWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="int" default="wxHW_DEFAULT_STYLE"/>
-          <param name="name" type="String" default="wxPyHtmlWindowNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreHtmlWindow" overloaded="no">
-        <autodoc>PreHtmlWindow() -&gt; HtmlWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, int style=HW_SCROLLBAR_AUTO, 
-    String name=HtmlWindowNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="int" default="wxHW_SCROLLBAR_AUTO"/>
-          <param name="name" type="String" default="wxPyHtmlWindowNameStr"/>
-        </paramlist>
-      </method>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPage" type="bool" overloaded="no">
-        <autodoc>SetPage(self, String source) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="source" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadPage" type="bool" overloaded="no">
-        <autodoc>LoadPage(self, String location) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="location" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AppendToPage" type="bool" overloaded="no">
-        <autodoc>AppendToPage(self, String source) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="source" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOpenedPage" type="String" overloaded="no">
-        <autodoc>GetOpenedPage(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetOpenedAnchor" type="String" overloaded="no">
-        <autodoc>GetOpenedAnchor(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetOpenedPageTitle" type="String" overloaded="no">
-        <autodoc>GetOpenedPageTitle(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetRelatedFrame" type="" overloaded="no">
-        <autodoc>SetRelatedFrame(self, Frame frame, String format)</autodoc>
-        <paramlist>
-          <param name="frame" type="Frame" default=""/>
-          <param name="format" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRelatedFrame" type="Frame" overloaded="no">
-        <autodoc>GetRelatedFrame(self) -&gt; Frame</autodoc>
-      </method>
-      <method name="SetRelatedStatusBar" type="" overloaded="no">
-        <autodoc>SetRelatedStatusBar(self, int bar)</autodoc>
-        <paramlist>
-          <param name="bar" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFonts" type="" overloaded="no">
-        <autodoc>SetFonts(self, String normal_face, String fixed_face, PyObject sizes=None)</autodoc>
-        <paramlist>
-          <param name="normal_face" type="String" default=""/>
-          <param name="fixed_face" type="String" default=""/>
-          <param name="sizes" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="NormalizeFontSizes" type="" overloaded="no">
-        <autodoc>NormalizeFontSizes(self, int size=-1)</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetTitle" type="" overloaded="no">
-        <autodoc>SetTitle(self, String title)</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBorders" type="" overloaded="no">
-        <autodoc>SetBorders(self, int b)</autodoc>
-        <paramlist>
-          <param name="b" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ReadCustomization" type="" overloaded="no">
-        <autodoc>ReadCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="WriteCustomization" type="" overloaded="no">
-        <autodoc>WriteCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="HistoryBack" type="bool" overloaded="no">
-        <autodoc>HistoryBack(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HistoryForward" type="bool" overloaded="no">
-        <autodoc>HistoryForward(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HistoryCanBack" type="bool" overloaded="no">
-        <autodoc>HistoryCanBack(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HistoryCanForward" type="bool" overloaded="no">
-        <autodoc>HistoryCanForward(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HistoryClear" type="" overloaded="no">
-        <autodoc>HistoryClear(self)</autodoc>
-      </method>
-      <method name="GetInternalRepresentation" type="HtmlContainerCell" overloaded="no">
-        <autodoc>GetInternalRepresentation(self) -&gt; HtmlContainerCell</autodoc>
-      </method>
-      <method name="GetParser" type="HtmlWinParser" overloaded="no">
-        <autodoc>GetParser(self) -&gt; HtmlWinParser</autodoc>
-      </method>
-      <method name="ScrollToAnchor" type="bool" overloaded="no">
-        <autodoc>ScrollToAnchor(self, String anchor) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="anchor" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasAnchor" type="bool" overloaded="no">
-        <autodoc>HasAnchor(self, String anchor) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="anchor" type="String" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="AddFilter" type="" overloaded="no">
-        <autodoc>AddFilter(HtmlFilter filter)</autodoc>
-        <paramlist>
-          <param name="filter" type="HtmlFilter" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="SelectWord" type="" overloaded="no">
-        <autodoc>SelectWord(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectLine" type="" overloaded="no">
-        <autodoc>SelectLine(self, Point pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="" overloaded="no">
-        <autodoc>SelectAll(self)</autodoc>
-      </method>
-      <method name="SelectionToText" type="String" overloaded="no">
-        <autodoc>SelectionToText(self) -&gt; String</autodoc>
-      </method>
-      <method name="ToText" type="String" overloaded="no">
-        <autodoc>ToText(self) -&gt; String</autodoc>
-      </method>
-      <method name="base_OnLinkClicked" type="" overloaded="no">
-        <autodoc>base_OnLinkClicked(self, HtmlLinkInfo link)</autodoc>
-        <paramlist>
-          <param name="link" type="HtmlLinkInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnSetTitle" type="" overloaded="no">
-        <autodoc>base_OnSetTitle(self, String title)</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnCellMouseHover" type="" overloaded="no">
-        <autodoc>base_OnCellMouseHover(self, HtmlCell cell, int x, int y)</autodoc>
-        <paramlist>
-          <param name="cell" type="HtmlCell" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnCellClicked" type="" overloaded="no">
-        <autodoc>base_OnCellClicked(self, HtmlCell cell, int x, int y, MouseEvent event)</autodoc>
-        <paramlist>
-          <param name="cell" type="HtmlCell" default=""/>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="event" type="MouseEvent" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetClassDefaultAttributes" type="VisualAttributes" overloaded="no">
-        <autodoc>GetClassDefaultAttributes(int variant=WINDOW_VARIANT_NORMAL) -&gt; VisualAttributes</autodoc>
-        <docstring>Get the default attributes for this class.  This is useful if you want
-to use the same font or colour in your own control as in a standard
-control -- which is a much better idea than hard coding specific
-colours or fonts which might look completely out of place on the
-user's system, especially if it uses themes.
-
-The variant parameter is only relevant under Mac currently and is
-ignore under other platforms. Under Mac, it will change the size of
-the returned font. See `wx.Window.SetWindowVariant` for more about
-this.</docstring>
-        <paramlist>
-          <param name="variant" type="wxWindowVariant" default="wxWINDOW_VARIANT_NORMAL"/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlDCRenderer" oldname="wxHtmlDCRenderer" module="html">
-      <baseclass name="Object"/>
-      <constructor name="HtmlDCRenderer" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlDCRenderer</autodoc>
-      </constructor>
-      <destructor name="~wxHtmlDCRenderer" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetDC" type="" overloaded="no">
-        <autodoc>SetDC(self, DC dc, int maxwidth)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="maxwidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHtmlText" type="" overloaded="no">
-        <autodoc>SetHtmlText(self, String html, String basepath=EmptyString, bool isdir=True)</autodoc>
-        <paramlist>
-          <param name="html" type="String" default=""/>
-          <param name="basepath" type="String" default="wxPyEmptyString"/>
-          <param name="isdir" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetFonts" type="" overloaded="no">
-        <autodoc>SetFonts(self, String normal_face, String fixed_face, PyObject sizes=None)</autodoc>
-        <paramlist>
-          <param name="normal_face" type="String" default=""/>
-          <param name="fixed_face" type="String" default=""/>
-          <param name="sizes" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="NormalizeFontSizes" type="" overloaded="no">
-        <autodoc>NormalizeFontSizes(self, int size=-1)</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="Render" type="int" overloaded="no">
-        <autodoc>Render(self, int x, int y, int from=0, int dont_render=False, int to=INT_MAX, 
-    int choices=None, int LCOUNT=0) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="from" type="int" default="0"/>
-          <param name="dont_render" type="int" default="False"/>
-          <param name="to" type="int" default="INT_MAX"/>
-          <param name="choices" type="int" default="NULL"/>
-          <param name="LCOUNT" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetTotalHeight" type="int" overloaded="no">
-        <autodoc>GetTotalHeight(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="HtmlPrintout" oldname="wxHtmlPrintout" module="html">
-      <baseclass name="Printout"/>
-      <constructor name="HtmlPrintout" overloaded="no">
-        <autodoc>__init__(self, String title=HtmlPrintoutTitleStr) -&gt; HtmlPrintout</autodoc>
-        <paramlist>
-          <param name="title" type="String" default="wxPyHtmlPrintoutTitleStr"/>
-        </paramlist>
-      </constructor>
-      <method name="SetHtmlText" type="" overloaded="no">
-        <autodoc>SetHtmlText(self, String html, String basepath=EmptyString, bool isdir=True)</autodoc>
-        <paramlist>
-          <param name="html" type="String" default=""/>
-          <param name="basepath" type="String" default="wxPyEmptyString"/>
-          <param name="isdir" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetHtmlFile" type="" overloaded="no">
-        <autodoc>SetHtmlFile(self, String htmlfile)</autodoc>
-        <paramlist>
-          <param name="htmlfile" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHeader" type="" overloaded="no">
-        <autodoc>SetHeader(self, String header, int pg=PAGE_ALL)</autodoc>
-        <paramlist>
-          <param name="header" type="String" default=""/>
-          <param name="pg" type="int" default="wxPAGE_ALL"/>
-        </paramlist>
-      </method>
-      <method name="SetFooter" type="" overloaded="no">
-        <autodoc>SetFooter(self, String footer, int pg=PAGE_ALL)</autodoc>
-        <paramlist>
-          <param name="footer" type="String" default=""/>
-          <param name="pg" type="int" default="wxPAGE_ALL"/>
-        </paramlist>
-      </method>
-      <method name="SetFonts" type="" overloaded="no">
-        <autodoc>SetFonts(self, String normal_face, String fixed_face, PyObject sizes=None)</autodoc>
-        <paramlist>
-          <param name="normal_face" type="String" default=""/>
-          <param name="fixed_face" type="String" default=""/>
-          <param name="sizes" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="NormalizeFontSizes" type="" overloaded="no">
-        <autodoc>NormalizeFontSizes(self, int size=-1)</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, float top=25.2, float bottom=25.2, float left=25.2, 
-    float right=25.2, float spaces=5)</autodoc>
-        <paramlist>
-          <param name="top" type="float" default="25.2"/>
-          <param name="bottom" type="float" default="25.2"/>
-          <param name="left" type="float" default="25.2"/>
-          <param name="right" type="float" default="25.2"/>
-          <param name="spaces" type="float" default="5"/>
-        </paramlist>
-      </method>
-      <staticmethod name="AddFilter" type="" overloaded="no">
-        <autodoc>AddFilter(wxHtmlFilter filter)</autodoc>
-        <paramlist>
-          <param name="filter" type="wxHtmlFilter" default=""/>
-        </paramlist>
-      </staticmethod>
-      <staticmethod name="CleanUpStatics" type="" overloaded="no">
-        <autodoc>CleanUpStatics()</autodoc>
-      </staticmethod>
-    </class>
-    <class name="HtmlEasyPrinting" oldname="wxHtmlEasyPrinting" module="html">
-      <baseclass name="Object"/>
-      <constructor name="HtmlEasyPrinting" overloaded="no">
-        <autodoc>__init__(self, String name=HtmlPrintingTitleStr, Window parentWindow=None) -&gt; HtmlEasyPrinting</autodoc>
-        <paramlist>
-          <param name="name" type="String" default="wxPyHtmlPrintingTitleStr"/>
-          <param name="parentWindow" type="Window" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxHtmlEasyPrinting" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="PreviewFile" type="" overloaded="no">
-        <autodoc>PreviewFile(self, String htmlfile)</autodoc>
-        <paramlist>
-          <param name="htmlfile" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="PreviewText" type="" overloaded="no">
-        <autodoc>PreviewText(self, String htmltext, String basepath=EmptyString)</autodoc>
-        <paramlist>
-          <param name="htmltext" type="String" default=""/>
-          <param name="basepath" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="PrintFile" type="" overloaded="no">
-        <autodoc>PrintFile(self, String htmlfile)</autodoc>
-        <paramlist>
-          <param name="htmlfile" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="PrintText" type="" overloaded="no">
-        <autodoc>PrintText(self, String htmltext, String basepath=EmptyString)</autodoc>
-        <paramlist>
-          <param name="htmltext" type="String" default=""/>
-          <param name="basepath" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="PrinterSetup" type="" overloaded="no">
-        <autodoc>PrinterSetup(self)</autodoc>
-      </method>
-      <method name="PageSetup" type="" overloaded="no">
-        <autodoc>PageSetup(self)</autodoc>
-      </method>
-      <method name="SetHeader" type="" overloaded="no">
-        <autodoc>SetHeader(self, String header, int pg=PAGE_ALL)</autodoc>
-        <paramlist>
-          <param name="header" type="String" default=""/>
-          <param name="pg" type="int" default="wxPAGE_ALL"/>
-        </paramlist>
-      </method>
-      <method name="SetFooter" type="" overloaded="no">
-        <autodoc>SetFooter(self, String footer, int pg=PAGE_ALL)</autodoc>
-        <paramlist>
-          <param name="footer" type="String" default=""/>
-          <param name="pg" type="int" default="wxPAGE_ALL"/>
-        </paramlist>
-      </method>
-      <method name="SetFonts" type="" overloaded="no">
-        <autodoc>SetFonts(self, String normal_face, String fixed_face, PyObject sizes=None)</autodoc>
-        <paramlist>
-          <param name="normal_face" type="String" default=""/>
-          <param name="fixed_face" type="String" default=""/>
-          <param name="sizes" type="PyObject" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="NormalizeFontSizes" type="" overloaded="no">
-        <autodoc>NormalizeFontSizes(self, int size=-1)</autodoc>
-        <paramlist>
-          <param name="size" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetPrintData" type="PrintData" overloaded="no">
-        <autodoc>GetPrintData(self) -&gt; PrintData</autodoc>
-      </method>
-      <method name="GetPageSetupData" type="PageSetupDialogData" overloaded="no">
-        <autodoc>GetPageSetupData(self) -&gt; PageSetupDialogData</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="HtmlBookRecord" oldname="wxHtmlBookRecord" module="html">
-      <constructor name="HtmlBookRecord" overloaded="no">
-        <autodoc>__init__(self, String bookfile, String basepath, String title, String start) -&gt; HtmlBookRecord</autodoc>
-        <paramlist>
-          <param name="bookfile" type="String" default=""/>
-          <param name="basepath" type="String" default=""/>
-          <param name="title" type="String" default=""/>
-          <param name="start" type="String" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="GetBookFile" type="String" overloaded="no">
-        <autodoc>GetBookFile(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetTitle" type="String" overloaded="no">
-        <autodoc>GetTitle(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetStart" type="String" overloaded="no">
-        <autodoc>GetStart(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetBasePath" type="String" overloaded="no">
-        <autodoc>GetBasePath(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetContentsRange" type="" overloaded="no">
-        <autodoc>SetContentsRange(self, int start, int end)</autodoc>
-        <paramlist>
-          <param name="start" type="int" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetContentsStart" type="int" overloaded="no">
-        <autodoc>GetContentsStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetContentsEnd" type="int" overloaded="no">
-        <autodoc>GetContentsEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetTitle" type="" overloaded="no">
-        <autodoc>SetTitle(self, String title)</autodoc>
-        <paramlist>
-          <param name="title" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBasePath" type="" overloaded="no">
-        <autodoc>SetBasePath(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStart" type="" overloaded="no">
-        <autodoc>SetStart(self, String start)</autodoc>
-        <paramlist>
-          <param name="start" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFullPath" type="String" overloaded="no">
-        <autodoc>GetFullPath(self, String page) -&gt; String</autodoc>
-        <paramlist>
-          <param name="page" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlContentsItem" oldname="wxHtmlContentsItem" module="html">
-      <method name="GetLevel" type="int" overloaded="no">
-        <autodoc>GetLevel(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetID" type="int" overloaded="no">
-        <autodoc>GetID(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPage" type="String" overloaded="no">
-        <autodoc>GetPage(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetBook" type="HtmlBookRecord" overloaded="no">
-        <autodoc>GetBook(self) -&gt; HtmlBookRecord</autodoc>
-      </method>
-    </class>
-    <class name="HtmlSearchStatus" oldname="wxHtmlSearchStatus" module="html">
-      <method name="Search" type="bool" overloaded="no">
-        <autodoc>Search(self) -&gt; bool</autodoc>
-      </method>
-      <method name="IsActive" type="bool" overloaded="no">
-        <autodoc>IsActive(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetCurIndex" type="int" overloaded="no">
-        <autodoc>GetCurIndex(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMaxIndex" type="int" overloaded="no">
-        <autodoc>GetMaxIndex(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetContentsItem" type="HtmlContentsItem" overloaded="no">
-        <autodoc>GetContentsItem(self) -&gt; HtmlContentsItem</autodoc>
-      </method>
-    </class>
-    <class name="HtmlHelpData" oldname="wxHtmlHelpData" module="html">
-      <constructor name="HtmlHelpData" overloaded="no">
-        <autodoc>__init__(self) -&gt; HtmlHelpData</autodoc>
-      </constructor>
-      <destructor name="~wxHtmlHelpData" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetTempDir" type="" overloaded="no">
-        <autodoc>SetTempDir(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddBook" type="bool" overloaded="no">
-        <autodoc>AddBook(self, String book) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="book" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindPageByName" type="String" overloaded="no">
-        <autodoc>FindPageByName(self, String page) -&gt; String</autodoc>
-        <paramlist>
-          <param name="page" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindPageById" type="String" overloaded="no">
-        <autodoc>FindPageById(self, int id) -&gt; String</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBookRecArray" type="wxHtmlBookRecArray" overloaded="no">
-        <autodoc>GetBookRecArray(self) -&gt; wxHtmlBookRecArray</autodoc>
-      </method>
-      <method name="GetContents" type="HtmlContentsItem" overloaded="no">
-        <autodoc>GetContents(self) -&gt; HtmlContentsItem</autodoc>
-      </method>
-      <method name="GetContentsCnt" type="int" overloaded="no">
-        <autodoc>GetContentsCnt(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetIndex" type="HtmlContentsItem" overloaded="no">
-        <autodoc>GetIndex(self) -&gt; HtmlContentsItem</autodoc>
-      </method>
-      <method name="GetIndexCnt" type="int" overloaded="no">
-        <autodoc>GetIndexCnt(self) -&gt; int</autodoc>
-      </method>
-    </class>
-    <class name="HtmlHelpFrame" oldname="wxHtmlHelpFrame" module="html">
-      <baseclass name="Frame"/>
-      <constructor name="HtmlHelpFrame" overloaded="no">
-        <autodoc>__init__(self, Window parent, int ??, String title=EmptyString, int style=HF_DEFAULTSTYLE, 
-    HtmlHelpData data=None) -&gt; HtmlHelpFrame</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="" type="int" default=""/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="style" type="int" default="wxHF_DEFAULTSTYLE"/>
-          <param name="data" type="HtmlHelpData" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetData" type="HtmlHelpData" overloaded="no">
-        <autodoc>GetData(self) -&gt; HtmlHelpData</autodoc>
-      </method>
-      <method name="SetTitleFormat" type="" overloaded="no">
-        <autodoc>SetTitleFormat(self, String format)</autodoc>
-        <paramlist>
-          <param name="format" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Display" type="" overloaded="no">
-        <autodoc>Display(self, String x)</autodoc>
-        <paramlist>
-          <param name="x" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DisplayID" type="" overloaded="no">
-        <autodoc>DisplayID(self, int id)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DisplayContents" type="" overloaded="no">
-        <autodoc>DisplayContents(self)</autodoc>
-      </method>
-      <method name="DisplayIndex" type="" overloaded="no">
-        <autodoc>DisplayIndex(self)</autodoc>
-      </method>
-      <method name="KeywordSearch" type="bool" overloaded="no">
-        <autodoc>KeywordSearch(self, String keyword) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="keyword" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="UseConfig" type="" overloaded="no">
-        <autodoc>UseConfig(self, ConfigBase config, String rootpath=EmptyString)</autodoc>
-        <paramlist>
-          <param name="config" type="ConfigBase" default=""/>
-          <param name="rootpath" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="ReadCustomization" type="" overloaded="no">
-        <autodoc>ReadCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="WriteCustomization" type="" overloaded="no">
-        <autodoc>WriteCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="HtmlHelpController" oldname="wxHtmlHelpController" module="html">
-      <baseclass name="EvtHandler"/>
-      <constructor name="HtmlHelpController" overloaded="no">
-        <autodoc>__init__(self, int style=HF_DEFAULTSTYLE) -&gt; HtmlHelpController</autodoc>
-        <paramlist>
-          <param name="style" type="int" default="wxHF_DEFAULTSTYLE"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxHtmlHelpController" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetTitleFormat" type="" overloaded="no">
-        <autodoc>SetTitleFormat(self, String format)</autodoc>
-        <paramlist>
-          <param name="format" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTempDir" type="" overloaded="no">
-        <autodoc>SetTempDir(self, String path)</autodoc>
-        <paramlist>
-          <param name="path" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddBook" type="bool" overloaded="no">
-        <autodoc>AddBook(self, String book, int show_wait_msg=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="book" type="String" default=""/>
-          <param name="show_wait_msg" type="int" default="False"/>
-        </paramlist>
-      </method>
-      <method name="Display" type="" overloaded="no">
-        <autodoc>Display(self, String x)</autodoc>
-        <paramlist>
-          <param name="x" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DisplayID" type="" overloaded="no">
-        <autodoc>DisplayID(self, int id)</autodoc>
-        <paramlist>
-          <param name="id" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DisplayContents" type="" overloaded="no">
-        <autodoc>DisplayContents(self)</autodoc>
-      </method>
-      <method name="DisplayIndex" type="" overloaded="no">
-        <autodoc>DisplayIndex(self)</autodoc>
-      </method>
-      <method name="KeywordSearch" type="bool" overloaded="no">
-        <autodoc>KeywordSearch(self, String keyword) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="keyword" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="UseConfig" type="" overloaded="no">
-        <autodoc>UseConfig(self, ConfigBase config, String rootpath=EmptyString)</autodoc>
-        <paramlist>
-          <param name="config" type="ConfigBase" default=""/>
-          <param name="rootpath" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="ReadCustomization" type="" overloaded="no">
-        <autodoc>ReadCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="WriteCustomization" type="" overloaded="no">
-        <autodoc>WriteCustomization(self, ConfigBase cfg, String path=EmptyString)</autodoc>
-        <paramlist>
-          <param name="cfg" type="ConfigBase" default=""/>
-          <param name="path" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetFrame" type="HtmlHelpFrame" overloaded="no">
-        <autodoc>GetFrame(self) -&gt; HtmlHelpFrame</autodoc>
-      </method>
-    </class>
-  </module>
-  <module name="wizard">
-    <import name="_windows"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <pythoncode>
-EVT_WIZARD_PAGE_CHANGED  = wx.PyEventBinder( wxEVT_WIZARD_PAGE_CHANGED, 1)
-EVT_WIZARD_PAGE_CHANGING = wx.PyEventBinder( wxEVT_WIZARD_PAGE_CHANGING, 1)
-EVT_WIZARD_CANCEL        = wx.PyEventBinder( wxEVT_WIZARD_CANCEL, 1)
-EVT_WIZARD_HELP          = wx.PyEventBinder( wxEVT_WIZARD_HELP, 1)
-EVT_WIZARD_FINISHED      = wx.PyEventBinder( wxEVT_WIZARD_FINISHED, 1)
-</pythoncode>
-    <class name="WizardEvent" oldname="wxWizardEvent" module="wizard">
-      <baseclass name="NotifyEvent"/>
-      <constructor name="WizardEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType type=wxEVT_NULL, int id=-1, bool direction=True, 
-    WizardPage page=None) -&gt; WizardEvent</autodoc>
-        <paramlist>
-          <param name="type" type="wxEventType" default="wxEVT_NULL"/>
-          <param name="id" type="int" default="-1"/>
-          <param name="direction" type="bool" default="True"/>
-          <param name="page" type="wxWizardPage" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetDirection" type="bool" overloaded="no">
-        <autodoc>GetDirection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetPage" type="wxWizardPage" overloaded="no">
-        <autodoc>GetPage(self) -&gt; WizardPage</autodoc>
-      </method>
-    </class>
-    <class name="WizardPage" oldname="wxWizardPage" module="wizard">
-      <baseclass name="Panel"/>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Wizard parent, Bitmap bitmap=wxNullBitmap, String resource=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="wxWizard" default=""/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="resource" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetPrev" type="WizardPage" overloaded="no">
-        <autodoc>GetPrev(self) -&gt; WizardPage</autodoc>
-      </method>
-      <method name="GetNext" type="WizardPage" overloaded="no">
-        <autodoc>GetNext(self) -&gt; WizardPage</autodoc>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-    </class>
-    <class name="PyWizardPage" oldname="wxPyWizardPage" module="wizard">
-      <baseclass name="WizardPage"/>
-      <constructor name="PyWizardPage" overloaded="no">
-        <autodoc>__init__(self, Wizard parent, Bitmap bitmap=&amp;wxNullBitmap, String resource=&amp;wxPyEmptyString) -&gt; PyWizardPage</autodoc>
-        <paramlist>
-          <param name="parent" type="wxWizard" default=""/>
-          <param name="bitmap" type="Bitmap" default="&amp;wxNullBitmap"/>
-          <param name="resource" type="String" default="&amp;wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PrePyWizardPage" overloaded="no">
-        <autodoc>PrePyWizardPage() -&gt; PyWizardPage</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Wizard parent, Bitmap bitmap=wxNullBitmap, String resource=EmptyString) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="wxWizard" default=""/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="resource" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoMoveWindow" type="" overloaded="no">
-        <autodoc>base_DoMoveWindow(self, int x, int y, int width, int height)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetSize" type="" overloaded="no">
-        <autodoc>base_DoSetSize(self, int x, int y, int width, int height, int sizeFlags=SIZE_AUTO)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-          <param name="sizeFlags" type="int" default="wxSIZE_AUTO"/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetClientSize" type="" overloaded="no">
-        <autodoc>base_DoSetClientSize(self, int width, int height)</autodoc>
-        <paramlist>
-          <param name="width" type="int" default=""/>
-          <param name="height" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoSetVirtualSize" type="" overloaded="no">
-        <autodoc>base_DoSetVirtualSize(self, int x, int y)</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetSize" type="" overloaded="no">
-        <autodoc>base_DoGetSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetClientSize" type="" overloaded="no">
-        <autodoc>base_DoGetClientSize() -&gt; (width, height)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetPosition" type="" overloaded="no">
-        <autodoc>base_DoGetPosition() -&gt; (x,y)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_DoGetVirtualSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetVirtualSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_DoGetBestSize" type="Size" overloaded="no">
-        <autodoc>base_DoGetBestSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_InitDialog" type="" overloaded="no">
-        <autodoc>base_InitDialog(self)</autodoc>
-      </method>
-      <method name="base_TransferDataToWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataToWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_TransferDataFromWindow" type="bool" overloaded="no">
-        <autodoc>base_TransferDataFromWindow(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_Validate" type="bool" overloaded="no">
-        <autodoc>base_Validate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocus" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_AcceptsFocusFromKeyboard" type="bool" overloaded="no">
-        <autodoc>base_AcceptsFocusFromKeyboard(self) -&gt; bool</autodoc>
-      </method>
-      <method name="base_GetMaxSize" type="Size" overloaded="no">
-        <autodoc>base_GetMaxSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="base_AddChild" type="" overloaded="no">
-        <autodoc>base_AddChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_RemoveChild" type="" overloaded="no">
-        <autodoc>base_RemoveChild(self, Window child)</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="WizardPageSimple" oldname="wxWizardPageSimple" module="wizard">
-      <baseclass name="WizardPage"/>
-      <constructor name="WizardPageSimple" overloaded="no">
-        <autodoc>__init__(self, Wizard parent, WizardPage prev=None, WizardPage next=None, 
-    Bitmap bitmap=wxNullBitmap, wxChar resource=None) -&gt; WizardPageSimple</autodoc>
-        <paramlist>
-          <param name="parent" type="wxWizard" default=""/>
-          <param name="prev" type="WizardPage" default="NULL"/>
-          <param name="next" type="WizardPage" default="NULL"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="resource" type="wxChar" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreWizardPageSimple" overloaded="no">
-        <autodoc>PreWizardPageSimple() -&gt; WizardPageSimple</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Wizard parent=None, WizardPage prev=None, WizardPage next=None, 
-    Bitmap bitmap=wxNullBitmap, wxChar resource=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="wxWizard" default="NULL"/>
-          <param name="prev" type="WizardPage" default="NULL"/>
-          <param name="next" type="WizardPage" default="NULL"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="resource" type="wxChar" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="SetPrev" type="" overloaded="no">
-        <autodoc>SetPrev(self, WizardPage prev)</autodoc>
-        <paramlist>
-          <param name="prev" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNext" type="" overloaded="no">
-        <autodoc>SetNext(self, WizardPage next)</autodoc>
-        <paramlist>
-          <param name="next" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="Chain" type="" overloaded="no">
-        <autodoc>Chain(WizardPageSimple first, WizardPageSimple second)</autodoc>
-        <paramlist>
-          <param name="first" type="WizardPageSimple" default=""/>
-          <param name="second" type="WizardPageSimple" default=""/>
-        </paramlist>
-      </staticmethod>
-    </class>
-    <class name="Wizard" oldname="wxWizard" module="wizard">
-      <baseclass name="Dialog"/>
-      <constructor name="Wizard" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String title=EmptyString, 
-    Bitmap bitmap=wxNullBitmap, Point pos=DefaultPosition, 
-    long style=DEFAULT_DIALOG_STYLE) -&gt; Wizard</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="style" type="long" default="wxDEFAULT_DIALOG_STYLE"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreWizard" overloaded="no">
-        <autodoc>PreWizard() -&gt; Wizard</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, String title=EmptyString, 
-    Bitmap bitmap=wxNullBitmap, Point pos=DefaultPosition) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="title" type="String" default="wxPyEmptyString"/>
-          <param name="bitmap" type="Bitmap" default="wxNullBitmap"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-        </paramlist>
-      </method>
-      <method name="Init" type="" overloaded="no">
-        <autodoc>Init(self)</autodoc>
-      </method>
-      <method name="RunWizard" type="bool" overloaded="no">
-        <autodoc>RunWizard(self, WizardPage firstPage) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="firstPage" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentPage" type="WizardPage" overloaded="no">
-        <autodoc>GetCurrentPage(self) -&gt; WizardPage</autodoc>
-      </method>
-      <method name="SetPageSize" type="" overloaded="no">
-        <autodoc>SetPageSize(self, Size size)</autodoc>
-        <paramlist>
-          <param name="size" type="Size" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPageSize" type="Size" overloaded="no">
-        <autodoc>GetPageSize(self) -&gt; Size</autodoc>
-      </method>
-      <method name="FitToPage" type="" overloaded="no">
-        <autodoc>FitToPage(self, WizardPage firstPage)</autodoc>
-        <paramlist>
-          <param name="firstPage" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPageAreaSizer" type="Sizer" overloaded="no">
-        <autodoc>GetPageAreaSizer(self) -&gt; Sizer</autodoc>
-      </method>
-      <method name="SetBorder" type="" overloaded="no">
-        <autodoc>SetBorder(self, int border)</autodoc>
-        <paramlist>
-          <param name="border" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsRunning" type="bool" overloaded="no">
-        <autodoc>IsRunning(self) -&gt; bool</autodoc>
-      </method>
-      <method name="ShowPage" type="bool" overloaded="no">
-        <autodoc>ShowPage(self, WizardPage page, bool goingForward=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="page" type="WizardPage" default=""/>
-          <param name="goingForward" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="HasNextPage" type="bool" overloaded="no">
-        <autodoc>HasNextPage(self, WizardPage page) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="page" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasPrevPage" type="bool" overloaded="no">
-        <autodoc>HasPrevPage(self, WizardPage page) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="page" type="WizardPage" default=""/>
-        </paramlist>
-      </method>
-    </class>
-  </module>
-  <module name="glcanvas">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <class name="GLContext" oldname="wxGLContext" module="glcanvas">
-      <baseclass name="Object"/>
-      <constructor name="GLContext" overloaded="no">
-        <autodoc>__init__(self, bool isRGB, GLCanvas win, wxPalette palette=wxNullPalette, 
-    GLContext other=None) -&gt; GLContext</autodoc>
-        <paramlist>
-          <param name="isRGB" type="bool" default=""/>
-          <param name="win" type="wxGLCanvas" default=""/>
-          <param name="palette" type="Palette" default="wxNullPalette"/>
-          <param name="other" type="GLContext" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxGLContext" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetCurrent" type="" overloaded="no">
-        <autodoc>SetCurrent(self)</autodoc>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, String colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SwapBuffers" type="" overloaded="no">
-        <autodoc>SwapBuffers(self)</autodoc>
-      </method>
-      <method name="SetupPixelFormat" type="" overloaded="no">
-        <autodoc>SetupPixelFormat(self)</autodoc>
-      </method>
-      <method name="SetupPalette" type="" overloaded="no">
-        <autodoc>SetupPalette(self, wxPalette palette)</autodoc>
-        <paramlist>
-          <param name="palette" type="Palette" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateDefaultPalette" type="Palette" overloaded="no">
-        <autodoc>CreateDefaultPalette(self) -&gt; wxPalette</autodoc>
-      </method>
-      <method name="GetPalette" type="Palette" overloaded="no">
-        <autodoc>GetPalette(self) -&gt; wxPalette</autodoc>
-      </method>
-      <method name="GetWindow" type="Window" overloaded="no">
-        <autodoc>GetWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <class name="GLCanvas" oldname="wxGLCanvas" module="glcanvas">
-      <baseclass name="Window"/>
-      <constructor name="GLCanvas" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=GLCanvasNameStr, 
-    int attribList=None, wxPalette palette=wxNullPalette) -&gt; GLCanvas</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyGLCanvasNameStr"/>
-          <param name="attribList" type="int" default="NULL"/>
-          <param name="palette" type="Palette" default="wxNullPalette"/>
-        </paramlist>
-      </constructor>
-      <constructor name="GLCanvasWithContext" overloaded="no">
-        <autodoc>GLCanvasWithContext(Window parent, GLContext shared=None, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, 
-    long style=0, String name=GLCanvasNameStr, 
-    int attribList=None, wxPalette palette=wxNullPalette) -&gt; GLCanvas</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="shared" type="GLContext" default="NULL"/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPyGLCanvasNameStr"/>
-          <param name="attribList" type="int" default="NULL"/>
-          <param name="palette" type="Palette" default="wxNullPalette"/>
-        </paramlist>
-      </constructor>
-      <method name="SetCurrent" type="" overloaded="no">
-        <autodoc>SetCurrent(self)</autodoc>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, String colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SwapBuffers" type="" overloaded="no">
-        <autodoc>SwapBuffers(self)</autodoc>
-      </method>
-      <method name="GetContext" type="GLContext" overloaded="no">
-        <autodoc>GetContext(self) -&gt; GLContext</autodoc>
-      </method>
-    </class>
-  </module>
-  <module name="ogl">
-    <import name="_windows"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <pythoncode>
-    import warnings
-    warnings.warn("This module is deprecated.  Please use the wx.lib.ogl package instead.",    
-                  DeprecationWarning, stacklevel=2)
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="ShapeRegion" oldname="wxShapeRegion" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="ShapeRegion" overloaded="no">
-        <autodoc>__init__(self) -&gt; ShapeRegion</autodoc>
-      </constructor>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String s)</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font f)</autodoc>
-        <paramlist>
-          <param name="f" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMinSize" type="" overloaded="no">
-        <autodoc>SetMinSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetProportions" type="" overloaded="no">
-        <autodoc>SetProportions(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFormatMode" type="" overloaded="no">
-        <autodoc>SetFormatMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetName" type="" overloaded="no">
-        <autodoc>SetName(self, String s)</autodoc>
-        <paramlist>
-          <param name="s" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColour" type="" overloaded="no">
-        <autodoc>SetColour(self, String col)</autodoc>
-        <paramlist>
-          <param name="col" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self) -&gt; Font</autodoc>
-      </method>
-      <method name="GetMinSize" type="" overloaded="no">
-        <autodoc>GetMinSize(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetProportion" type="" overloaded="no">
-        <autodoc>GetProportion(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="" overloaded="no">
-        <autodoc>GetSize(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPosition" type="" overloaded="no">
-        <autodoc>GetPosition(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFormatMode" type="int" overloaded="no">
-        <autodoc>GetFormatMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetColour" type="String" overloaded="no">
-        <autodoc>GetColour(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetActualColourObject" type="Colour" overloaded="no">
-        <autodoc>GetActualColourObject(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetFormattedText" type="wxList" overloaded="no">
-        <autodoc>GetFormattedText(self) -&gt; wxList</autodoc>
-      </method>
-      <method name="GetPenColour" type="String" overloaded="no">
-        <autodoc>GetPenColour(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetPenStyle" type="int" overloaded="no">
-        <autodoc>GetPenStyle(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPenStyle" type="" overloaded="no">
-        <autodoc>SetPenStyle(self, int style)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPenColour" type="" overloaded="no">
-        <autodoc>SetPenColour(self, String col)</autodoc>
-        <paramlist>
-          <param name="col" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetActualPen" type="Pen" overloaded="no">
-        <autodoc>GetActualPen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="GetWidth" type="double" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetHeight" type="double" overloaded="no">
-        <autodoc>GetHeight(self) -&gt; double</autodoc>
-      </method>
-      <method name="ClearText" type="" overloaded="no">
-        <autodoc>ClearText(self)</autodoc>
-      </method>
-    </class>
-    <class name="AttachmentPoint" oldname="wxAttachmentPoint" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="AttachmentPoint" overloaded="no">
-        <autodoc>__init__(self, int id=0, double x=0.0, double y=0.0) -&gt; AttachmentPoint</autodoc>
-        <paramlist>
-          <param name="id" type="int" default="0"/>
-          <param name="x" type="double" default="0.0"/>
-          <param name="y" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <property name="m_id" type="int" readonly="no"/>
-      <property name="m_x" type="double" readonly="no"/>
-      <property name="m_y" type="double" readonly="no"/>
-    </class>
-    <class name="PyShapeEvtHandler" oldname="wxPyShapeEvtHandler" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="PyShapeEvtHandler" overloaded="no">
-        <autodoc>__init__(self, PyShapeEvtHandler prev=None, PyShape shape=None) -&gt; PyShapeEvtHandler</autodoc>
-        <paramlist>
-          <param name="prev" type="PyShapeEvtHandler" default="NULL"/>
-          <param name="shape" type="wxPyShape" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="_setOORInfo" type="" overloaded="no">
-        <autodoc>_setOORInfo(self, PyObject _self)</autodoc>
-        <paramlist>
-          <param name="_self" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetShape" type="" overloaded="no">
-        <autodoc>SetShape(self, PyShape sh)</autodoc>
-        <paramlist>
-          <param name="sh" type="wxPyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetShape" type="wxPyShape" overloaded="no">
-        <autodoc>GetShape(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="SetPreviousHandler" type="" overloaded="no">
-        <autodoc>SetPreviousHandler(self, PyShapeEvtHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="PyShapeEvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPreviousHandler" type="PyShapeEvtHandler" overloaded="no">
-        <autodoc>GetPreviousHandler(self) -&gt; PyShapeEvtHandler</autodoc>
-      </method>
-      <method name="CreateNewCopy" type="PyShapeEvtHandler" overloaded="no">
-        <autodoc>CreateNewCopy(self) -&gt; PyShapeEvtHandler</autodoc>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=False)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyShape" oldname="wxPyShape" module="ogl">
-      <baseclass name="PyShapeEvtHandler"/>
-      <constructor name="PyShape" overloaded="no">
-        <autodoc>__init__(self, PyShapeCanvas can=None) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="can" type="wxPyShapeCanvas" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBoundingBoxMax" type="" overloaded="no">
-        <autodoc>GetBoundingBoxMax(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBoundingBoxMin" type="" overloaded="no">
-        <autodoc>GetBoundingBoxMin(self, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPerimeterPoint" type="bool" overloaded="no">
-        <autodoc>GetPerimeterPoint(self, double x1, double y1, double x2, double y2, double OUTPUT, 
-    double OUTPUT) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x1" type="double" default=""/>
-          <param name="y1" type="double" default=""/>
-          <param name="x2" type="double" default=""/>
-          <param name="y2" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCanvas" type="wxPyShapeCanvas" overloaded="no">
-        <autodoc>GetCanvas(self) -&gt; PyShapeCanvas</autodoc>
-      </method>
-      <method name="SetCanvas" type="" overloaded="no">
-        <autodoc>SetCanvas(self, PyShapeCanvas the_canvas)</autodoc>
-        <paramlist>
-          <param name="the_canvas" type="wxPyShapeCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddToCanvas" type="" overloaded="no">
-        <autodoc>AddToCanvas(self, PyShapeCanvas the_canvas, PyShape addAfter=None)</autodoc>
-        <paramlist>
-          <param name="the_canvas" type="wxPyShapeCanvas" default=""/>
-          <param name="addAfter" type="PyShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertInCanvas" type="" overloaded="no">
-        <autodoc>InsertInCanvas(self, PyShapeCanvas the_canvas)</autodoc>
-        <paramlist>
-          <param name="the_canvas" type="wxPyShapeCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveFromCanvas" type="" overloaded="no">
-        <autodoc>RemoveFromCanvas(self, PyShapeCanvas the_canvas)</autodoc>
-        <paramlist>
-          <param name="the_canvas" type="wxPyShapeCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetX" type="double" overloaded="no">
-        <autodoc>GetX(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetY" type="double" overloaded="no">
-        <autodoc>GetY(self) -&gt; double</autodoc>
-      </method>
-      <method name="SetX" type="" overloaded="no">
-        <autodoc>SetX(self, double x)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetY" type="" overloaded="no">
-        <autodoc>SetY(self, double y)</autodoc>
-        <paramlist>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParent" type="PyShape" overloaded="no">
-        <autodoc>GetParent(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="SetParent" type="" overloaded="no">
-        <autodoc>SetParent(self, PyShape p)</autodoc>
-        <paramlist>
-          <param name="p" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTopAncestor" type="PyShape" overloaded="no">
-        <autodoc>GetTopAncestor(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="GetChildren" type="PyObject" overloaded="no">
-        <autodoc>GetChildren(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="Unlink" type="" overloaded="no">
-        <autodoc>Unlink(self)</autodoc>
-      </method>
-      <method name="SetDrawHandles" type="" overloaded="no">
-        <autodoc>SetDrawHandles(self, bool drawH)</autodoc>
-        <paramlist>
-          <param name="drawH" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDrawHandles" type="bool" overloaded="no">
-        <autodoc>GetDrawHandles(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MakeControlPoints" type="" overloaded="no">
-        <autodoc>MakeControlPoints(self)</autodoc>
-      </method>
-      <method name="DeleteControlPoints" type="" overloaded="no">
-        <autodoc>DeleteControlPoints(self, DC dc=None)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="ResetControlPoints" type="" overloaded="no">
-        <autodoc>ResetControlPoints(self)</autodoc>
-      </method>
-      <method name="GetEventHandler" type="PyShapeEvtHandler" overloaded="no">
-        <autodoc>GetEventHandler(self) -&gt; PyShapeEvtHandler</autodoc>
-      </method>
-      <method name="SetEventHandler" type="" overloaded="no">
-        <autodoc>SetEventHandler(self, PyShapeEvtHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="PyShapeEvtHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="MakeMandatoryControlPoints" type="" overloaded="no">
-        <autodoc>MakeMandatoryControlPoints(self)</autodoc>
-      </method>
-      <method name="ResetMandatoryControlPoints" type="" overloaded="no">
-        <autodoc>ResetMandatoryControlPoints(self)</autodoc>
-      </method>
-      <method name="Recompute" type="bool" overloaded="no">
-        <autodoc>Recompute(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CalculateSize" type="" overloaded="no">
-        <autodoc>CalculateSize(self)</autodoc>
-      </method>
-      <method name="Select" type="" overloaded="no">
-        <autodoc>Select(self, bool select=True, DC dc=None)</autodoc>
-        <paramlist>
-          <param name="select" type="bool" default="True"/>
-          <param name="dc" type="DC" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="SetHighlight" type="" overloaded="no">
-        <autodoc>SetHighlight(self, bool hi=True, bool recurse=False)</autodoc>
-        <paramlist>
-          <param name="hi" type="bool" default="True"/>
-          <param name="recurse" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="IsHighlighted" type="bool" overloaded="no">
-        <autodoc>IsHighlighted(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Selected" type="bool" overloaded="no">
-        <autodoc>Selected(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AncestorSelected" type="bool" overloaded="no">
-        <autodoc>AncestorSelected(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSensitivityFilter" type="" overloaded="no">
-        <autodoc>SetSensitivityFilter(self, int sens=OP_ALL, bool recursive=False)</autodoc>
-        <paramlist>
-          <param name="sens" type="int" default="OP_ALL"/>
-          <param name="recursive" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetSensitivityFilter" type="int" overloaded="no">
-        <autodoc>GetSensitivityFilter(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetDraggable" type="" overloaded="no">
-        <autodoc>SetDraggable(self, bool drag, bool recursive=False)</autodoc>
-        <paramlist>
-          <param name="drag" type="bool" default=""/>
-          <param name="recursive" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SetFixedSize" type="" overloaded="no">
-        <autodoc>SetFixedSize(self, bool x, bool y)</autodoc>
-        <paramlist>
-          <param name="x" type="bool" default=""/>
-          <param name="y" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFixedSize" type="" overloaded="no">
-        <autodoc>GetFixedSize(self, bool OUTPUT, bool OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="bool" default=""/>
-          <param name="OUTPUT" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFixedWidth" type="bool" overloaded="no">
-        <autodoc>GetFixedWidth(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetFixedHeight" type="bool" overloaded="no">
-        <autodoc>GetFixedHeight(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSpaceAttachments" type="" overloaded="no">
-        <autodoc>SetSpaceAttachments(self, bool sp)</autodoc>
-        <paramlist>
-          <param name="sp" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSpaceAttachments" type="bool" overloaded="no">
-        <autodoc>GetSpaceAttachments(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetShadowMode" type="" overloaded="no">
-        <autodoc>SetShadowMode(self, int mode, bool redraw=False)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-          <param name="redraw" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetShadowMode" type="int" overloaded="no">
-        <autodoc>GetShadowMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="HitTest" type="bool" overloaded="no">
-        <autodoc>HitTest(self, double x, double y, int OUTPUT, double OUTPUT) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCentreResize" type="" overloaded="no">
-        <autodoc>SetCentreResize(self, bool cr)</autodoc>
-        <paramlist>
-          <param name="cr" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCentreResize" type="bool" overloaded="no">
-        <autodoc>GetCentreResize(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetMaintainAspectRatio" type="" overloaded="no">
-        <autodoc>SetMaintainAspectRatio(self, bool ar)</autodoc>
-        <paramlist>
-          <param name="ar" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaintainAspectRatio" type="bool" overloaded="no">
-        <autodoc>GetMaintainAspectRatio(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetLines" type="PyObject" overloaded="no">
-        <autodoc>GetLines(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetDisableLabel" type="" overloaded="no">
-        <autodoc>SetDisableLabel(self, bool flag)</autodoc>
-        <paramlist>
-          <param name="flag" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDisableLabel" type="bool" overloaded="no">
-        <autodoc>GetDisableLabel(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetAttachmentMode" type="" overloaded="no">
-        <autodoc>SetAttachmentMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttachmentMode" type="int" overloaded="no">
-        <autodoc>GetAttachmentMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetId" type="" overloaded="no">
-        <autodoc>SetId(self, long i)</autodoc>
-        <paramlist>
-          <param name="i" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetId" type="long" overloaded="no">
-        <autodoc>GetId(self) -&gt; long</autodoc>
-      </method>
-      <method name="SetPen" type="" overloaded="no">
-        <autodoc>SetPen(self, wxPen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBrush" type="" overloaded="no">
-        <autodoc>SetBrush(self, wxBrush brush)</autodoc>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="Show" type="" overloaded="no">
-        <autodoc>Show(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsShown" type="bool" overloaded="no">
-        <autodoc>IsShown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Move" type="" overloaded="no">
-        <autodoc>Move(self, DC dc, double x1, double y1, bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x1" type="double" default=""/>
-          <param name="y1" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Erase" type="" overloaded="no">
-        <autodoc>Erase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="EraseContents" type="" overloaded="no">
-        <autodoc>EraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="Draw" type="" overloaded="no">
-        <autodoc>Draw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="Flash" type="" overloaded="no">
-        <autodoc>Flash(self)</autodoc>
-      </method>
-      <method name="MoveLinks" type="" overloaded="no">
-        <autodoc>MoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawContents" type="" overloaded="no">
-        <autodoc>DrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, double x, double y, bool recursive=True)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="recursive" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetAttachmentSize" type="" overloaded="no">
-        <autodoc>SetAttachmentSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Attach" type="" overloaded="no">
-        <autodoc>Attach(self, PyShapeCanvas can)</autodoc>
-        <paramlist>
-          <param name="can" type="wxPyShapeCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="Detach" type="" overloaded="no">
-        <autodoc>Detach(self)</autodoc>
-      </method>
-      <method name="Constrain" type="bool" overloaded="no">
-        <autodoc>Constrain(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AddLine" type="" overloaded="no">
-        <autodoc>AddLine(self, PyLineShape line, PyShape other, int attachFrom=0, 
-    int attachTo=0, int positionFrom=-1, int positionTo=-1)</autodoc>
-        <paramlist>
-          <param name="line" type="wxPyLineShape" default=""/>
-          <param name="other" type="PyShape" default=""/>
-          <param name="attachFrom" type="int" default="0"/>
-          <param name="attachTo" type="int" default="0"/>
-          <param name="positionFrom" type="int" default="-1"/>
-          <param name="positionTo" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetLinePosition" type="int" overloaded="no">
-        <autodoc>GetLinePosition(self, PyLineShape line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="wxPyLineShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddText" type="" overloaded="no">
-        <autodoc>AddText(self, String string)</autodoc>
-        <paramlist>
-          <param name="string" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPen" type="Pen" overloaded="no">
-        <autodoc>GetPen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="GetBrush" type="Brush" overloaded="no">
-        <autodoc>GetBrush(self) -&gt; wxBrush</autodoc>
-      </method>
-      <method name="SetDefaultRegionSize" type="" overloaded="no">
-        <autodoc>SetDefaultRegionSize(self)</autodoc>
-      </method>
-      <method name="FormatText" type="" overloaded="no">
-        <autodoc>FormatText(self, DC dc, String s, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="s" type="String" default=""/>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetFormatMode" type="" overloaded="no">
-        <autodoc>SetFormatMode(self, int mode, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetFormatMode" type="int" overloaded="no">
-        <autodoc>GetFormatMode(self, int regionId=0) -&gt; int</autodoc>
-        <paramlist>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self, int regionId=0) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, String colour, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="colour" type="String" default=""/>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetTextColour" type="String" overloaded="no">
-        <autodoc>GetTextColour(self, int regionId=0) -&gt; String</autodoc>
-        <paramlist>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetNumberOfTextRegions" type="int" overloaded="no">
-        <autodoc>GetNumberOfTextRegions(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetRegionName" type="" overloaded="no">
-        <autodoc>SetRegionName(self, String name, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetRegionName" type="String" overloaded="no">
-        <autodoc>GetRegionName(self, int regionId) -&gt; String</autodoc>
-        <paramlist>
-          <param name="regionId" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRegionId" type="int" overloaded="no">
-        <autodoc>GetRegionId(self, String name) -&gt; int</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="NameRegions" type="" overloaded="no">
-        <autodoc>NameRegions(self, String parentName=EmptyString)</autodoc>
-        <paramlist>
-          <param name="parentName" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </method>
-      <method name="GetRegions" type="PyObject" overloaded="no">
-        <autodoc>GetRegions(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="AddRegion" type="" overloaded="no">
-        <autodoc>AddRegion(self, ShapeRegion region)</autodoc>
-        <paramlist>
-          <param name="region" type="ShapeRegion" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearRegions" type="" overloaded="no">
-        <autodoc>ClearRegions(self)</autodoc>
-      </method>
-      <method name="AssignNewIds" type="" overloaded="no">
-        <autodoc>AssignNewIds(self)</autodoc>
-      </method>
-      <method name="FindRegion" type="PyShape" overloaded="no">
-        <autodoc>FindRegion(self, String regionName, int OUTPUT) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="regionName" type="String" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindRegionNames" type="" overloaded="no">
-        <autodoc>FindRegionNames(self, wxStringList list)</autodoc>
-        <paramlist>
-          <param name="list" type="wxStringList" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearText" type="" overloaded="no">
-        <autodoc>ClearText(self, int regionId=0)</autodoc>
-        <paramlist>
-          <param name="regionId" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="RemoveLine" type="" overloaded="no">
-        <autodoc>RemoveLine(self, PyLineShape line)</autodoc>
-        <paramlist>
-          <param name="line" type="wxPyLineShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttachmentPosition" type="bool" overloaded="no">
-        <autodoc>GetAttachmentPosition(self, int attachment, double OUTPUT, double OUTPUT, int nth=0, 
-    int no_arcs=1, PyLineShape line=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="nth" type="int" default="0"/>
-          <param name="no_arcs" type="int" default="1"/>
-          <param name="line" type="wxPyLineShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="GetNumberOfAttachments" type="int" overloaded="no">
-        <autodoc>GetNumberOfAttachments(self) -&gt; int</autodoc>
-      </method>
-      <method name="AttachmentIsValid" type="bool" overloaded="no">
-        <autodoc>AttachmentIsValid(self, int attachment) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttachments" type="PyObject" overloaded="no">
-        <autodoc>GetAttachments(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetAttachmentPositionEdge" type="bool" overloaded="no">
-        <autodoc>GetAttachmentPositionEdge(self, int attachment, double OUTPUT, double OUTPUT, int nth=0, 
-    int no_arcs=1, PyLineShape line=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="nth" type="int" default="0"/>
-          <param name="no_arcs" type="int" default="1"/>
-          <param name="line" type="wxPyLineShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="CalcSimpleAttachment" type="RealPoint" overloaded="no">
-        <autodoc>CalcSimpleAttachment(self, RealPoint pt1, RealPoint pt2, int nth, int noArcs, 
-    PyLineShape line) -&gt; RealPoint</autodoc>
-        <paramlist>
-          <param name="pt1" type="RealPoint" default=""/>
-          <param name="pt2" type="RealPoint" default=""/>
-          <param name="nth" type="int" default=""/>
-          <param name="noArcs" type="int" default=""/>
-          <param name="line" type="wxPyLineShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="AttachmentSortTest" type="bool" overloaded="no">
-        <autodoc>AttachmentSortTest(self, int attachmentPoint, RealPoint pt1, RealPoint pt2) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachmentPoint" type="int" default=""/>
-          <param name="pt1" type="RealPoint" default=""/>
-          <param name="pt2" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="EraseLinks" type="" overloaded="no">
-        <autodoc>EraseLinks(self, DC dc, int attachment=-1, bool recurse=False)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="attachment" type="int" default="-1"/>
-          <param name="recurse" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="DrawLinks" type="" overloaded="no">
-        <autodoc>DrawLinks(self, DC dc, int attachment=-1, bool recurse=False)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="attachment" type="int" default="-1"/>
-          <param name="recurse" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="MoveLineToNewAttachment" type="bool" overloaded="no">
-        <autodoc>MoveLineToNewAttachment(self, DC dc, PyLineShape to_move, double x, double y) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="to_move" type="wxPyLineShape" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="ApplyAttachmentOrdering" type="" overloaded="no">
-        <autodoc>ApplyAttachmentOrdering(self, PyObject linesToSort)</autodoc>
-        <paramlist>
-          <param name="linesToSort" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchingAttachmentRoot" type="RealPoint" overloaded="no">
-        <autodoc>GetBranchingAttachmentRoot(self, int attachment) -&gt; RealPoint</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchingAttachmentInfo" type="bool" overloaded="no">
-        <autodoc>GetBranchingAttachmentInfo(self, int attachment, RealPoint root, RealPoint neck, RealPoint shoulder1, 
-    RealPoint shoulder2) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-          <param name="root" type="RealPoint" default=""/>
-          <param name="neck" type="RealPoint" default=""/>
-          <param name="shoulder1" type="RealPoint" default=""/>
-          <param name="shoulder2" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchingAttachmentPoint" type="bool" overloaded="no">
-        <autodoc>GetBranchingAttachmentPoint(self, int attachment, int n, RealPoint attachmentPoint, RealPoint stemPoint) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-          <param name="n" type="int" default=""/>
-          <param name="attachmentPoint" type="RealPoint" default=""/>
-          <param name="stemPoint" type="RealPoint" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttachmentLineCount" type="int" overloaded="no">
-        <autodoc>GetAttachmentLineCount(self, int attachment) -&gt; int</autodoc>
-        <paramlist>
-          <param name="attachment" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBranchNeckLength" type="" overloaded="no">
-        <autodoc>SetBranchNeckLength(self, int len)</autodoc>
-        <paramlist>
-          <param name="len" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchNeckLength" type="int" overloaded="no">
-        <autodoc>GetBranchNeckLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetBranchStemLength" type="" overloaded="no">
-        <autodoc>SetBranchStemLength(self, int len)</autodoc>
-        <paramlist>
-          <param name="len" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchStemLength" type="int" overloaded="no">
-        <autodoc>GetBranchStemLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetBranchSpacing" type="" overloaded="no">
-        <autodoc>SetBranchSpacing(self, int len)</autodoc>
-        <paramlist>
-          <param name="len" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchSpacing" type="int" overloaded="no">
-        <autodoc>GetBranchSpacing(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetBranchStyle" type="" overloaded="no">
-        <autodoc>SetBranchStyle(self, long style)</autodoc>
-        <paramlist>
-          <param name="style" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBranchStyle" type="long" overloaded="no">
-        <autodoc>GetBranchStyle(self) -&gt; long</autodoc>
-      </method>
-      <method name="PhysicalToLogicalAttachment" type="int" overloaded="no">
-        <autodoc>PhysicalToLogicalAttachment(self, int physicalAttachment) -&gt; int</autodoc>
-        <paramlist>
-          <param name="physicalAttachment" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LogicalToPhysicalAttachment" type="int" overloaded="no">
-        <autodoc>LogicalToPhysicalAttachment(self, int logicalAttachment) -&gt; int</autodoc>
-        <paramlist>
-          <param name="logicalAttachment" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Draggable" type="bool" overloaded="no">
-        <autodoc>Draggable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="HasDescendant" type="bool" overloaded="no">
-        <autodoc>HasDescendant(self, PyShape image) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="image" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateNewCopy" type="PyShape" overloaded="no">
-        <autodoc>CreateNewCopy(self, bool resetMapping=True, bool recompute=True) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="resetMapping" type="bool" default="True"/>
-          <param name="recompute" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="Copy" type="" overloaded="no">
-        <autodoc>Copy(self, PyShape copy)</autodoc>
-        <paramlist>
-          <param name="copy" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="CopyWithHandler" type="" overloaded="no">
-        <autodoc>CopyWithHandler(self, PyShape copy)</autodoc>
-        <paramlist>
-          <param name="copy" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="Rotate" type="" overloaded="no">
-        <autodoc>Rotate(self, double x, double y, double theta)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="theta" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRotation" type="double" overloaded="no">
-        <autodoc>GetRotation(self) -&gt; double</autodoc>
-      </method>
-      <method name="SetRotation" type="" overloaded="no">
-        <autodoc>SetRotation(self, double rotation)</autodoc>
-        <paramlist>
-          <param name="rotation" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearAttachments" type="" overloaded="no">
-        <autodoc>ClearAttachments(self)</autodoc>
-      </method>
-      <method name="Recentre" type="" overloaded="no">
-        <autodoc>Recentre(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearPointList" type="" overloaded="no">
-        <autodoc>ClearPointList(self, wxList list)</autodoc>
-        <paramlist>
-          <param name="list" type="wxList" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBackgroundPen" type="Pen" overloaded="no">
-        <autodoc>GetBackgroundPen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="GetBackgroundBrush" type="Brush" overloaded="no">
-        <autodoc>GetBackgroundBrush(self) -&gt; wxBrush</autodoc>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=False)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PseudoMetaFile" oldname="wxPseudoMetaFile" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="PseudoMetaFile" overloaded="no">
-        <autodoc>__init__(self) -&gt; PseudoMetaFile</autodoc>
-      </constructor>
-      <destructor name="~wxPseudoMetaFile" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Draw" type="" overloaded="no">
-        <autodoc>Draw(self, DC dc, double xoffset, double yoffset)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="xoffset" type="double" default=""/>
-          <param name="yoffset" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="Copy" type="" overloaded="no">
-        <autodoc>Copy(self, PseudoMetaFile copy)</autodoc>
-        <paramlist>
-          <param name="copy" type="PseudoMetaFile" default=""/>
-        </paramlist>
-      </method>
-      <method name="Scale" type="" overloaded="no">
-        <autodoc>Scale(self, double sx, double sy)</autodoc>
-        <paramlist>
-          <param name="sx" type="double" default=""/>
-          <param name="sy" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScaleTo" type="" overloaded="no">
-        <autodoc>ScaleTo(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Translate" type="" overloaded="no">
-        <autodoc>Translate(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Rotate" type="" overloaded="no">
-        <autodoc>Rotate(self, double x, double y, double theta)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="theta" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFromMetaFile" type="bool" overloaded="no">
-        <autodoc>LoadFromMetaFile(self, String filename, double width, double height) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="width" type="double" default=""/>
-          <param name="height" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBounds" type="" overloaded="no">
-        <autodoc>GetBounds(self, double minX, double minY, double maxX, double maxY)</autodoc>
-        <paramlist>
-          <param name="minX" type="double" default=""/>
-          <param name="minY" type="double" default=""/>
-          <param name="maxX" type="double" default=""/>
-          <param name="maxY" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalculateSize" type="" overloaded="no">
-        <autodoc>CalculateSize(self, PyDrawnShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="wxPyDrawnShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRotateable" type="" overloaded="no">
-        <autodoc>SetRotateable(self, bool rot)</autodoc>
-        <paramlist>
-          <param name="rot" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetRotateable" type="bool" overloaded="no">
-        <autodoc>GetRotateable(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFillBrush" type="" overloaded="no">
-        <autodoc>SetFillBrush(self, wxBrush brush)</autodoc>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFillBrush" type="Brush" overloaded="no">
-        <autodoc>GetFillBrush(self) -&gt; wxBrush</autodoc>
-      </method>
-      <method name="SetOutlinePen" type="" overloaded="no">
-        <autodoc>SetOutlinePen(self, wxPen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOutlinePen" type="Pen" overloaded="no">
-        <autodoc>GetOutlinePen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="SetOutlineOp" type="" overloaded="no">
-        <autodoc>SetOutlineOp(self, int op)</autodoc>
-        <paramlist>
-          <param name="op" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOutlineOp" type="int" overloaded="no">
-        <autodoc>GetOutlineOp(self) -&gt; int</autodoc>
-      </method>
-      <method name="IsValid" type="bool" overloaded="no">
-        <autodoc>IsValid(self) -&gt; bool</autodoc>
-      </method>
-      <method name="DrawLine" type="" overloaded="no">
-        <autodoc>DrawLine(self, Point pt1, Point pt2)</autodoc>
-        <paramlist>
-          <param name="pt1" type="Point" default=""/>
-          <param name="pt2" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRectangle" type="" overloaded="no">
-        <autodoc>DrawRectangle(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRoundedRectangle" type="" overloaded="no">
-        <autodoc>DrawRoundedRectangle(self, Rect rect, double radius)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawArc" type="" overloaded="no">
-        <autodoc>DrawArc(self, Point centrePt, Point startPt, Point endPt)</autodoc>
-        <paramlist>
-          <param name="centrePt" type="Point" default=""/>
-          <param name="startPt" type="Point" default=""/>
-          <param name="endPt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipticArc" type="" overloaded="no">
-        <autodoc>DrawEllipticArc(self, Rect rect, double startAngle, double endAngle)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="startAngle" type="double" default=""/>
-          <param name="endAngle" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipse" type="" overloaded="no">
-        <autodoc>DrawEllipse(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPoint" type="" overloaded="no">
-        <autodoc>DrawPoint(self, Point pt)</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawText" type="" overloaded="no">
-        <autodoc>DrawText(self, String text, Point pt)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLines" type="" overloaded="no">
-        <autodoc>DrawLines(self, int points, Point points_array)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPolygon" type="" overloaded="no">
-        <autodoc>DrawPolygon(self, int points, Point points_array, int flags=0)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="DrawSpline" type="" overloaded="no">
-        <autodoc>DrawSpline(self, int points, Point points_array)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRect" type="" overloaded="no">
-        <autodoc>SetClippingRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DestroyClippingRect" type="" overloaded="no">
-        <autodoc>DestroyClippingRect(self)</autodoc>
-      </method>
-      <method name="SetPen" type="" overloaded="no">
-        <autodoc>SetPen(self, wxPen pen, bool isOutline=FALSE)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-          <param name="isOutline" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="SetBrush" type="" overloaded="no">
-        <autodoc>SetBrush(self, wxBrush brush, bool isFill=FALSE)</autodoc>
-        <paramlist>
-          <param name="brush" type="Brush" default=""/>
-          <param name="isFill" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="SetFont" type="" overloaded="no">
-        <autodoc>SetFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTextColour" type="" overloaded="no">
-        <autodoc>SetTextColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundColour" type="" overloaded="no">
-        <autodoc>SetBackgroundColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBackgroundMode" type="" overloaded="no">
-        <autodoc>SetBackgroundMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyRectangleShape" oldname="wxPyRectangleShape" module="ogl">
-      <baseclass name="PyShape"/>
-      <constructor name="PyRectangleShape" overloaded="no">
-        <autodoc>__init__(self, double width=0.0, double height=0.0) -&gt; PyRectangleShape</autodoc>
-        <paramlist>
-          <param name="width" type="double" default="0.0"/>
-          <param name="height" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCornerRadius" type="" overloaded="no">
-        <autodoc>SetCornerRadius(self, double radius)</autodoc>
-        <paramlist>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCornerRadius" type="double" overloaded="no">
-        <autodoc>GetCornerRadius(self) -&gt; double</autodoc>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="wxPyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyControlPoint" oldname="wxPyControlPoint" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyControlPoint" overloaded="no">
-        <autodoc>__init__(self, PyShapeCanvas the_canvas=None, PyShape object=None, 
-    double size=0.0, double the_xoffset=0.0, double the_yoffset=0.0, 
-    int the_type=0) -&gt; PyControlPoint</autodoc>
-        <paramlist>
-          <param name="the_canvas" type="wxPyShapeCanvas" default="NULL"/>
-          <param name="object" type="PyShape" default="NULL"/>
-          <param name="size" type="double" default="0.0"/>
-          <param name="the_xoffset" type="double" default="0.0"/>
-          <param name="the_yoffset" type="double" default="0.0"/>
-          <param name="the_type" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCornerRadius" type="" overloaded="no">
-        <autodoc>SetCornerRadius(self, double radius)</autodoc>
-        <paramlist>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyBitmapShape" oldname="wxPyBitmapShape" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyBitmapShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyBitmapShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self) -&gt; Bitmap</autodoc>
-      </method>
-      <method name="GetFilename" type="String" overloaded="no">
-        <autodoc>GetFilename(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetBitmap" type="" overloaded="no">
-        <autodoc>SetBitmap(self, Bitmap bitmap)</autodoc>
-        <paramlist>
-          <param name="bitmap" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFilename" type="" overloaded="no">
-        <autodoc>SetFilename(self, String filename)</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyDrawnShape" oldname="wxPyDrawnShape" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyDrawnShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyDrawnShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalculateSize" type="" overloaded="no">
-        <autodoc>CalculateSize(self)</autodoc>
-      </method>
-      <method name="DestroyClippingRect" type="" overloaded="no">
-        <autodoc>DestroyClippingRect(self)</autodoc>
-      </method>
-      <method name="DrawArc" type="" overloaded="no">
-        <autodoc>DrawArc(self, Point centrePoint, Point startPoint, Point endPoint)</autodoc>
-        <paramlist>
-          <param name="centrePoint" type="Point" default=""/>
-          <param name="startPoint" type="Point" default=""/>
-          <param name="endPoint" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawAtAngle" type="" overloaded="no">
-        <autodoc>DrawAtAngle(self, int angle)</autodoc>
-        <paramlist>
-          <param name="angle" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawEllipticArc" type="" overloaded="no">
-        <autodoc>DrawEllipticArc(self, Rect rect, double startAngle, double endAngle)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="startAngle" type="double" default=""/>
-          <param name="endAngle" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLine" type="" overloaded="no">
-        <autodoc>DrawLine(self, Point point1, Point point2)</autodoc>
-        <paramlist>
-          <param name="point1" type="Point" default=""/>
-          <param name="point2" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawLines" type="" overloaded="no">
-        <autodoc>DrawLines(self, int points, Point points_array)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPoint" type="" overloaded="no">
-        <autodoc>DrawPoint(self, Point point)</autodoc>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawPolygon" type="" overloaded="no">
-        <autodoc>DrawPolygon(self, int points, Point points_array, int flags=0)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="DrawRectangle" type="" overloaded="no">
-        <autodoc>DrawRectangle(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRoundedRectangle" type="" overloaded="no">
-        <autodoc>DrawRoundedRectangle(self, Rect rect, double radius)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-          <param name="radius" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawSpline" type="" overloaded="no">
-        <autodoc>DrawSpline(self, int points, Point points_array)</autodoc>
-        <paramlist>
-          <param name="points" type="int" default=""/>
-          <param name="points_array" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawText" type="" overloaded="no">
-        <autodoc>DrawText(self, String text, Point point)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="point" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAngle" type="int" overloaded="no">
-        <autodoc>GetAngle(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMetaFile" type="PseudoMetaFile" overloaded="no">
-        <autodoc>GetMetaFile(self) -&gt; PseudoMetaFile</autodoc>
-      </method>
-      <method name="GetRotation" type="double" overloaded="no">
-        <autodoc>GetRotation(self) -&gt; double</autodoc>
-      </method>
-      <method name="LoadFromMetaFile" type="bool" overloaded="no">
-        <autodoc>LoadFromMetaFile(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="Rotate" type="" overloaded="no">
-        <autodoc>Rotate(self, double x, double y, double theta)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="theta" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetClippingRect" type="" overloaded="no">
-        <autodoc>SetClippingRect(self, Rect rect)</autodoc>
-        <paramlist>
-          <param name="rect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnBackgroundColour" type="" overloaded="no">
-        <autodoc>SetDrawnBackgroundColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnBackgroundMode" type="" overloaded="no">
-        <autodoc>SetDrawnBackgroundMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnBrush" type="" overloaded="no">
-        <autodoc>SetDrawnBrush(self, wxBrush pen, bool isOutline=FALSE)</autodoc>
-        <paramlist>
-          <param name="pen" type="Brush" default=""/>
-          <param name="isOutline" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnFont" type="" overloaded="no">
-        <autodoc>SetDrawnFont(self, Font font)</autodoc>
-        <paramlist>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnPen" type="" overloaded="no">
-        <autodoc>SetDrawnPen(self, wxPen pen, bool isOutline=FALSE)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-          <param name="isOutline" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="SetDrawnTextColour" type="" overloaded="no">
-        <autodoc>SetDrawnTextColour(self, Colour colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="Scale" type="" overloaded="no">
-        <autodoc>Scale(self, double sx, double sy)</autodoc>
-        <paramlist>
-          <param name="sx" type="double" default=""/>
-          <param name="sy" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSaveToFile" type="" overloaded="no">
-        <autodoc>SetSaveToFile(self, bool save)</autodoc>
-        <paramlist>
-          <param name="save" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Translate" type="" overloaded="no">
-        <autodoc>Translate(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="OGLConstraint" oldname="wxOGLConstraint" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="OGLConstraint" overloaded="no">
-        <autodoc>__init__(self, int type, PyShape constraining, PyObject constrained) -&gt; OGLConstraint</autodoc>
-        <paramlist>
-          <param name="type" type="int" default=""/>
-          <param name="constraining" type="PyShape" default=""/>
-          <param name="constrained" type="PyObject" default=""/>
-        </paramlist>
-      </constructor>
-      <method name="Evaluate" type="bool" overloaded="no">
-        <autodoc>Evaluate(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSpacing" type="" overloaded="no">
-        <autodoc>SetSpacing(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="Equals" type="bool" overloaded="no">
-        <autodoc>Equals(self, double a, double b) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="a" type="double" default=""/>
-          <param name="b" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyCompositeShape" oldname="wxPyCompositeShape" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyCompositeShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyCompositeShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddChild" type="" overloaded="no">
-        <autodoc>AddChild(self, PyShape child, PyShape addAfter=None)</autodoc>
-        <paramlist>
-          <param name="child" type="PyShape" default=""/>
-          <param name="addAfter" type="PyShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AddConstraint" type="OGLConstraint" overloaded="no">
-        <autodoc>AddConstraint(self, OGLConstraint constraint) -&gt; OGLConstraint</autodoc>
-        <paramlist>
-          <param name="constraint" type="OGLConstraint" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddConstrainedShapes" type="OGLConstraint" overloaded="no">
-        <autodoc>AddConstrainedShapes(self, int type, PyShape constraining, PyObject constrained) -&gt; OGLConstraint</autodoc>
-        <paramlist>
-          <param name="type" type="int" default=""/>
-          <param name="constraining" type="PyShape" default=""/>
-          <param name="constrained" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddSimpleConstraint" type="OGLConstraint" overloaded="no">
-        <autodoc>AddSimpleConstraint(self, int type, PyShape constraining, PyShape constrained) -&gt; OGLConstraint</autodoc>
-        <paramlist>
-          <param name="type" type="int" default=""/>
-          <param name="constraining" type="PyShape" default=""/>
-          <param name="constrained" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="CalculateSize" type="" overloaded="no">
-        <autodoc>CalculateSize(self)</autodoc>
-      </method>
-      <method name="ContainsDivision" type="bool" overloaded="no">
-        <autodoc>ContainsDivision(self, PyDivisionShape division) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="division" type="wxPyDivisionShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteConstraint" type="" overloaded="no">
-        <autodoc>DeleteConstraint(self, OGLConstraint constraint)</autodoc>
-        <paramlist>
-          <param name="constraint" type="OGLConstraint" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteConstraintsInvolvingChild" type="" overloaded="no">
-        <autodoc>DeleteConstraintsInvolvingChild(self, PyShape child)</autodoc>
-        <paramlist>
-          <param name="child" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindContainerImage" type="PyShape" overloaded="no">
-        <autodoc>FindContainerImage(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="GetConstraints" type="PyObject" overloaded="no">
-        <autodoc>GetConstraints(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetDivisions" type="PyObject" overloaded="no">
-        <autodoc>GetDivisions(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="MakeContainer" type="" overloaded="no">
-        <autodoc>MakeContainer(self)</autodoc>
-      </method>
-      <method name="Recompute" type="bool" overloaded="no">
-        <autodoc>Recompute(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RemoveChild" type="" overloaded="no">
-        <autodoc>RemoveChild(self, PyShape child)</autodoc>
-        <paramlist>
-          <param name="child" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyDividedShape" oldname="wxPyDividedShape" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyDividedShape" overloaded="no">
-        <autodoc>__init__(self, double width=0.0, double height=0.0) -&gt; PyDividedShape</autodoc>
-        <paramlist>
-          <param name="width" type="double" default="0.0"/>
-          <param name="height" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="EditRegions" type="" overloaded="no">
-        <autodoc>EditRegions(self)</autodoc>
-      </method>
-      <method name="SetRegionSizes" type="" overloaded="no">
-        <autodoc>SetRegionSizes(self)</autodoc>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyDivisionShape" oldname="wxPyDivisionShape" module="ogl">
-      <baseclass name="PyCompositeShape"/>
-      <constructor name="PyDivisionShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyDivisionShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustBottom" type="" overloaded="no">
-        <autodoc>AdjustBottom(self, double bottom, bool test)</autodoc>
-        <paramlist>
-          <param name="bottom" type="double" default=""/>
-          <param name="test" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustLeft" type="" overloaded="no">
-        <autodoc>AdjustLeft(self, double left, bool test)</autodoc>
-        <paramlist>
-          <param name="left" type="double" default=""/>
-          <param name="test" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustRight" type="" overloaded="no">
-        <autodoc>AdjustRight(self, double right, bool test)</autodoc>
-        <paramlist>
-          <param name="right" type="double" default=""/>
-          <param name="test" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AdjustTop" type="" overloaded="no">
-        <autodoc>AdjustTop(self, double top, bool test)</autodoc>
-        <paramlist>
-          <param name="top" type="double" default=""/>
-          <param name="test" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Divide" type="" overloaded="no">
-        <autodoc>Divide(self, int direction)</autodoc>
-        <paramlist>
-          <param name="direction" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EditEdge" type="" overloaded="no">
-        <autodoc>EditEdge(self, int side)</autodoc>
-        <paramlist>
-          <param name="side" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBottomSide" type="PyDivisionShape" overloaded="no">
-        <autodoc>GetBottomSide(self) -&gt; PyDivisionShape</autodoc>
-      </method>
-      <method name="GetHandleSide" type="int" overloaded="no">
-        <autodoc>GetHandleSide(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLeftSide" type="PyDivisionShape" overloaded="no">
-        <autodoc>GetLeftSide(self) -&gt; PyDivisionShape</autodoc>
-      </method>
-      <method name="GetLeftSideColour" type="String" overloaded="no">
-        <autodoc>GetLeftSideColour(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetLeftSidePen" type="Pen" overloaded="no">
-        <autodoc>GetLeftSidePen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="GetRightSide" type="PyDivisionShape" overloaded="no">
-        <autodoc>GetRightSide(self) -&gt; PyDivisionShape</autodoc>
-      </method>
-      <method name="GetTopSide" type="PyDivisionShape" overloaded="no">
-        <autodoc>GetTopSide(self) -&gt; PyDivisionShape</autodoc>
-      </method>
-      <method name="GetTopSidePen" type="Pen" overloaded="no">
-        <autodoc>GetTopSidePen(self) -&gt; wxPen</autodoc>
-      </method>
-      <method name="ResizeAdjoining" type="" overloaded="no">
-        <autodoc>ResizeAdjoining(self, int side, double newPos, bool test)</autodoc>
-        <paramlist>
-          <param name="side" type="int" default=""/>
-          <param name="newPos" type="double" default=""/>
-          <param name="test" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="PopupMenu" type="" overloaded="no">
-        <autodoc>PopupMenu(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetBottomSide" type="" overloaded="no">
-        <autodoc>SetBottomSide(self, PyDivisionShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyDivisionShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHandleSide" type="" overloaded="no">
-        <autodoc>SetHandleSide(self, int side)</autodoc>
-        <paramlist>
-          <param name="side" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLeftSide" type="" overloaded="no">
-        <autodoc>SetLeftSide(self, PyDivisionShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyDivisionShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLeftSideColour" type="" overloaded="no">
-        <autodoc>SetLeftSideColour(self, String colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLeftSidePen" type="" overloaded="no">
-        <autodoc>SetLeftSidePen(self, wxPen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetRightSide" type="" overloaded="no">
-        <autodoc>SetRightSide(self, PyDivisionShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyDivisionShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTopSide" type="" overloaded="no">
-        <autodoc>SetTopSide(self, PyDivisionShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyDivisionShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTopSideColour" type="" overloaded="no">
-        <autodoc>SetTopSideColour(self, String colour)</autodoc>
-        <paramlist>
-          <param name="colour" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTopSidePen" type="" overloaded="no">
-        <autodoc>SetTopSidePen(self, wxPen pen)</autodoc>
-        <paramlist>
-          <param name="pen" type="Pen" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyEllipseShape" oldname="wxPyEllipseShape" module="ogl">
-      <baseclass name="PyShape"/>
-      <constructor name="PyEllipseShape" overloaded="no">
-        <autodoc>__init__(self, double width=0.0, double height=0.0) -&gt; PyEllipseShape</autodoc>
-        <paramlist>
-          <param name="width" type="double" default="0.0"/>
-          <param name="height" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyCircleShape" oldname="wxPyCircleShape" module="ogl">
-      <baseclass name="PyEllipseShape"/>
-      <constructor name="PyCircleShape" overloaded="no">
-        <autodoc>__init__(self, double width=0.0) -&gt; PyCircleShape</autodoc>
-        <paramlist>
-          <param name="width" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ArrowHead" oldname="wxArrowHead" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="ArrowHead" overloaded="no">
-        <autodoc>__init__(self, int type=0, int end=0, double size=0.0, double dist=0.0, 
-    String name=EmptyString, PseudoMetaFile mf=None, 
-    long arrowId=-1) -&gt; ArrowHead</autodoc>
-        <paramlist>
-          <param name="type" type="int" default="0"/>
-          <param name="end" type="int" default="0"/>
-          <param name="size" type="double" default="0.0"/>
-          <param name="dist" type="double" default="0.0"/>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-          <param name="mf" type="PseudoMetaFile" default="NULL"/>
-          <param name="arrowId" type="long" default="-1"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxArrowHead" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="_GetType" type="int" overloaded="no">
-        <autodoc>_GetType(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetPosition" type="int" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetXOffset" type="double" overloaded="no">
-        <autodoc>GetXOffset(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetYOffset" type="double" overloaded="no">
-        <autodoc>GetYOffset(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetSpacing" type="double" overloaded="no">
-        <autodoc>GetSpacing(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetSize" type="double" overloaded="no">
-        <autodoc>GetSize(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetXOffset" type="" overloaded="no">
-        <autodoc>SetXOffset(self, double x)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetYOffset" type="" overloaded="no">
-        <autodoc>SetYOffset(self, double y)</autodoc>
-        <paramlist>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMetaFile" type="PseudoMetaFile" overloaded="no">
-        <autodoc>GetMetaFile(self) -&gt; PseudoMetaFile</autodoc>
-      </method>
-      <method name="GetId" type="long" overloaded="no">
-        <autodoc>GetId(self) -&gt; long</autodoc>
-      </method>
-      <method name="GetArrowEnd" type="int" overloaded="no">
-        <autodoc>GetArrowEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetArrowSize" type="double" overloaded="no">
-        <autodoc>GetArrowSize(self) -&gt; double</autodoc>
-      </method>
-      <method name="SetSize" type="" overloaded="no">
-        <autodoc>SetSize(self, double size)</autodoc>
-        <paramlist>
-          <param name="size" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSpacing" type="" overloaded="no">
-        <autodoc>SetSpacing(self, double sp)</autodoc>
-        <paramlist>
-          <param name="sp" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyLineShape" oldname="wxPyLineShape" module="ogl">
-      <baseclass name="PyShape"/>
-      <constructor name="PyLineShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyLineShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddArrow" type="" overloaded="no">
-        <autodoc>AddArrow(self, int type, int end=ARROW_POSITION_END, double arrowSize=10.0, 
-    double xOffset=0.0, String name=EmptyString, 
-    PseudoMetaFile mf=None, long arrowId=-1)</autodoc>
-        <paramlist>
-          <param name="type" type="int" default=""/>
-          <param name="end" type="int" default="ARROW_POSITION_END"/>
-          <param name="arrowSize" type="double" default="10.0"/>
-          <param name="xOffset" type="double" default="0.0"/>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-          <param name="mf" type="PseudoMetaFile" default="NULL"/>
-          <param name="arrowId" type="long" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="AddArrowOrdered" type="" overloaded="no">
-        <autodoc>AddArrowOrdered(self, ArrowHead arrow, PyObject referenceList, int end)</autodoc>
-        <paramlist>
-          <param name="arrow" type="ArrowHead" default=""/>
-          <param name="referenceList" type="PyObject" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearArrow" type="bool" overloaded="no">
-        <autodoc>ClearArrow(self, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearArrowsAtPosition" type="" overloaded="no">
-        <autodoc>ClearArrowsAtPosition(self, int position=-1)</autodoc>
-        <paramlist>
-          <param name="position" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="DrawArrow" type="" overloaded="no">
-        <autodoc>DrawArrow(self, DC dc, ArrowHead arrow, double xOffset, bool proportionalOffset)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="arrow" type="ArrowHead" default=""/>
-          <param name="xOffset" type="double" default=""/>
-          <param name="proportionalOffset" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteArrowHeadId" type="bool" overloaded="no">
-        <autodoc>DeleteArrowHeadId(self, long arrowId) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="arrowId" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteArrowHead" type="bool" overloaded="no">
-        <autodoc>DeleteArrowHead(self, int position, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="position" type="int" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteLineControlPoint" type="bool" overloaded="no">
-        <autodoc>DeleteLineControlPoint(self) -&gt; bool</autodoc>
-      </method>
-      <method name="DrawArrows" type="" overloaded="no">
-        <autodoc>DrawArrows(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="DrawRegion" type="" overloaded="no">
-        <autodoc>DrawRegion(self, DC dc, ShapeRegion region, double x, double y)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="region" type="ShapeRegion" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="EraseRegion" type="" overloaded="no">
-        <autodoc>EraseRegion(self, DC dc, ShapeRegion region, double x, double y)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="region" type="ShapeRegion" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindArrowHeadId" type="ArrowHead" overloaded="no">
-        <autodoc>FindArrowHeadId(self, long arrowId) -&gt; ArrowHead</autodoc>
-        <paramlist>
-          <param name="arrowId" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindArrowHead" type="ArrowHead" overloaded="no">
-        <autodoc>FindArrowHead(self, int position, String name) -&gt; ArrowHead</autodoc>
-        <paramlist>
-          <param name="position" type="int" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindLineEndPoints" type="" overloaded="no">
-        <autodoc>FindLineEndPoints(self, double OUTPUT, double OUTPUT, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindLinePosition" type="int" overloaded="no">
-        <autodoc>FindLinePosition(self, double x, double y) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindMinimumWidth" type="double" overloaded="no">
-        <autodoc>FindMinimumWidth(self) -&gt; double</autodoc>
-      </method>
-      <method name="FindNth" type="" overloaded="no">
-        <autodoc>FindNth(self, PyShape image, int OUTPUT, int OUTPUT, bool incoming)</autodoc>
-        <paramlist>
-          <param name="image" type="PyShape" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="incoming" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAttachmentFrom" type="int" overloaded="no">
-        <autodoc>GetAttachmentFrom(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAttachmentTo" type="int" overloaded="no">
-        <autodoc>GetAttachmentTo(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetEnds" type="" overloaded="no">
-        <autodoc>GetEnds(self, double OUTPUT, double OUTPUT, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFrom" type="PyShape" overloaded="no">
-        <autodoc>GetFrom(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="GetLabelPosition" type="" overloaded="no">
-        <autodoc>GetLabelPosition(self, int position, double OUTPUT, double OUTPUT)</autodoc>
-        <paramlist>
-          <param name="position" type="int" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-          <param name="OUTPUT" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextControlPoint" type="RealPoint" overloaded="no">
-        <autodoc>GetNextControlPoint(self, PyShape shape) -&gt; RealPoint</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTo" type="PyShape" overloaded="no">
-        <autodoc>GetTo(self) -&gt; PyShape</autodoc>
-      </method>
-      <method name="Initialise" type="" overloaded="no">
-        <autodoc>Initialise(self)</autodoc>
-      </method>
-      <method name="InsertLineControlPoint" type="" overloaded="no">
-        <autodoc>InsertLineControlPoint(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsEnd" type="bool" overloaded="no">
-        <autodoc>IsEnd(self, PyShape shape) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSpline" type="bool" overloaded="no">
-        <autodoc>IsSpline(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MakeLineControlPoints" type="" overloaded="no">
-        <autodoc>MakeLineControlPoints(self, int n)</autodoc>
-        <paramlist>
-          <param name="n" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineControlPoints" type="PyObject" overloaded="no">
-        <autodoc>GetLineControlPoints(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="SetLineControlPoints" type="" overloaded="no">
-        <autodoc>SetLineControlPoints(self, PyObject list)</autodoc>
-        <paramlist>
-          <param name="list" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttachmentFrom" type="" overloaded="no">
-        <autodoc>SetAttachmentFrom(self, int fromAttach)</autodoc>
-        <paramlist>
-          <param name="fromAttach" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttachments" type="" overloaded="no">
-        <autodoc>SetAttachments(self, int fromAttach, int toAttach)</autodoc>
-        <paramlist>
-          <param name="fromAttach" type="int" default=""/>
-          <param name="toAttach" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAttachmentTo" type="" overloaded="no">
-        <autodoc>SetAttachmentTo(self, int toAttach)</autodoc>
-        <paramlist>
-          <param name="toAttach" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEnds" type="" overloaded="no">
-        <autodoc>SetEnds(self, double x1, double y1, double x2, double y2)</autodoc>
-        <paramlist>
-          <param name="x1" type="double" default=""/>
-          <param name="y1" type="double" default=""/>
-          <param name="x2" type="double" default=""/>
-          <param name="y2" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFrom" type="" overloaded="no">
-        <autodoc>SetFrom(self, PyShape object)</autodoc>
-        <paramlist>
-          <param name="object" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetIgnoreOffsets" type="" overloaded="no">
-        <autodoc>SetIgnoreOffsets(self, bool ignore)</autodoc>
-        <paramlist>
-          <param name="ignore" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSpline" type="" overloaded="no">
-        <autodoc>SetSpline(self, bool spline)</autodoc>
-        <paramlist>
-          <param name="spline" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTo" type="" overloaded="no">
-        <autodoc>SetTo(self, PyShape object)</autodoc>
-        <paramlist>
-          <param name="object" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="Straighten" type="" overloaded="no">
-        <autodoc>Straighten(self, DC dc=None)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Unlink" type="" overloaded="no">
-        <autodoc>Unlink(self)</autodoc>
-      </method>
-      <method name="SetAlignmentOrientation" type="" overloaded="no">
-        <autodoc>SetAlignmentOrientation(self, bool isEnd, bool isHoriz)</autodoc>
-        <paramlist>
-          <param name="isEnd" type="bool" default=""/>
-          <param name="isHoriz" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlignmentType" type="" overloaded="no">
-        <autodoc>SetAlignmentType(self, bool isEnd, int alignType)</autodoc>
-        <paramlist>
-          <param name="isEnd" type="bool" default=""/>
-          <param name="alignType" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignmentOrientation" type="bool" overloaded="no">
-        <autodoc>GetAlignmentOrientation(self, bool isEnd) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="isEnd" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignmentType" type="int" overloaded="no">
-        <autodoc>GetAlignmentType(self, bool isEnd) -&gt; int</autodoc>
-        <paramlist>
-          <param name="isEnd" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetAlignmentStart" type="int" overloaded="no">
-        <autodoc>GetAlignmentStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAlignmentEnd" type="int" overloaded="no">
-        <autodoc>GetAlignmentEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyPolygonShape" oldname="wxPyPolygonShape" module="ogl">
-      <baseclass name="PyShape"/>
-      <constructor name="PyPolygonShape" overloaded="no">
-        <autodoc>__init__(self) -&gt; PyPolygonShape</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="Create" type="PyObject" overloaded="no">
-        <autodoc>Create(self, PyObject points) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="points" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddPolygonPoint" type="" overloaded="no">
-        <autodoc>AddPolygonPoint(self, int pos=0)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="CalculatePolygonCentre" type="" overloaded="no">
-        <autodoc>CalculatePolygonCentre(self)</autodoc>
-      </method>
-      <method name="DeletePolygonPoint" type="" overloaded="no">
-        <autodoc>DeletePolygonPoint(self, int pos=0)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetPoints" type="PyObject" overloaded="no">
-        <autodoc>GetPoints(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetOriginalPoints" type="PyObject" overloaded="no">
-        <autodoc>GetOriginalPoints(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetOriginalWidth" type="double" overloaded="no">
-        <autodoc>GetOriginalWidth(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetOriginalHeight" type="double" overloaded="no">
-        <autodoc>GetOriginalHeight(self) -&gt; double</autodoc>
-      </method>
-      <method name="SetOriginalWidth" type="" overloaded="no">
-        <autodoc>SetOriginalWidth(self, double w)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetOriginalHeight" type="" overloaded="no">
-        <autodoc>SetOriginalHeight(self, double h)</autodoc>
-        <paramlist>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="UpdateOriginalPoints" type="" overloaded="no">
-        <autodoc>UpdateOriginalPoints(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyTextShape" oldname="wxPyTextShape" module="ogl">
-      <baseclass name="PyRectangleShape"/>
-      <constructor name="PyTextShape" overloaded="no">
-        <autodoc>__init__(self, double width=0.0, double height=0.0) -&gt; PyTextShape</autodoc>
-        <paramlist>
-          <param name="width" type="double" default="0.0"/>
-          <param name="height" type="double" default="0.0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDelete" type="" overloaded="no">
-        <autodoc>base_OnDelete(self)</autodoc>
-      </method>
-      <method name="base_OnDraw" type="" overloaded="no">
-        <autodoc>base_OnDraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawContents" type="" overloaded="no">
-        <autodoc>base_OnDrawContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawBranches" type="" overloaded="no">
-        <autodoc>base_OnDrawBranches(self, DC dc, bool erase=FALSE)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="erase" type="bool" default="FALSE"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLinks" type="" overloaded="no">
-        <autodoc>base_OnMoveLinks(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnErase" type="" overloaded="no">
-        <autodoc>base_OnErase(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseContents" type="" overloaded="no">
-        <autodoc>base_OnEraseContents(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnHighlight" type="" overloaded="no">
-        <autodoc>base_OnHighlight(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftDoubleClick" type="" overloaded="no">
-        <autodoc>base_OnLeftDoubleClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSize" type="" overloaded="no">
-        <autodoc>base_OnSize(self, double x, double y)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePre" type="bool" overloaded="no">
-        <autodoc>base_OnMovePre(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnMovePost" type="" overloaded="no">
-        <autodoc>base_OnMovePost(self, DC dc, double x, double y, double old_x, double old_y, 
-    bool display=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="old_x" type="double" default=""/>
-          <param name="old_y" type="double" default=""/>
-          <param name="display" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0, int attachment=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawOutline" type="" overloaded="no">
-        <autodoc>base_OnDrawOutline(self, DC dc, double x, double y, double w, double h)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnDrawControlPoints" type="" overloaded="no">
-        <autodoc>base_OnDrawControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEraseControlPoints" type="" overloaded="no">
-        <autodoc>base_OnEraseControlPoints(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnMoveLink" type="" overloaded="no">
-        <autodoc>base_OnMoveLink(self, DC dc, bool moveControlPoints=True)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="moveControlPoints" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingDragLeft(self, PyControlPoint pt, bool draw, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingBeginDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnSizingEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnSizingEndDragLeft(self, PyControlPoint pt, double x, double y, int keys=0, 
-    int attachment=0)</autodoc>
-        <paramlist>
-          <param name="pt" type="PyControlPoint" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-          <param name="attachment" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginSize" type="" overloaded="no">
-        <autodoc>base_OnBeginSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndSize" type="" overloaded="no">
-        <autodoc>base_OnEndSize(self, double w, double h)</autodoc>
-        <paramlist>
-          <param name="w" type="double" default=""/>
-          <param name="h" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="Diagram" oldname="wxDiagram" module="ogl">
-      <baseclass name="Object"/>
-      <constructor name="Diagram" overloaded="no">
-        <autodoc>__init__(self) -&gt; Diagram</autodoc>
-      </constructor>
-      <method name="AddShape" type="" overloaded="no">
-        <autodoc>AddShape(self, PyShape shape, PyShape addAfter=None)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-          <param name="addAfter" type="PyShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllShapes" type="" overloaded="no">
-        <autodoc>DeleteAllShapes(self)</autodoc>
-      </method>
-      <method name="DrawOutline" type="" overloaded="no">
-        <autodoc>DrawOutline(self, DC dc, double x1, double y1, double x2, double y2)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-          <param name="x1" type="double" default=""/>
-          <param name="y1" type="double" default=""/>
-          <param name="x2" type="double" default=""/>
-          <param name="y2" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindShape" type="PyShape" overloaded="no">
-        <autodoc>FindShape(self, long id) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="id" type="long" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCanvas" type="wxPyShapeCanvas" overloaded="no">
-        <autodoc>GetCanvas(self) -&gt; PyShapeCanvas</autodoc>
-      </method>
-      <method name="GetCount" type="int" overloaded="no">
-        <autodoc>GetCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetGridSpacing" type="double" overloaded="no">
-        <autodoc>GetGridSpacing(self) -&gt; double</autodoc>
-      </method>
-      <method name="GetMouseTolerance" type="int" overloaded="no">
-        <autodoc>GetMouseTolerance(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetShapeList" type="PyObject" overloaded="no">
-        <autodoc>GetShapeList(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetQuickEditMode" type="bool" overloaded="no">
-        <autodoc>GetQuickEditMode(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetSnapToGrid" type="bool" overloaded="no">
-        <autodoc>GetSnapToGrid(self) -&gt; bool</autodoc>
-      </method>
-      <method name="InsertShape" type="" overloaded="no">
-        <autodoc>InsertShape(self, PyShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="RecentreAll" type="" overloaded="no">
-        <autodoc>RecentreAll(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="Redraw" type="" overloaded="no">
-        <autodoc>Redraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveAllShapes" type="" overloaded="no">
-        <autodoc>RemoveAllShapes(self)</autodoc>
-      </method>
-      <method name="RemoveShape" type="" overloaded="no">
-        <autodoc>RemoveShape(self, PyShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCanvas" type="" overloaded="no">
-        <autodoc>SetCanvas(self, PyShapeCanvas canvas)</autodoc>
-        <paramlist>
-          <param name="canvas" type="wxPyShapeCanvas" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetGridSpacing" type="" overloaded="no">
-        <autodoc>SetGridSpacing(self, double spacing)</autodoc>
-        <paramlist>
-          <param name="spacing" type="double" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMouseTolerance" type="" overloaded="no">
-        <autodoc>SetMouseTolerance(self, int tolerance)</autodoc>
-        <paramlist>
-          <param name="tolerance" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetQuickEditMode" type="" overloaded="no">
-        <autodoc>SetQuickEditMode(self, bool mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSnapToGrid" type="" overloaded="no">
-        <autodoc>SetSnapToGrid(self, bool snap)</autodoc>
-        <paramlist>
-          <param name="snap" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowAll" type="" overloaded="no">
-        <autodoc>ShowAll(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="Snap" type="" overloaded="no">
-        <autodoc>Snap(self, double INOUT, double INOUT)</autodoc>
-        <paramlist>
-          <param name="INOUT" type="double" default=""/>
-          <param name="INOUT" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="PyShapeCanvas" oldname="wxPyShapeCanvas" module="ogl">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="PyShapeCanvas" overloaded="no">
-        <autodoc>__init__(self, Window parent=None, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=BORDER, 
-    String name=wxPyShapeCanvasNameStr) -&gt; PyShapeCanvas</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default="NULL"/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxBORDER"/>
-          <param name="name" type="String" default="wxPyShapeCanvasNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddShape" type="" overloaded="no">
-        <autodoc>AddShape(self, PyShape shape, PyShape addAfter=None)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-          <param name="addAfter" type="PyShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="FindShape" type="PyShape" overloaded="no">
-        <autodoc>FindShape(self, double x1, double y, int OUTPUT, wxClassInfo info=None, 
-    PyShape notImage=None) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="x1" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="info" type="wxClassInfo" default="NULL"/>
-          <param name="notImage" type="PyShape" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="FindFirstSensitiveShape" type="PyShape" overloaded="no">
-        <autodoc>FindFirstSensitiveShape(self, double x1, double y, int OUTPUT, int op) -&gt; PyShape</autodoc>
-        <paramlist>
-          <param name="x1" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="op" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDiagram" type="Diagram" overloaded="no">
-        <autodoc>GetDiagram(self) -&gt; Diagram</autodoc>
-      </method>
-      <method name="GetQuickEditMode" type="bool" overloaded="no">
-        <autodoc>GetQuickEditMode(self) -&gt; bool</autodoc>
-      </method>
-      <method name="InsertShape" type="" overloaded="no">
-        <autodoc>InsertShape(self, PyShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragLeft" type="" overloaded="no">
-        <autodoc>base_OnBeginDragLeft(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnBeginDragRight" type="" overloaded="no">
-        <autodoc>base_OnBeginDragRight(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragLeft" type="" overloaded="no">
-        <autodoc>base_OnEndDragLeft(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnEndDragRight" type="" overloaded="no">
-        <autodoc>base_OnEndDragRight(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragLeft" type="" overloaded="no">
-        <autodoc>base_OnDragLeft(self, bool draw, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnDragRight" type="" overloaded="no">
-        <autodoc>base_OnDragRight(self, bool draw, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="draw" type="bool" default=""/>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnLeftClick" type="" overloaded="no">
-        <autodoc>base_OnLeftClick(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="base_OnRightClick" type="" overloaded="no">
-        <autodoc>base_OnRightClick(self, double x, double y, int keys=0)</autodoc>
-        <paramlist>
-          <param name="x" type="double" default=""/>
-          <param name="y" type="double" default=""/>
-          <param name="keys" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="Redraw" type="" overloaded="no">
-        <autodoc>Redraw(self, DC dc)</autodoc>
-        <paramlist>
-          <param name="dc" type="DC" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveShape" type="" overloaded="no">
-        <autodoc>RemoveShape(self, PyShape shape)</autodoc>
-        <paramlist>
-          <param name="shape" type="PyShape" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDiagram" type="" overloaded="no">
-        <autodoc>SetDiagram(self, Diagram diagram)</autodoc>
-        <paramlist>
-          <param name="diagram" type="Diagram" default=""/>
-        </paramlist>
-      </method>
-      <method name="Snap" type="" overloaded="no">
-        <autodoc>Snap(self, double INOUT, double INOUT)</autodoc>
-        <paramlist>
-          <param name="INOUT" type="double" default=""/>
-          <param name="INOUT" type="double" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-# Aliases    
-ShapeCanvas =       PyShapeCanvas
-ShapeEvtHandler =   PyShapeEvtHandler
-Shape =             PyShape
-RectangleShape =    PyRectangleShape
-BitmapShape =       PyBitmapShape
-DrawnShape =        PyDrawnShape
-CompositeShape =    PyCompositeShape
-DividedShape =      PyDividedShape
-DivisionShape =     PyDivisionShape
-EllipseShape =      PyEllipseShape
-CircleShape =       PyCircleShape
-LineShape =         PyLineShape
-PolygonShape =      PyPolygonShape
-TextShape =         PyTextShape
-ControlPoint =      PyControlPoint
-</pythoncode>
-    <method name="OGLInitialize" oldname="wxOGLInitialize" type="" overloaded="no">
-      <autodoc>OGLInitialize()</autodoc>
-    </method>
-    <method name="OGLCleanUp" oldname="wxOGLCleanUp" type="" overloaded="no">
-      <autodoc>OGLCleanUp()</autodoc>
-    </method>
-  </module>
-  <module name="stc">
-    <import name="_core"/>
-    <import name="_misc"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <class name="StyledTextCtrl" oldname="wxStyledTextCtrl" module="stc">
-      <baseclass name="Control"/>
-      <constructor name="StyledTextCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=STCNameStr) -&gt; StyledTextCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxPySTCNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreStyledTextCtrl" overloaded="no">
-        <autodoc>PreStyledTextCtrl() -&gt; StyledTextCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=ID_ANY, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0, String name=wxSTCNameStr)</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="wxID_ANY"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-          <param name="name" type="String" default="wxSTCNameStr"/>
-        </paramlist>
-      </method>
-      <method name="AddText" type="" overloaded="no">
-        <autodoc>AddText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddStyledText" type="" overloaded="no">
-        <autodoc>AddStyledText(self, wxMemoryBuffer data)</autodoc>
-        <paramlist>
-          <param name="data" type="wxMemoryBuffer" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertText" type="" overloaded="no">
-        <autodoc>InsertText(self, int pos, String text)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearAll" type="" overloaded="no">
-        <autodoc>ClearAll(self)</autodoc>
-      </method>
-      <method name="ClearDocumentStyle" type="" overloaded="no">
-        <autodoc>ClearDocumentStyle(self)</autodoc>
-      </method>
-      <method name="GetLength" type="int" overloaded="no">
-        <autodoc>GetLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCharAt" type="int" overloaded="no">
-        <autodoc>GetCharAt(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentPos" type="int" overloaded="no">
-        <autodoc>GetCurrentPos(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetAnchor" type="int" overloaded="no">
-        <autodoc>GetAnchor(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetStyleAt" type="int" overloaded="no">
-        <autodoc>GetStyleAt(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="Redo" type="" overloaded="no">
-        <autodoc>Redo(self)</autodoc>
-      </method>
-      <method name="SetUndoCollection" type="" overloaded="no">
-        <autodoc>SetUndoCollection(self, bool collectUndo)</autodoc>
-        <paramlist>
-          <param name="collectUndo" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="" overloaded="no">
-        <autodoc>SelectAll(self)</autodoc>
-      </method>
-      <method name="SetSavePoint" type="" overloaded="no">
-        <autodoc>SetSavePoint(self)</autodoc>
-      </method>
-      <method name="GetStyledText" type="wxMemoryBuffer" overloaded="no">
-        <autodoc>GetStyledText(self, int startPos, int endPos) -&gt; wxMemoryBuffer</autodoc>
-        <paramlist>
-          <param name="startPos" type="int" default=""/>
-          <param name="endPos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanRedo" type="bool" overloaded="no">
-        <autodoc>CanRedo(self) -&gt; bool</autodoc>
-      </method>
-      <method name="MarkerLineFromHandle" type="int" overloaded="no">
-        <autodoc>MarkerLineFromHandle(self, int handle) -&gt; int</autodoc>
-        <paramlist>
-          <param name="handle" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerDeleteHandle" type="" overloaded="no">
-        <autodoc>MarkerDeleteHandle(self, int handle)</autodoc>
-        <paramlist>
-          <param name="handle" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUndoCollection" type="bool" overloaded="no">
-        <autodoc>GetUndoCollection(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetViewWhiteSpace" type="int" overloaded="no">
-        <autodoc>GetViewWhiteSpace(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetViewWhiteSpace" type="" overloaded="no">
-        <autodoc>SetViewWhiteSpace(self, int viewWS)</autodoc>
-        <paramlist>
-          <param name="viewWS" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="PositionFromPoint" type="int" overloaded="no">
-        <autodoc>PositionFromPoint(self, Point pt) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pt" type="Point" default=""/>
-        </paramlist>
-      </method>
-      <method name="PositionFromPointClose" type="int" overloaded="no">
-        <autodoc>PositionFromPointClose(self, int x, int y) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GotoLine" type="" overloaded="no">
-        <autodoc>GotoLine(self, int line)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GotoPos" type="" overloaded="no">
-        <autodoc>GotoPos(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAnchor" type="" overloaded="no">
-        <autodoc>SetAnchor(self, int posAnchor)</autodoc>
-        <paramlist>
-          <param name="posAnchor" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurLine" type="String" overloaded="no">
-        <autodoc>GetCurLine(self, int OUTPUT) -&gt; String</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEndStyled" type="int" overloaded="no">
-        <autodoc>GetEndStyled(self) -&gt; int</autodoc>
-      </method>
-      <method name="ConvertEOLs" type="" overloaded="no">
-        <autodoc>ConvertEOLs(self, int eolMode)</autodoc>
-        <paramlist>
-          <param name="eolMode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEOLMode" type="int" overloaded="no">
-        <autodoc>GetEOLMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetEOLMode" type="" overloaded="no">
-        <autodoc>SetEOLMode(self, int eolMode)</autodoc>
-        <paramlist>
-          <param name="eolMode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StartStyling" type="" overloaded="no">
-        <autodoc>StartStyling(self, int pos, int mask)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-          <param name="mask" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyling" type="" overloaded="no">
-        <autodoc>SetStyling(self, int length, int style)</autodoc>
-        <paramlist>
-          <param name="length" type="int" default=""/>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBufferedDraw" type="bool" overloaded="no">
-        <autodoc>GetBufferedDraw(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetBufferedDraw" type="" overloaded="no">
-        <autodoc>SetBufferedDraw(self, bool buffered)</autodoc>
-        <paramlist>
-          <param name="buffered" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTabWidth" type="" overloaded="no">
-        <autodoc>SetTabWidth(self, int tabWidth)</autodoc>
-        <paramlist>
-          <param name="tabWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTabWidth" type="int" overloaded="no">
-        <autodoc>GetTabWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCodePage" type="" overloaded="no">
-        <autodoc>SetCodePage(self, int codePage)</autodoc>
-        <paramlist>
-          <param name="codePage" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerDefine" type="" overloaded="no">
-        <autodoc>MarkerDefine(self, int markerNumber, int markerSymbol, Colour foreground=wxNullColour, 
-    Colour background=wxNullColour)</autodoc>
-        <paramlist>
-          <param name="markerNumber" type="int" default=""/>
-          <param name="markerSymbol" type="int" default=""/>
-          <param name="foreground" type="Colour" default="wxNullColour"/>
-          <param name="background" type="Colour" default="wxNullColour"/>
-        </paramlist>
-      </method>
-      <method name="MarkerSetForeground" type="" overloaded="no">
-        <autodoc>MarkerSetForeground(self, int markerNumber, Colour fore)</autodoc>
-        <paramlist>
-          <param name="markerNumber" type="int" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerSetBackground" type="" overloaded="no">
-        <autodoc>MarkerSetBackground(self, int markerNumber, Colour back)</autodoc>
-        <paramlist>
-          <param name="markerNumber" type="int" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerAdd" type="int" overloaded="no">
-        <autodoc>MarkerAdd(self, int line, int markerNumber) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="markerNumber" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerDelete" type="" overloaded="no">
-        <autodoc>MarkerDelete(self, int line, int markerNumber)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="markerNumber" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerDeleteAll" type="" overloaded="no">
-        <autodoc>MarkerDeleteAll(self, int markerNumber)</autodoc>
-        <paramlist>
-          <param name="markerNumber" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerGet" type="int" overloaded="no">
-        <autodoc>MarkerGet(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerNext" type="int" overloaded="no">
-        <autodoc>MarkerNext(self, int lineStart, int markerMask) -&gt; int</autodoc>
-        <paramlist>
-          <param name="lineStart" type="int" default=""/>
-          <param name="markerMask" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerPrevious" type="int" overloaded="no">
-        <autodoc>MarkerPrevious(self, int lineStart, int markerMask) -&gt; int</autodoc>
-        <paramlist>
-          <param name="lineStart" type="int" default=""/>
-          <param name="markerMask" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="MarkerDefineBitmap" type="" overloaded="no">
-        <autodoc>MarkerDefineBitmap(self, int markerNumber, Bitmap bmp)</autodoc>
-        <paramlist>
-          <param name="markerNumber" type="int" default=""/>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginType" type="" overloaded="no">
-        <autodoc>SetMarginType(self, int margin, int marginType)</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-          <param name="marginType" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginType" type="int" overloaded="no">
-        <autodoc>GetMarginType(self, int margin) -&gt; int</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginWidth" type="" overloaded="no">
-        <autodoc>SetMarginWidth(self, int margin, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginWidth" type="int" overloaded="no">
-        <autodoc>GetMarginWidth(self, int margin) -&gt; int</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginMask" type="" overloaded="no">
-        <autodoc>SetMarginMask(self, int margin, int mask)</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-          <param name="mask" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginMask" type="int" overloaded="no">
-        <autodoc>GetMarginMask(self, int margin) -&gt; int</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMarginSensitive" type="" overloaded="no">
-        <autodoc>SetMarginSensitive(self, int margin, bool sensitive)</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-          <param name="sensitive" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginSensitive" type="bool" overloaded="no">
-        <autodoc>GetMarginSensitive(self, int margin) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="margin" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleClearAll" type="" overloaded="no">
-        <autodoc>StyleClearAll(self)</autodoc>
-      </method>
-      <method name="StyleSetForeground" type="" overloaded="no">
-        <autodoc>StyleSetForeground(self, int style, Colour fore)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetBackground" type="" overloaded="no">
-        <autodoc>StyleSetBackground(self, int style, Colour back)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetBold" type="" overloaded="no">
-        <autodoc>StyleSetBold(self, int style, bool bold)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="bold" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetItalic" type="" overloaded="no">
-        <autodoc>StyleSetItalic(self, int style, bool italic)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="italic" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetSize" type="" overloaded="no">
-        <autodoc>StyleSetSize(self, int style, int sizePoints)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="sizePoints" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetFaceName" type="" overloaded="no">
-        <autodoc>StyleSetFaceName(self, int style, String fontName)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="fontName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetEOLFilled" type="" overloaded="no">
-        <autodoc>StyleSetEOLFilled(self, int style, bool filled)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="filled" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleResetDefault" type="" overloaded="no">
-        <autodoc>StyleResetDefault(self)</autodoc>
-      </method>
-      <method name="StyleSetUnderline" type="" overloaded="no">
-        <autodoc>StyleSetUnderline(self, int style, bool underline)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="underline" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetCase" type="" overloaded="no">
-        <autodoc>StyleSetCase(self, int style, int caseForce)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="caseForce" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetCharacterSet" type="" overloaded="no">
-        <autodoc>StyleSetCharacterSet(self, int style, int characterSet)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="characterSet" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetHotSpot" type="" overloaded="no">
-        <autodoc>StyleSetHotSpot(self, int style, bool hotspot)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="hotspot" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelForeground" type="" overloaded="no">
-        <autodoc>SetSelForeground(self, bool useSetting, Colour fore)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelBackground" type="" overloaded="no">
-        <autodoc>SetSelBackground(self, bool useSetting, Colour back)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCaretForeground" type="" overloaded="no">
-        <autodoc>SetCaretForeground(self, Colour fore)</autodoc>
-        <paramlist>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="CmdKeyAssign" type="" overloaded="no">
-        <autodoc>CmdKeyAssign(self, int key, int modifiers, int cmd)</autodoc>
-        <paramlist>
-          <param name="key" type="int" default=""/>
-          <param name="modifiers" type="int" default=""/>
-          <param name="cmd" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CmdKeyClear" type="" overloaded="no">
-        <autodoc>CmdKeyClear(self, int key, int modifiers)</autodoc>
-        <paramlist>
-          <param name="key" type="int" default=""/>
-          <param name="modifiers" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CmdKeyClearAll" type="" overloaded="no">
-        <autodoc>CmdKeyClearAll(self)</autodoc>
-      </method>
-      <method name="SetStyleBytes" type="" overloaded="no">
-        <autodoc>SetStyleBytes(self, int length, char styleBytes)</autodoc>
-        <paramlist>
-          <param name="length" type="int" default=""/>
-          <param name="styleBytes" type="char" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetVisible" type="" overloaded="no">
-        <autodoc>StyleSetVisible(self, int style, bool visible)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="visible" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCaretPeriod" type="int" overloaded="no">
-        <autodoc>GetCaretPeriod(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetCaretPeriod" type="" overloaded="no">
-        <autodoc>SetCaretPeriod(self, int periodMilliseconds)</autodoc>
-        <paramlist>
-          <param name="periodMilliseconds" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWordChars" type="" overloaded="no">
-        <autodoc>SetWordChars(self, String characters)</autodoc>
-        <paramlist>
-          <param name="characters" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="BeginUndoAction" type="" overloaded="no">
-        <autodoc>BeginUndoAction(self)</autodoc>
-      </method>
-      <method name="EndUndoAction" type="" overloaded="no">
-        <autodoc>EndUndoAction(self)</autodoc>
-      </method>
-      <method name="IndicatorSetStyle" type="" overloaded="no">
-        <autodoc>IndicatorSetStyle(self, int indic, int style)</autodoc>
-        <paramlist>
-          <param name="indic" type="int" default=""/>
-          <param name="style" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IndicatorGetStyle" type="int" overloaded="no">
-        <autodoc>IndicatorGetStyle(self, int indic) -&gt; int</autodoc>
-        <paramlist>
-          <param name="indic" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="IndicatorSetForeground" type="" overloaded="no">
-        <autodoc>IndicatorSetForeground(self, int indic, Colour fore)</autodoc>
-        <paramlist>
-          <param name="indic" type="int" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="IndicatorGetForeground" type="Colour" overloaded="no">
-        <autodoc>IndicatorGetForeground(self, int indic) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="indic" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWhitespaceForeground" type="" overloaded="no">
-        <autodoc>SetWhitespaceForeground(self, bool useSetting, Colour fore)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWhitespaceBackground" type="" overloaded="no">
-        <autodoc>SetWhitespaceBackground(self, bool useSetting, Colour back)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStyleBits" type="" overloaded="no">
-        <autodoc>SetStyleBits(self, int bits)</autodoc>
-        <paramlist>
-          <param name="bits" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStyleBits" type="int" overloaded="no">
-        <autodoc>GetStyleBits(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetLineState" type="" overloaded="no">
-        <autodoc>SetLineState(self, int line, int state)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="state" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineState" type="int" overloaded="no">
-        <autodoc>GetLineState(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMaxLineState" type="int" overloaded="no">
-        <autodoc>GetMaxLineState(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCaretLineVisible" type="bool" overloaded="no">
-        <autodoc>GetCaretLineVisible(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetCaretLineVisible" type="" overloaded="no">
-        <autodoc>SetCaretLineVisible(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCaretLineBack" type="Colour" overloaded="no">
-        <autodoc>GetCaretLineBack(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetCaretLineBack" type="" overloaded="no">
-        <autodoc>SetCaretLineBack(self, Colour back)</autodoc>
-        <paramlist>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetChangeable" type="" overloaded="no">
-        <autodoc>StyleSetChangeable(self, int style, bool changeable)</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="changeable" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompShow" type="" overloaded="no">
-        <autodoc>AutoCompShow(self, int lenEntered, String itemList)</autodoc>
-        <paramlist>
-          <param name="lenEntered" type="int" default=""/>
-          <param name="itemList" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompCancel" type="" overloaded="no">
-        <autodoc>AutoCompCancel(self)</autodoc>
-      </method>
-      <method name="AutoCompActive" type="bool" overloaded="no">
-        <autodoc>AutoCompActive(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AutoCompPosStart" type="int" overloaded="no">
-        <autodoc>AutoCompPosStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="AutoCompComplete" type="" overloaded="no">
-        <autodoc>AutoCompComplete(self)</autodoc>
-      </method>
-      <method name="AutoCompStops" type="" overloaded="no">
-        <autodoc>AutoCompStops(self, String characterSet)</autodoc>
-        <paramlist>
-          <param name="characterSet" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompSetSeparator" type="" overloaded="no">
-        <autodoc>AutoCompSetSeparator(self, int separatorCharacter)</autodoc>
-        <paramlist>
-          <param name="separatorCharacter" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetSeparator" type="int" overloaded="no">
-        <autodoc>AutoCompGetSeparator(self) -&gt; int</autodoc>
-      </method>
-      <method name="AutoCompSelect" type="" overloaded="no">
-        <autodoc>AutoCompSelect(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompSetCancelAtStart" type="" overloaded="no">
-        <autodoc>AutoCompSetCancelAtStart(self, bool cancel)</autodoc>
-        <paramlist>
-          <param name="cancel" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetCancelAtStart" type="bool" overloaded="no">
-        <autodoc>AutoCompGetCancelAtStart(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AutoCompSetFillUps" type="" overloaded="no">
-        <autodoc>AutoCompSetFillUps(self, String characterSet)</autodoc>
-        <paramlist>
-          <param name="characterSet" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompSetChooseSingle" type="" overloaded="no">
-        <autodoc>AutoCompSetChooseSingle(self, bool chooseSingle)</autodoc>
-        <paramlist>
-          <param name="chooseSingle" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetChooseSingle" type="bool" overloaded="no">
-        <autodoc>AutoCompGetChooseSingle(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AutoCompSetIgnoreCase" type="" overloaded="no">
-        <autodoc>AutoCompSetIgnoreCase(self, bool ignoreCase)</autodoc>
-        <paramlist>
-          <param name="ignoreCase" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetIgnoreCase" type="bool" overloaded="no">
-        <autodoc>AutoCompGetIgnoreCase(self) -&gt; bool</autodoc>
-      </method>
-      <method name="UserListShow" type="" overloaded="no">
-        <autodoc>UserListShow(self, int listType, String itemList)</autodoc>
-        <paramlist>
-          <param name="listType" type="int" default=""/>
-          <param name="itemList" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompSetAutoHide" type="" overloaded="no">
-        <autodoc>AutoCompSetAutoHide(self, bool autoHide)</autodoc>
-        <paramlist>
-          <param name="autoHide" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetAutoHide" type="bool" overloaded="no">
-        <autodoc>AutoCompGetAutoHide(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AutoCompSetDropRestOfWord" type="" overloaded="no">
-        <autodoc>AutoCompSetDropRestOfWord(self, bool dropRestOfWord)</autodoc>
-        <paramlist>
-          <param name="dropRestOfWord" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="AutoCompGetDropRestOfWord" type="bool" overloaded="no">
-        <autodoc>AutoCompGetDropRestOfWord(self) -&gt; bool</autodoc>
-      </method>
-      <method name="RegisterImage" type="" overloaded="no">
-        <autodoc>RegisterImage(self, int type, Bitmap bmp)</autodoc>
-        <paramlist>
-          <param name="type" type="int" default=""/>
-          <param name="bmp" type="Bitmap" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearRegisteredImages" type="" overloaded="no">
-        <autodoc>ClearRegisteredImages(self)</autodoc>
-      </method>
-      <method name="AutoCompGetTypeSeparator" type="int" overloaded="no">
-        <autodoc>AutoCompGetTypeSeparator(self) -&gt; int</autodoc>
-      </method>
-      <method name="AutoCompSetTypeSeparator" type="" overloaded="no">
-        <autodoc>AutoCompSetTypeSeparator(self, int separatorCharacter)</autodoc>
-        <paramlist>
-          <param name="separatorCharacter" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetIndent" type="" overloaded="no">
-        <autodoc>SetIndent(self, int indentSize)</autodoc>
-        <paramlist>
-          <param name="indentSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetIndent" type="int" overloaded="no">
-        <autodoc>GetIndent(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetUseTabs" type="" overloaded="no">
-        <autodoc>SetUseTabs(self, bool useTabs)</autodoc>
-        <paramlist>
-          <param name="useTabs" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUseTabs" type="bool" overloaded="no">
-        <autodoc>GetUseTabs(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetLineIndentation" type="" overloaded="no">
-        <autodoc>SetLineIndentation(self, int line, int indentSize)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="indentSize" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineIndentation" type="int" overloaded="no">
-        <autodoc>GetLineIndentation(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineIndentPosition" type="int" overloaded="no">
-        <autodoc>GetLineIndentPosition(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumn" type="int" overloaded="no">
-        <autodoc>GetColumn(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUseHorizontalScrollBar" type="" overloaded="no">
-        <autodoc>SetUseHorizontalScrollBar(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUseHorizontalScrollBar" type="bool" overloaded="no">
-        <autodoc>GetUseHorizontalScrollBar(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetIndentationGuides" type="" overloaded="no">
-        <autodoc>SetIndentationGuides(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetIndentationGuides" type="bool" overloaded="no">
-        <autodoc>GetIndentationGuides(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetHighlightGuide" type="" overloaded="no">
-        <autodoc>SetHighlightGuide(self, int column)</autodoc>
-        <paramlist>
-          <param name="column" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetHighlightGuide" type="int" overloaded="no">
-        <autodoc>GetHighlightGuide(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLineEndPosition" type="int" overloaded="no">
-        <autodoc>GetLineEndPosition(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCodePage" type="int" overloaded="no">
-        <autodoc>GetCodePage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetCaretForeground" type="Colour" overloaded="no">
-        <autodoc>GetCaretForeground(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="GetReadOnly" type="bool" overloaded="no">
-        <autodoc>GetReadOnly(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetCurrentPos" type="" overloaded="no">
-        <autodoc>SetCurrentPos(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelectionStart" type="" overloaded="no">
-        <autodoc>SetSelectionStart(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionStart" type="int" overloaded="no">
-        <autodoc>GetSelectionStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSelectionEnd" type="" overloaded="no">
-        <autodoc>SetSelectionEnd(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionEnd" type="int" overloaded="no">
-        <autodoc>GetSelectionEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPrintMagnification" type="" overloaded="no">
-        <autodoc>SetPrintMagnification(self, int magnification)</autodoc>
-        <paramlist>
-          <param name="magnification" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintMagnification" type="int" overloaded="no">
-        <autodoc>GetPrintMagnification(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetPrintColourMode" type="" overloaded="no">
-        <autodoc>SetPrintColourMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintColourMode" type="int" overloaded="no">
-        <autodoc>GetPrintColourMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="FindText" type="int" overloaded="no">
-        <autodoc>FindText(self, int minPos, int maxPos, String text, int flags=0) -&gt; int</autodoc>
-        <paramlist>
-          <param name="minPos" type="int" default=""/>
-          <param name="maxPos" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="FormatRange" type="int" overloaded="no">
-        <autodoc>FormatRange(self, bool doDraw, int startPos, int endPos, DC draw, DC target, 
-    Rect renderRect, Rect pageRect) -&gt; int</autodoc>
-        <paramlist>
-          <param name="doDraw" type="bool" default=""/>
-          <param name="startPos" type="int" default=""/>
-          <param name="endPos" type="int" default=""/>
-          <param name="draw" type="DC" default=""/>
-          <param name="target" type="DC" default=""/>
-          <param name="renderRect" type="Rect" default=""/>
-          <param name="pageRect" type="Rect" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstVisibleLine" type="int" overloaded="no">
-        <autodoc>GetFirstVisibleLine(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLine" type="String" overloaded="no">
-        <autodoc>GetLine(self, int line) -&gt; String</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineCount" type="int" overloaded="no">
-        <autodoc>GetLineCount(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMarginLeft" type="" overloaded="no">
-        <autodoc>SetMarginLeft(self, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginLeft" type="int" overloaded="no">
-        <autodoc>GetMarginLeft(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMarginRight" type="" overloaded="no">
-        <autodoc>SetMarginRight(self, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMarginRight" type="int" overloaded="no">
-        <autodoc>GetMarginRight(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetModify" type="bool" overloaded="no">
-        <autodoc>GetModify(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSelection" type="" overloaded="no">
-        <autodoc>SetSelection(self, int start, int end)</autodoc>
-        <paramlist>
-          <param name="start" type="int" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectedText" type="String" overloaded="no">
-        <autodoc>GetSelectedText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetTextRange" type="String" overloaded="no">
-        <autodoc>GetTextRange(self, int startPos, int endPos) -&gt; String</autodoc>
-        <paramlist>
-          <param name="startPos" type="int" default=""/>
-          <param name="endPos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HideSelection" type="" overloaded="no">
-        <autodoc>HideSelection(self, bool normal)</autodoc>
-        <paramlist>
-          <param name="normal" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="LineFromPosition" type="int" overloaded="no">
-        <autodoc>LineFromPosition(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="PositionFromLine" type="int" overloaded="no">
-        <autodoc>PositionFromLine(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LineScroll" type="" overloaded="no">
-        <autodoc>LineScroll(self, int columns, int lines)</autodoc>
-        <paramlist>
-          <param name="columns" type="int" default=""/>
-          <param name="lines" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureCaretVisible" type="" overloaded="no">
-        <autodoc>EnsureCaretVisible(self)</autodoc>
-      </method>
-      <method name="ReplaceSelection" type="" overloaded="no">
-        <autodoc>ReplaceSelection(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetReadOnly" type="" overloaded="no">
-        <autodoc>SetReadOnly(self, bool readOnly)</autodoc>
-        <paramlist>
-          <param name="readOnly" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="CanPaste" type="bool" overloaded="no">
-        <autodoc>CanPaste(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CanUndo" type="bool" overloaded="no">
-        <autodoc>CanUndo(self) -&gt; bool</autodoc>
-      </method>
-      <method name="EmptyUndoBuffer" type="" overloaded="no">
-        <autodoc>EmptyUndoBuffer(self)</autodoc>
-      </method>
-      <method name="Undo" type="" overloaded="no">
-        <autodoc>Undo(self)</autodoc>
-      </method>
-      <method name="Cut" type="" overloaded="no">
-        <autodoc>Cut(self)</autodoc>
-      </method>
-      <method name="Copy" type="" overloaded="no">
-        <autodoc>Copy(self)</autodoc>
-      </method>
-      <method name="Paste" type="" overloaded="no">
-        <autodoc>Paste(self)</autodoc>
-      </method>
-      <method name="Clear" type="" overloaded="no">
-        <autodoc>Clear(self)</autodoc>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetTextLength" type="int" overloaded="no">
-        <autodoc>GetTextLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetOvertype" type="" overloaded="no">
-        <autodoc>SetOvertype(self, bool overtype)</autodoc>
-        <paramlist>
-          <param name="overtype" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetOvertype" type="bool" overloaded="no">
-        <autodoc>GetOvertype(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetCaretWidth" type="" overloaded="no">
-        <autodoc>SetCaretWidth(self, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCaretWidth" type="int" overloaded="no">
-        <autodoc>GetCaretWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetTargetStart" type="" overloaded="no">
-        <autodoc>SetTargetStart(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTargetStart" type="int" overloaded="no">
-        <autodoc>GetTargetStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetTargetEnd" type="" overloaded="no">
-        <autodoc>SetTargetEnd(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTargetEnd" type="int" overloaded="no">
-        <autodoc>GetTargetEnd(self) -&gt; int</autodoc>
-      </method>
-      <method name="ReplaceTarget" type="int" overloaded="no">
-        <autodoc>ReplaceTarget(self, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="ReplaceTargetRE" type="int" overloaded="no">
-        <autodoc>ReplaceTargetRE(self, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SearchInTarget" type="int" overloaded="no">
-        <autodoc>SearchInTarget(self, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSearchFlags" type="" overloaded="no">
-        <autodoc>SetSearchFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSearchFlags" type="int" overloaded="no">
-        <autodoc>GetSearchFlags(self) -&gt; int</autodoc>
-      </method>
-      <method name="CallTipShow" type="" overloaded="no">
-        <autodoc>CallTipShow(self, int pos, String definition)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-          <param name="definition" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="CallTipCancel" type="" overloaded="no">
-        <autodoc>CallTipCancel(self)</autodoc>
-      </method>
-      <method name="CallTipActive" type="bool" overloaded="no">
-        <autodoc>CallTipActive(self) -&gt; bool</autodoc>
-      </method>
-      <method name="CallTipPosAtStart" type="int" overloaded="no">
-        <autodoc>CallTipPosAtStart(self) -&gt; int</autodoc>
-      </method>
-      <method name="CallTipSetHighlight" type="" overloaded="no">
-        <autodoc>CallTipSetHighlight(self, int start, int end)</autodoc>
-        <paramlist>
-          <param name="start" type="int" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CallTipSetBackground" type="" overloaded="no">
-        <autodoc>CallTipSetBackground(self, Colour back)</autodoc>
-        <paramlist>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="CallTipSetForeground" type="" overloaded="no">
-        <autodoc>CallTipSetForeground(self, Colour fore)</autodoc>
-        <paramlist>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="CallTipSetForegroundHighlight" type="" overloaded="no">
-        <autodoc>CallTipSetForegroundHighlight(self, Colour fore)</autodoc>
-        <paramlist>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="VisibleFromDocLine" type="int" overloaded="no">
-        <autodoc>VisibleFromDocLine(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DocLineFromVisible" type="int" overloaded="no">
-        <autodoc>DocLineFromVisible(self, int lineDisplay) -&gt; int</autodoc>
-        <paramlist>
-          <param name="lineDisplay" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldLevel" type="" overloaded="no">
-        <autodoc>SetFoldLevel(self, int line, int level)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="level" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFoldLevel" type="int" overloaded="no">
-        <autodoc>GetFoldLevel(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLastChild" type="int" overloaded="no">
-        <autodoc>GetLastChild(self, int line, int level) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="level" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFoldParent" type="int" overloaded="no">
-        <autodoc>GetFoldParent(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowLines" type="" overloaded="no">
-        <autodoc>ShowLines(self, int lineStart, int lineEnd)</autodoc>
-        <paramlist>
-          <param name="lineStart" type="int" default=""/>
-          <param name="lineEnd" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="HideLines" type="" overloaded="no">
-        <autodoc>HideLines(self, int lineStart, int lineEnd)</autodoc>
-        <paramlist>
-          <param name="lineStart" type="int" default=""/>
-          <param name="lineEnd" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineVisible" type="bool" overloaded="no">
-        <autodoc>GetLineVisible(self, int line) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldExpanded" type="" overloaded="no">
-        <autodoc>SetFoldExpanded(self, int line, bool expanded)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-          <param name="expanded" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFoldExpanded" type="bool" overloaded="no">
-        <autodoc>GetFoldExpanded(self, int line) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ToggleFold" type="" overloaded="no">
-        <autodoc>ToggleFold(self, int line)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisible" type="" overloaded="no">
-        <autodoc>EnsureVisible(self, int line)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldFlags" type="" overloaded="no">
-        <autodoc>SetFoldFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisibleEnforcePolicy" type="" overloaded="no">
-        <autodoc>EnsureVisibleEnforcePolicy(self, int line)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetTabIndents" type="" overloaded="no">
-        <autodoc>SetTabIndents(self, bool tabIndents)</autodoc>
-        <paramlist>
-          <param name="tabIndents" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTabIndents" type="bool" overloaded="no">
-        <autodoc>GetTabIndents(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetBackSpaceUnIndents" type="" overloaded="no">
-        <autodoc>SetBackSpaceUnIndents(self, bool bsUnIndents)</autodoc>
-        <paramlist>
-          <param name="bsUnIndents" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBackSpaceUnIndents" type="bool" overloaded="no">
-        <autodoc>GetBackSpaceUnIndents(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetMouseDwellTime" type="" overloaded="no">
-        <autodoc>SetMouseDwellTime(self, int periodMilliseconds)</autodoc>
-        <paramlist>
-          <param name="periodMilliseconds" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMouseDwellTime" type="int" overloaded="no">
-        <autodoc>GetMouseDwellTime(self) -&gt; int</autodoc>
-      </method>
-      <method name="WordStartPosition" type="int" overloaded="no">
-        <autodoc>WordStartPosition(self, int pos, bool onlyWordCharacters) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-          <param name="onlyWordCharacters" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="WordEndPosition" type="int" overloaded="no">
-        <autodoc>WordEndPosition(self, int pos, bool onlyWordCharacters) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-          <param name="onlyWordCharacters" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWrapMode" type="" overloaded="no">
-        <autodoc>SetWrapMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetWrapMode" type="int" overloaded="no">
-        <autodoc>GetWrapMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetLayoutCache" type="" overloaded="no">
-        <autodoc>SetLayoutCache(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLayoutCache" type="int" overloaded="no">
-        <autodoc>GetLayoutCache(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetScrollWidth" type="" overloaded="no">
-        <autodoc>SetScrollWidth(self, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetScrollWidth" type="int" overloaded="no">
-        <autodoc>GetScrollWidth(self) -&gt; int</autodoc>
-      </method>
-      <method name="TextWidth" type="int" overloaded="no">
-        <autodoc>TextWidth(self, int style, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="style" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetEndAtLastLine" type="" overloaded="no">
-        <autodoc>SetEndAtLastLine(self, bool endAtLastLine)</autodoc>
-        <paramlist>
-          <param name="endAtLastLine" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEndAtLastLine" type="int" overloaded="no">
-        <autodoc>GetEndAtLastLine(self) -&gt; int</autodoc>
-      </method>
-      <method name="TextHeight" type="int" overloaded="no">
-        <autodoc>TextHeight(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUseVerticalScrollBar" type="" overloaded="no">
-        <autodoc>SetUseVerticalScrollBar(self, bool show)</autodoc>
-        <paramlist>
-          <param name="show" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUseVerticalScrollBar" type="bool" overloaded="no">
-        <autodoc>GetUseVerticalScrollBar(self) -&gt; bool</autodoc>
-      </method>
-      <method name="AppendText" type="" overloaded="no">
-        <autodoc>AppendText(self, int length, String text)</autodoc>
-        <paramlist>
-          <param name="length" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTwoPhaseDraw" type="bool" overloaded="no">
-        <autodoc>GetTwoPhaseDraw(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetTwoPhaseDraw" type="" overloaded="no">
-        <autodoc>SetTwoPhaseDraw(self, bool twoPhase)</autodoc>
-        <paramlist>
-          <param name="twoPhase" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="TargetFromSelection" type="" overloaded="no">
-        <autodoc>TargetFromSelection(self)</autodoc>
-      </method>
-      <method name="LinesJoin" type="" overloaded="no">
-        <autodoc>LinesJoin(self)</autodoc>
-      </method>
-      <method name="LinesSplit" type="" overloaded="no">
-        <autodoc>LinesSplit(self, int pixelWidth)</autodoc>
-        <paramlist>
-          <param name="pixelWidth" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldMarginColour" type="" overloaded="no">
-        <autodoc>SetFoldMarginColour(self, bool useSetting, Colour back)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldMarginHiColour" type="" overloaded="no">
-        <autodoc>SetFoldMarginHiColour(self, bool useSetting, Colour fore)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="LineDown" type="" overloaded="no">
-        <autodoc>LineDown(self)</autodoc>
-        <docstring>This is just a wrapper for ScrollLines(1).</docstring>
-      </method>
-      <method name="LineDownExtend" type="" overloaded="no">
-        <autodoc>LineDownExtend(self)</autodoc>
-      </method>
-      <method name="LineUp" type="" overloaded="no">
-        <autodoc>LineUp(self)</autodoc>
-        <docstring>This is just a wrapper for ScrollLines(-1).</docstring>
-      </method>
-      <method name="LineUpExtend" type="" overloaded="no">
-        <autodoc>LineUpExtend(self)</autodoc>
-      </method>
-      <method name="CharLeft" type="" overloaded="no">
-        <autodoc>CharLeft(self)</autodoc>
-      </method>
-      <method name="CharLeftExtend" type="" overloaded="no">
-        <autodoc>CharLeftExtend(self)</autodoc>
-      </method>
-      <method name="CharRight" type="" overloaded="no">
-        <autodoc>CharRight(self)</autodoc>
-      </method>
-      <method name="CharRightExtend" type="" overloaded="no">
-        <autodoc>CharRightExtend(self)</autodoc>
-      </method>
-      <method name="WordLeft" type="" overloaded="no">
-        <autodoc>WordLeft(self)</autodoc>
-      </method>
-      <method name="WordLeftExtend" type="" overloaded="no">
-        <autodoc>WordLeftExtend(self)</autodoc>
-      </method>
-      <method name="WordRight" type="" overloaded="no">
-        <autodoc>WordRight(self)</autodoc>
-      </method>
-      <method name="WordRightExtend" type="" overloaded="no">
-        <autodoc>WordRightExtend(self)</autodoc>
-      </method>
-      <method name="Home" type="" overloaded="no">
-        <autodoc>Home(self)</autodoc>
-      </method>
-      <method name="HomeExtend" type="" overloaded="no">
-        <autodoc>HomeExtend(self)</autodoc>
-      </method>
-      <method name="LineEnd" type="" overloaded="no">
-        <autodoc>LineEnd(self)</autodoc>
-      </method>
-      <method name="LineEndExtend" type="" overloaded="no">
-        <autodoc>LineEndExtend(self)</autodoc>
-      </method>
-      <method name="DocumentStart" type="" overloaded="no">
-        <autodoc>DocumentStart(self)</autodoc>
-      </method>
-      <method name="DocumentStartExtend" type="" overloaded="no">
-        <autodoc>DocumentStartExtend(self)</autodoc>
-      </method>
-      <method name="DocumentEnd" type="" overloaded="no">
-        <autodoc>DocumentEnd(self)</autodoc>
-      </method>
-      <method name="DocumentEndExtend" type="" overloaded="no">
-        <autodoc>DocumentEndExtend(self)</autodoc>
-      </method>
-      <method name="PageUp" type="" overloaded="no">
-        <autodoc>PageUp(self)</autodoc>
-        <docstring>This is just a wrapper for ScrollPages(-1).</docstring>
-      </method>
-      <method name="PageUpExtend" type="" overloaded="no">
-        <autodoc>PageUpExtend(self)</autodoc>
-      </method>
-      <method name="PageDown" type="" overloaded="no">
-        <autodoc>PageDown(self)</autodoc>
-        <docstring>This is just a wrapper for ScrollPages(1).</docstring>
-      </method>
-      <method name="PageDownExtend" type="" overloaded="no">
-        <autodoc>PageDownExtend(self)</autodoc>
-      </method>
-      <method name="EditToggleOvertype" type="" overloaded="no">
-        <autodoc>EditToggleOvertype(self)</autodoc>
-      </method>
-      <method name="Cancel" type="" overloaded="no">
-        <autodoc>Cancel(self)</autodoc>
-      </method>
-      <method name="DeleteBack" type="" overloaded="no">
-        <autodoc>DeleteBack(self)</autodoc>
-      </method>
-      <method name="Tab" type="" overloaded="no">
-        <autodoc>Tab(self)</autodoc>
-      </method>
-      <method name="BackTab" type="" overloaded="no">
-        <autodoc>BackTab(self)</autodoc>
-      </method>
-      <method name="NewLine" type="" overloaded="no">
-        <autodoc>NewLine(self)</autodoc>
-      </method>
-      <method name="FormFeed" type="" overloaded="no">
-        <autodoc>FormFeed(self)</autodoc>
-      </method>
-      <method name="VCHome" type="" overloaded="no">
-        <autodoc>VCHome(self)</autodoc>
-      </method>
-      <method name="VCHomeExtend" type="" overloaded="no">
-        <autodoc>VCHomeExtend(self)</autodoc>
-      </method>
-      <method name="ZoomIn" type="" overloaded="no">
-        <autodoc>ZoomIn(self)</autodoc>
-      </method>
-      <method name="ZoomOut" type="" overloaded="no">
-        <autodoc>ZoomOut(self)</autodoc>
-      </method>
-      <method name="DelWordLeft" type="" overloaded="no">
-        <autodoc>DelWordLeft(self)</autodoc>
-      </method>
-      <method name="DelWordRight" type="" overloaded="no">
-        <autodoc>DelWordRight(self)</autodoc>
-      </method>
-      <method name="LineCut" type="" overloaded="no">
-        <autodoc>LineCut(self)</autodoc>
-      </method>
-      <method name="LineDelete" type="" overloaded="no">
-        <autodoc>LineDelete(self)</autodoc>
-      </method>
-      <method name="LineTranspose" type="" overloaded="no">
-        <autodoc>LineTranspose(self)</autodoc>
-      </method>
-      <method name="LineDuplicate" type="" overloaded="no">
-        <autodoc>LineDuplicate(self)</autodoc>
-      </method>
-      <method name="LowerCase" type="" overloaded="no">
-        <autodoc>LowerCase(self)</autodoc>
-      </method>
-      <method name="UpperCase" type="" overloaded="no">
-        <autodoc>UpperCase(self)</autodoc>
-      </method>
-      <method name="LineScrollDown" type="" overloaded="no">
-        <autodoc>LineScrollDown(self)</autodoc>
-      </method>
-      <method name="LineScrollUp" type="" overloaded="no">
-        <autodoc>LineScrollUp(self)</autodoc>
-      </method>
-      <method name="DeleteBackNotLine" type="" overloaded="no">
-        <autodoc>DeleteBackNotLine(self)</autodoc>
-      </method>
-      <method name="HomeDisplay" type="" overloaded="no">
-        <autodoc>HomeDisplay(self)</autodoc>
-      </method>
-      <method name="HomeDisplayExtend" type="" overloaded="no">
-        <autodoc>HomeDisplayExtend(self)</autodoc>
-      </method>
-      <method name="LineEndDisplay" type="" overloaded="no">
-        <autodoc>LineEndDisplay(self)</autodoc>
-      </method>
-      <method name="LineEndDisplayExtend" type="" overloaded="no">
-        <autodoc>LineEndDisplayExtend(self)</autodoc>
-      </method>
-      <method name="HomeWrap" type="" overloaded="no">
-        <autodoc>HomeWrap(self)</autodoc>
-      </method>
-      <method name="HomeWrapExtend" type="" overloaded="no">
-        <autodoc>HomeWrapExtend(self)</autodoc>
-      </method>
-      <method name="LineEndWrap" type="" overloaded="no">
-        <autodoc>LineEndWrap(self)</autodoc>
-      </method>
-      <method name="LineEndWrapExtend" type="" overloaded="no">
-        <autodoc>LineEndWrapExtend(self)</autodoc>
-      </method>
-      <method name="VCHomeWrap" type="" overloaded="no">
-        <autodoc>VCHomeWrap(self)</autodoc>
-      </method>
-      <method name="VCHomeWrapExtend" type="" overloaded="no">
-        <autodoc>VCHomeWrapExtend(self)</autodoc>
-      </method>
-      <method name="LineCopy" type="" overloaded="no">
-        <autodoc>LineCopy(self)</autodoc>
-      </method>
-      <method name="MoveCaretInsideView" type="" overloaded="no">
-        <autodoc>MoveCaretInsideView(self)</autodoc>
-      </method>
-      <method name="LineLength" type="int" overloaded="no">
-        <autodoc>LineLength(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="BraceHighlight" type="" overloaded="no">
-        <autodoc>BraceHighlight(self, int pos1, int pos2)</autodoc>
-        <paramlist>
-          <param name="pos1" type="int" default=""/>
-          <param name="pos2" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="BraceBadLight" type="" overloaded="no">
-        <autodoc>BraceBadLight(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="BraceMatch" type="int" overloaded="no">
-        <autodoc>BraceMatch(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetViewEOL" type="bool" overloaded="no">
-        <autodoc>GetViewEOL(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetViewEOL" type="" overloaded="no">
-        <autodoc>SetViewEOL(self, bool visible)</autodoc>
-        <paramlist>
-          <param name="visible" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetDocPointer" type="" overloaded="no">
-        <autodoc>GetDocPointer(self) -&gt; void</autodoc>
-      </method>
-      <method name="SetDocPointer" type="" overloaded="no">
-        <autodoc>SetDocPointer(self, void docPointer)</autodoc>
-        <paramlist>
-          <param name="docPointer" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetModEventMask" type="" overloaded="no">
-        <autodoc>SetModEventMask(self, int mask)</autodoc>
-        <paramlist>
-          <param name="mask" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdgeColumn" type="int" overloaded="no">
-        <autodoc>GetEdgeColumn(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetEdgeColumn" type="" overloaded="no">
-        <autodoc>SetEdgeColumn(self, int column)</autodoc>
-        <paramlist>
-          <param name="column" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdgeMode" type="int" overloaded="no">
-        <autodoc>GetEdgeMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetEdgeMode" type="" overloaded="no">
-        <autodoc>SetEdgeMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetEdgeColour" type="Colour" overloaded="no">
-        <autodoc>GetEdgeColour(self) -&gt; Colour</autodoc>
-      </method>
-      <method name="SetEdgeColour" type="" overloaded="no">
-        <autodoc>SetEdgeColour(self, Colour edgeColour)</autodoc>
-        <paramlist>
-          <param name="edgeColour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SearchAnchor" type="" overloaded="no">
-        <autodoc>SearchAnchor(self)</autodoc>
-      </method>
-      <method name="SearchNext" type="int" overloaded="no">
-        <autodoc>SearchNext(self, int flags, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SearchPrev" type="int" overloaded="no">
-        <autodoc>SearchPrev(self, int flags, String text) -&gt; int</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LinesOnScreen" type="int" overloaded="no">
-        <autodoc>LinesOnScreen(self) -&gt; int</autodoc>
-      </method>
-      <method name="UsePopUp" type="" overloaded="no">
-        <autodoc>UsePopUp(self, bool allowPopUp)</autodoc>
-        <paramlist>
-          <param name="allowPopUp" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SelectionIsRectangle" type="bool" overloaded="no">
-        <autodoc>SelectionIsRectangle(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetZoom" type="" overloaded="no">
-        <autodoc>SetZoom(self, int zoom)</autodoc>
-        <paramlist>
-          <param name="zoom" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetZoom" type="int" overloaded="no">
-        <autodoc>GetZoom(self) -&gt; int</autodoc>
-      </method>
-      <method name="CreateDocument" type="" overloaded="no">
-        <autodoc>CreateDocument(self) -&gt; void</autodoc>
-      </method>
-      <method name="AddRefDocument" type="" overloaded="no">
-        <autodoc>AddRefDocument(self, void docPointer)</autodoc>
-        <paramlist>
-          <param name="docPointer" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="ReleaseDocument" type="" overloaded="no">
-        <autodoc>ReleaseDocument(self, void docPointer)</autodoc>
-        <paramlist>
-          <param name="docPointer" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetModEventMask" type="int" overloaded="no">
-        <autodoc>GetModEventMask(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetSTCFocus" type="" overloaded="no">
-        <autodoc>SetSTCFocus(self, bool focus)</autodoc>
-        <paramlist>
-          <param name="focus" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSTCFocus" type="bool" overloaded="no">
-        <autodoc>GetSTCFocus(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetStatus" type="" overloaded="no">
-        <autodoc>SetStatus(self, int statusCode)</autodoc>
-        <paramlist>
-          <param name="statusCode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStatus" type="int" overloaded="no">
-        <autodoc>GetStatus(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetMouseDownCaptures" type="" overloaded="no">
-        <autodoc>SetMouseDownCaptures(self, bool captures)</autodoc>
-        <paramlist>
-          <param name="captures" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMouseDownCaptures" type="bool" overloaded="no">
-        <autodoc>GetMouseDownCaptures(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetSTCCursor" type="" overloaded="no">
-        <autodoc>SetSTCCursor(self, int cursorType)</autodoc>
-        <paramlist>
-          <param name="cursorType" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSTCCursor" type="int" overloaded="no">
-        <autodoc>GetSTCCursor(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetControlCharSymbol" type="" overloaded="no">
-        <autodoc>SetControlCharSymbol(self, int symbol)</autodoc>
-        <paramlist>
-          <param name="symbol" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetControlCharSymbol" type="int" overloaded="no">
-        <autodoc>GetControlCharSymbol(self) -&gt; int</autodoc>
-      </method>
-      <method name="WordPartLeft" type="" overloaded="no">
-        <autodoc>WordPartLeft(self)</autodoc>
-      </method>
-      <method name="WordPartLeftExtend" type="" overloaded="no">
-        <autodoc>WordPartLeftExtend(self)</autodoc>
-      </method>
-      <method name="WordPartRight" type="" overloaded="no">
-        <autodoc>WordPartRight(self)</autodoc>
-      </method>
-      <method name="WordPartRightExtend" type="" overloaded="no">
-        <autodoc>WordPartRightExtend(self)</autodoc>
-      </method>
-      <method name="SetVisiblePolicy" type="" overloaded="no">
-        <autodoc>SetVisiblePolicy(self, int visiblePolicy, int visibleSlop)</autodoc>
-        <paramlist>
-          <param name="visiblePolicy" type="int" default=""/>
-          <param name="visibleSlop" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="DelLineLeft" type="" overloaded="no">
-        <autodoc>DelLineLeft(self)</autodoc>
-      </method>
-      <method name="DelLineRight" type="" overloaded="no">
-        <autodoc>DelLineRight(self)</autodoc>
-      </method>
-      <method name="SetXOffset" type="" overloaded="no">
-        <autodoc>SetXOffset(self, int newOffset)</autodoc>
-        <paramlist>
-          <param name="newOffset" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetXOffset" type="int" overloaded="no">
-        <autodoc>GetXOffset(self) -&gt; int</autodoc>
-      </method>
-      <method name="ChooseCaretX" type="" overloaded="no">
-        <autodoc>ChooseCaretX(self)</autodoc>
-      </method>
-      <method name="SetXCaretPolicy" type="" overloaded="no">
-        <autodoc>SetXCaretPolicy(self, int caretPolicy, int caretSlop)</autodoc>
-        <paramlist>
-          <param name="caretPolicy" type="int" default=""/>
-          <param name="caretSlop" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetYCaretPolicy" type="" overloaded="no">
-        <autodoc>SetYCaretPolicy(self, int caretPolicy, int caretSlop)</autodoc>
-        <paramlist>
-          <param name="caretPolicy" type="int" default=""/>
-          <param name="caretSlop" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetPrintWrapMode" type="" overloaded="no">
-        <autodoc>SetPrintWrapMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrintWrapMode" type="int" overloaded="no">
-        <autodoc>GetPrintWrapMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetHotspotActiveForeground" type="" overloaded="no">
-        <autodoc>SetHotspotActiveForeground(self, bool useSetting, Colour fore)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="fore" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHotspotActiveBackground" type="" overloaded="no">
-        <autodoc>SetHotspotActiveBackground(self, bool useSetting, Colour back)</autodoc>
-        <paramlist>
-          <param name="useSetting" type="bool" default=""/>
-          <param name="back" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHotspotActiveUnderline" type="" overloaded="no">
-        <autodoc>SetHotspotActiveUnderline(self, bool underline)</autodoc>
-        <paramlist>
-          <param name="underline" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHotspotSingleLine" type="" overloaded="no">
-        <autodoc>SetHotspotSingleLine(self, bool singleLine)</autodoc>
-        <paramlist>
-          <param name="singleLine" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="ParaDown" type="" overloaded="no">
-        <autodoc>ParaDown(self)</autodoc>
-      </method>
-      <method name="ParaDownExtend" type="" overloaded="no">
-        <autodoc>ParaDownExtend(self)</autodoc>
-      </method>
-      <method name="ParaUp" type="" overloaded="no">
-        <autodoc>ParaUp(self)</autodoc>
-      </method>
-      <method name="ParaUpExtend" type="" overloaded="no">
-        <autodoc>ParaUpExtend(self)</autodoc>
-      </method>
-      <method name="PositionBefore" type="int" overloaded="no">
-        <autodoc>PositionBefore(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="PositionAfter" type="int" overloaded="no">
-        <autodoc>PositionAfter(self, int pos) -&gt; int</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CopyRange" type="" overloaded="no">
-        <autodoc>CopyRange(self, int start, int end)</autodoc>
-        <paramlist>
-          <param name="start" type="int" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="CopyText" type="" overloaded="no">
-        <autodoc>CopyText(self, int length, String text)</autodoc>
-        <paramlist>
-          <param name="length" type="int" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelectionMode" type="" overloaded="no">
-        <autodoc>SetSelectionMode(self, int mode)</autodoc>
-        <paramlist>
-          <param name="mode" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelectionMode" type="int" overloaded="no">
-        <autodoc>GetSelectionMode(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLineSelStartPosition" type="int" overloaded="no">
-        <autodoc>GetLineSelStartPosition(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineSelEndPosition" type="int" overloaded="no">
-        <autodoc>GetLineSelEndPosition(self, int line) -&gt; int</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="LineDownRectExtend" type="" overloaded="no">
-        <autodoc>LineDownRectExtend(self)</autodoc>
-      </method>
-      <method name="LineUpRectExtend" type="" overloaded="no">
-        <autodoc>LineUpRectExtend(self)</autodoc>
-      </method>
-      <method name="CharLeftRectExtend" type="" overloaded="no">
-        <autodoc>CharLeftRectExtend(self)</autodoc>
-      </method>
-      <method name="CharRightRectExtend" type="" overloaded="no">
-        <autodoc>CharRightRectExtend(self)</autodoc>
-      </method>
-      <method name="HomeRectExtend" type="" overloaded="no">
-        <autodoc>HomeRectExtend(self)</autodoc>
-      </method>
-      <method name="VCHomeRectExtend" type="" overloaded="no">
-        <autodoc>VCHomeRectExtend(self)</autodoc>
-      </method>
-      <method name="LineEndRectExtend" type="" overloaded="no">
-        <autodoc>LineEndRectExtend(self)</autodoc>
-      </method>
-      <method name="PageUpRectExtend" type="" overloaded="no">
-        <autodoc>PageUpRectExtend(self)</autodoc>
-      </method>
-      <method name="PageDownRectExtend" type="" overloaded="no">
-        <autodoc>PageDownRectExtend(self)</autodoc>
-      </method>
-      <method name="StutteredPageUp" type="" overloaded="no">
-        <autodoc>StutteredPageUp(self)</autodoc>
-      </method>
-      <method name="StutteredPageUpExtend" type="" overloaded="no">
-        <autodoc>StutteredPageUpExtend(self)</autodoc>
-      </method>
-      <method name="StutteredPageDown" type="" overloaded="no">
-        <autodoc>StutteredPageDown(self)</autodoc>
-      </method>
-      <method name="StutteredPageDownExtend" type="" overloaded="no">
-        <autodoc>StutteredPageDownExtend(self)</autodoc>
-      </method>
-      <method name="WordLeftEnd" type="" overloaded="no">
-        <autodoc>WordLeftEnd(self)</autodoc>
-      </method>
-      <method name="WordLeftEndExtend" type="" overloaded="no">
-        <autodoc>WordLeftEndExtend(self)</autodoc>
-      </method>
-      <method name="WordRightEnd" type="" overloaded="no">
-        <autodoc>WordRightEnd(self)</autodoc>
-      </method>
-      <method name="WordRightEndExtend" type="" overloaded="no">
-        <autodoc>WordRightEndExtend(self)</autodoc>
-      </method>
-      <method name="SetWhitespaceChars" type="" overloaded="no">
-        <autodoc>SetWhitespaceChars(self, String characters)</autodoc>
-        <paramlist>
-          <param name="characters" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCharsDefault" type="" overloaded="no">
-        <autodoc>SetCharsDefault(self)</autodoc>
-      </method>
-      <method name="AutoCompGetCurrent" type="int" overloaded="no">
-        <autodoc>AutoCompGetCurrent(self) -&gt; int</autodoc>
-      </method>
-      <method name="StartRecord" type="" overloaded="no">
-        <autodoc>StartRecord(self)</autodoc>
-      </method>
-      <method name="StopRecord" type="" overloaded="no">
-        <autodoc>StopRecord(self)</autodoc>
-      </method>
-      <method name="SetLexer" type="" overloaded="no">
-        <autodoc>SetLexer(self, int lexer)</autodoc>
-        <paramlist>
-          <param name="lexer" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLexer" type="int" overloaded="no">
-        <autodoc>GetLexer(self) -&gt; int</autodoc>
-      </method>
-      <method name="Colourise" type="" overloaded="no">
-        <autodoc>Colourise(self, int start, int end)</autodoc>
-        <paramlist>
-          <param name="start" type="int" default=""/>
-          <param name="end" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetProperty" type="" overloaded="no">
-        <autodoc>SetProperty(self, String key, String value)</autodoc>
-        <paramlist>
-          <param name="key" type="String" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetKeyWords" type="" overloaded="no">
-        <autodoc>SetKeyWords(self, int keywordSet, String keyWords)</autodoc>
-        <paramlist>
-          <param name="keywordSet" type="int" default=""/>
-          <param name="keyWords" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLexerLanguage" type="" overloaded="no">
-        <autodoc>SetLexerLanguage(self, String language)</autodoc>
-        <paramlist>
-          <param name="language" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCurrentLine" type="int" overloaded="no">
-        <autodoc>GetCurrentLine(self) -&gt; int</autodoc>
-      </method>
-      <method name="StyleSetSpec" type="" overloaded="no">
-        <autodoc>StyleSetSpec(self, int styleNum, String spec)</autodoc>
-        <paramlist>
-          <param name="styleNum" type="int" default=""/>
-          <param name="spec" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetFont" type="" overloaded="no">
-        <autodoc>StyleSetFont(self, int styleNum, Font font)</autodoc>
-        <paramlist>
-          <param name="styleNum" type="int" default=""/>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="StyleSetFontAttr" type="" overloaded="no">
-        <autodoc>StyleSetFontAttr(self, int styleNum, int size, String faceName, bool bold, 
-    bool italic, bool underline)</autodoc>
-        <paramlist>
-          <param name="styleNum" type="int" default=""/>
-          <param name="size" type="int" default=""/>
-          <param name="faceName" type="String" default=""/>
-          <param name="bold" type="bool" default=""/>
-          <param name="italic" type="bool" default=""/>
-          <param name="underline" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="CmdKeyExecute" type="" overloaded="no">
-        <autodoc>CmdKeyExecute(self, int cmd)</autodoc>
-        <paramlist>
-          <param name="cmd" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMargins" type="" overloaded="no">
-        <autodoc>SetMargins(self, int left, int right)</autodoc>
-        <paramlist>
-          <param name="left" type="int" default=""/>
-          <param name="right" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSelection" type="" overloaded="no">
-        <autodoc>GetSelection(self, int OUTPUT, int OUTPUT)</autodoc>
-        <paramlist>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="PointFromPosition" type="Point" overloaded="no">
-        <autodoc>PointFromPosition(self, int pos) -&gt; Point</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollToLine" type="" overloaded="no">
-        <autodoc>ScrollToLine(self, int line)</autodoc>
-        <paramlist>
-          <param name="line" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollToColumn" type="" overloaded="no">
-        <autodoc>ScrollToColumn(self, int column)</autodoc>
-        <paramlist>
-          <param name="column" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SendMsg" type="long" overloaded="no">
-        <autodoc>SendMsg(self, int msg, long wp=0, long lp=0) -&gt; long</autodoc>
-        <paramlist>
-          <param name="msg" type="int" default=""/>
-          <param name="wp" type="long" default="0"/>
-          <param name="lp" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="SetVScrollBar" type="" overloaded="no">
-        <autodoc>SetVScrollBar(self, wxScrollBar bar)</autodoc>
-        <paramlist>
-          <param name="bar" type="ScrollBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetHScrollBar" type="" overloaded="no">
-        <autodoc>SetHScrollBar(self, wxScrollBar bar)</autodoc>
-        <paramlist>
-          <param name="bar" type="ScrollBar" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLastKeydownProcessed" type="bool" overloaded="no">
-        <autodoc>GetLastKeydownProcessed(self) -&gt; bool</autodoc>
-      </method>
-      <method name="SetLastKeydownProcessed" type="" overloaded="no">
-        <autodoc>SetLastKeydownProcessed(self, bool val)</autodoc>
-        <paramlist>
-          <param name="val" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SaveFile" type="bool" overloaded="no">
-        <autodoc>SaveFile(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFile" type="bool" overloaded="no">
-        <autodoc>LoadFile(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoDragOver" type="wxDragResult" overloaded="no">
-        <autodoc>DoDragOver(self, int x, int y, int def) -&gt; int</autodoc>
-        <paramlist>
-          <param name="x" type="int" default=""/>
-          <param name="y" type="int" default=""/>
-          <param name="def" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="DoDropText" type="bool" overloaded="no">
-        <autodoc>DoDropText(self, long x, long y, String data) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="x" type="long" default=""/>
-          <param name="y" type="long" default=""/>
-          <param name="data" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetUseAntiAliasing" type="" overloaded="no">
-        <autodoc>SetUseAntiAliasing(self, bool useAA)</autodoc>
-        <paramlist>
-          <param name="useAA" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetUseAntiAliasing" type="bool" overloaded="no">
-        <autodoc>GetUseAntiAliasing(self) -&gt; bool</autodoc>
-      </method>
-    </class>
-    <class name="StyledTextEvent" oldname="wxStyledTextEvent" module="stc">
-      <baseclass name="CommandEvent"/>
-      <constructor name="StyledTextEvent" overloaded="no">
-        <autodoc>__init__(self, wxEventType commandType=0, int id=0) -&gt; StyledTextEvent</autodoc>
-        <paramlist>
-          <param name="commandType" type="wxEventType" default="0"/>
-          <param name="id" type="int" default="0"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxStyledTextEvent" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="SetPosition" type="" overloaded="no">
-        <autodoc>SetPosition(self, int pos)</autodoc>
-        <paramlist>
-          <param name="pos" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetKey" type="" overloaded="no">
-        <autodoc>SetKey(self, int k)</autodoc>
-        <paramlist>
-          <param name="k" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetModifiers" type="" overloaded="no">
-        <autodoc>SetModifiers(self, int m)</autodoc>
-        <paramlist>
-          <param name="m" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetModificationType" type="" overloaded="no">
-        <autodoc>SetModificationType(self, int t)</autodoc>
-        <paramlist>
-          <param name="t" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String t)</autodoc>
-        <paramlist>
-          <param name="t" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLength" type="" overloaded="no">
-        <autodoc>SetLength(self, int len)</autodoc>
-        <paramlist>
-          <param name="len" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLinesAdded" type="" overloaded="no">
-        <autodoc>SetLinesAdded(self, int num)</autodoc>
-        <paramlist>
-          <param name="num" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLine" type="" overloaded="no">
-        <autodoc>SetLine(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldLevelNow" type="" overloaded="no">
-        <autodoc>SetFoldLevelNow(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFoldLevelPrev" type="" overloaded="no">
-        <autodoc>SetFoldLevelPrev(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMargin" type="" overloaded="no">
-        <autodoc>SetMargin(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMessage" type="" overloaded="no">
-        <autodoc>SetMessage(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWParam" type="" overloaded="no">
-        <autodoc>SetWParam(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetLParam" type="" overloaded="no">
-        <autodoc>SetLParam(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetListType" type="" overloaded="no">
-        <autodoc>SetListType(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetX" type="" overloaded="no">
-        <autodoc>SetX(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetY" type="" overloaded="no">
-        <autodoc>SetY(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDragText" type="" overloaded="no">
-        <autodoc>SetDragText(self, String val)</autodoc>
-        <paramlist>
-          <param name="val" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDragAllowMove" type="" overloaded="no">
-        <autodoc>SetDragAllowMove(self, bool val)</autodoc>
-        <paramlist>
-          <param name="val" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetDragResult" type="" overloaded="no">
-        <autodoc>SetDragResult(self, int val)</autodoc>
-        <paramlist>
-          <param name="val" type="wxDragResult" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPosition" type="int" overloaded="no">
-        <autodoc>GetPosition(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetKey" type="int" overloaded="no">
-        <autodoc>GetKey(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetModifiers" type="int" overloaded="no">
-        <autodoc>GetModifiers(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetModificationType" type="int" overloaded="no">
-        <autodoc>GetModificationType(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetLength" type="int" overloaded="no">
-        <autodoc>GetLength(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLinesAdded" type="int" overloaded="no">
-        <autodoc>GetLinesAdded(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLine" type="int" overloaded="no">
-        <autodoc>GetLine(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetFoldLevelNow" type="int" overloaded="no">
-        <autodoc>GetFoldLevelNow(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetFoldLevelPrev" type="int" overloaded="no">
-        <autodoc>GetFoldLevelPrev(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMargin" type="int" overloaded="no">
-        <autodoc>GetMargin(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetMessage" type="int" overloaded="no">
-        <autodoc>GetMessage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWParam" type="int" overloaded="no">
-        <autodoc>GetWParam(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetLParam" type="int" overloaded="no">
-        <autodoc>GetLParam(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetListType" type="int" overloaded="no">
-        <autodoc>GetListType(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetX" type="int" overloaded="no">
-        <autodoc>GetX(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetY" type="int" overloaded="no">
-        <autodoc>GetY(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDragText" type="String" overloaded="no">
-        <autodoc>GetDragText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetDragAllowMove" type="bool" overloaded="no">
-        <autodoc>GetDragAllowMove(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetDragResult" type="wxDragResult" overloaded="no">
-        <autodoc>GetDragResult(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetShift" type="bool" overloaded="no">
-        <autodoc>GetShift(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetControl" type="bool" overloaded="no">
-        <autodoc>GetControl(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetAlt" type="bool" overloaded="no">
-        <autodoc>GetAlt(self) -&gt; bool</autodoc>
-      </method>
-      <method name="Clone" type="Event" overloaded="no">
-        <autodoc>Clone(self) -&gt; Event</autodoc>
-      </method>
-    </class>
-    <pythoncode>
-EVT_STC_CHANGE = wx.PyEventBinder( wxEVT_STC_CHANGE, 1 )
-EVT_STC_STYLENEEDED = wx.PyEventBinder( wxEVT_STC_STYLENEEDED, 1 )
-EVT_STC_CHARADDED = wx.PyEventBinder( wxEVT_STC_CHARADDED, 1 )
-EVT_STC_SAVEPOINTREACHED = wx.PyEventBinder( wxEVT_STC_SAVEPOINTREACHED, 1 )
-EVT_STC_SAVEPOINTLEFT = wx.PyEventBinder( wxEVT_STC_SAVEPOINTLEFT, 1 )
-EVT_STC_ROMODIFYATTEMPT = wx.PyEventBinder( wxEVT_STC_ROMODIFYATTEMPT, 1 )
-EVT_STC_KEY = wx.PyEventBinder( wxEVT_STC_KEY, 1 )
-EVT_STC_DOUBLECLICK = wx.PyEventBinder( wxEVT_STC_DOUBLECLICK, 1 )
-EVT_STC_UPDATEUI = wx.PyEventBinder( wxEVT_STC_UPDATEUI, 1 )
-EVT_STC_MODIFIED = wx.PyEventBinder( wxEVT_STC_MODIFIED, 1 )
-EVT_STC_MACRORECORD = wx.PyEventBinder( wxEVT_STC_MACRORECORD, 1 )
-EVT_STC_MARGINCLICK = wx.PyEventBinder( wxEVT_STC_MARGINCLICK, 1 )
-EVT_STC_NEEDSHOWN = wx.PyEventBinder( wxEVT_STC_NEEDSHOWN, 1 )
-EVT_STC_PAINTED = wx.PyEventBinder( wxEVT_STC_PAINTED, 1 )
-EVT_STC_USERLISTSELECTION = wx.PyEventBinder( wxEVT_STC_USERLISTSELECTION, 1 )
-EVT_STC_URIDROPPED = wx.PyEventBinder( wxEVT_STC_URIDROPPED, 1 )
-EVT_STC_DWELLSTART = wx.PyEventBinder( wxEVT_STC_DWELLSTART, 1 )
-EVT_STC_DWELLEND = wx.PyEventBinder( wxEVT_STC_DWELLEND, 1 )
-EVT_STC_START_DRAG = wx.PyEventBinder( wxEVT_STC_START_DRAG, 1 )
-EVT_STC_DRAG_OVER = wx.PyEventBinder( wxEVT_STC_DRAG_OVER, 1 )
-EVT_STC_DO_DROP = wx.PyEventBinder( wxEVT_STC_DO_DROP, 1 )
-EVT_STC_ZOOM = wx.PyEventBinder( wxEVT_STC_ZOOM, 1 )
-EVT_STC_HOTSPOT_CLICK = wx.PyEventBinder( wxEVT_STC_HOTSPOT_CLICK, 1 )
-EVT_STC_HOTSPOT_DCLICK = wx.PyEventBinder( wxEVT_STC_HOTSPOT_DCLICK, 1 )
-EVT_STC_CALLTIP_CLICK = wx.PyEventBinder( wxEVT_STC_CALLTIP_CLICK, 1 )
-</pythoncode>
-  </module>
-  <module name="xrc">
-    <import name="_core"/>
-    <pythoncode> wx = _core </pythoncode>
-    <pythoncode> __docfilter__ = wx.__DocFilter(globals()) </pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="XmlResource" oldname="wxXmlResource" module="xrc">
-      <baseclass name="Object"/>
-      <constructor name="XmlResource" overloaded="no">
-        <autodoc>__init__(self, String filemask, int flags=XRC_USE_LOCALE) -&gt; XmlResource</autodoc>
-        <paramlist>
-          <param name="filemask" type="String" default=""/>
-          <param name="flags" type="int" default="wxXRC_USE_LOCALE"/>
-        </paramlist>
-      </constructor>
-      <constructor name="EmptyXmlResource" overloaded="no">
-        <autodoc>EmptyXmlResource(int flags=XRC_USE_LOCALE) -&gt; XmlResource</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default="wxXRC_USE_LOCALE"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxXmlResource" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Load" type="bool" overloaded="no">
-        <autodoc>Load(self, String filemask) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filemask" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFromString" type="bool" overloaded="no">
-        <autodoc>LoadFromString(self, String data) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="data" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="InitAllHandlers" type="" overloaded="no">
-        <autodoc>InitAllHandlers(self)</autodoc>
-      </method>
-      <method name="AddHandler" type="" overloaded="no">
-        <autodoc>AddHandler(self, XmlResourceHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="wxPyXmlResourceHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertHandler" type="" overloaded="no">
-        <autodoc>InsertHandler(self, XmlResourceHandler handler)</autodoc>
-        <paramlist>
-          <param name="handler" type="wxPyXmlResourceHandler" default=""/>
-        </paramlist>
-      </method>
-      <method name="ClearHandlers" type="" overloaded="no">
-        <autodoc>ClearHandlers(self)</autodoc>
-      </method>
-      <staticmethod name="AddSubclassFactory" type="" overloaded="no">
-        <autodoc>AddSubclassFactory(XmlSubclassFactory factory)</autodoc>
-        <paramlist>
-          <param name="factory" type="wxPyXmlSubclassFactory" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="LoadMenu" type="Menu" overloaded="no">
-        <autodoc>LoadMenu(self, String name) -&gt; Menu</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadMenuBar" type="MenuBar" overloaded="no">
-        <autodoc>LoadMenuBar(self, String name) -&gt; MenuBar</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadMenuBarOnFrame" type="MenuBar" overloaded="no">
-        <autodoc>LoadMenuBarOnFrame(self, Window parent, String name) -&gt; MenuBar</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadToolBar" type="ToolBar" overloaded="no">
-        <autodoc>LoadToolBar(self, Window parent, String name) -&gt; wxToolBar</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadDialog" type="Dialog" overloaded="no">
-        <autodoc>LoadDialog(self, Window parent, String name) -&gt; wxDialog</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadOnDialog" type="bool" overloaded="no">
-        <autodoc>LoadOnDialog(self, wxDialog dlg, Window parent, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="dlg" type="Dialog" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadPanel" type="Panel" overloaded="no">
-        <autodoc>LoadPanel(self, Window parent, String name) -&gt; wxPanel</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadOnPanel" type="bool" overloaded="no">
-        <autodoc>LoadOnPanel(self, wxPanel panel, Window parent, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="panel" type="Panel" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadFrame" type="Frame" overloaded="no">
-        <autodoc>LoadFrame(self, Window parent, String name) -&gt; wxFrame</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadOnFrame" type="bool" overloaded="no">
-        <autodoc>LoadOnFrame(self, wxFrame frame, Window parent, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="frame" type="Frame" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadObject" type="Object" overloaded="no">
-        <autodoc>LoadObject(self, Window parent, String name, String classname) -&gt; Object</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-          <param name="classname" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadOnObject" type="bool" overloaded="no">
-        <autodoc>LoadOnObject(self, Object instance, Window parent, String name, String classname) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="instance" type="Object" default=""/>
-          <param name="parent" type="Window" default=""/>
-          <param name="name" type="String" default=""/>
-          <param name="classname" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadBitmap" type="Bitmap" overloaded="no">
-        <autodoc>LoadBitmap(self, String name) -&gt; Bitmap</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="LoadIcon" type="Icon" overloaded="no">
-        <autodoc>LoadIcon(self, String name) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AttachUnknownControl" type="bool" overloaded="no">
-        <autodoc>AttachUnknownControl(self, String name, Window control, Window parent=None) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="control" type="Window" default=""/>
-          <param name="parent" type="Window" default="NULL"/>
-        </paramlist>
-      </method>
-      <staticmethod name="GetXRCID" type="int" overloaded="no">
-        <autodoc>GetXRCID(String str_id) -&gt; int</autodoc>
-        <paramlist>
-          <param name="str_id" type="String" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="GetVersion" type="long" overloaded="no">
-        <autodoc>GetVersion(self) -&gt; long</autodoc>
-      </method>
-      <method name="CompareVersion" type="int" overloaded="no">
-        <autodoc>CompareVersion(self, int major, int minor, int release, int revision) -&gt; int</autodoc>
-        <paramlist>
-          <param name="major" type="int" default=""/>
-          <param name="minor" type="int" default=""/>
-          <param name="release" type="int" default=""/>
-          <param name="revision" type="int" default=""/>
-        </paramlist>
-      </method>
-      <staticmethod name="Get" type="XmlResource" overloaded="no">
-        <autodoc>Get() -&gt; XmlResource</autodoc>
-      </staticmethod>
-      <staticmethod name="Set" type="XmlResource" overloaded="no">
-        <autodoc>Set(XmlResource res) -&gt; XmlResource</autodoc>
-        <paramlist>
-          <param name="res" type="XmlResource" default=""/>
-        </paramlist>
-      </staticmethod>
-      <method name="GetFlags" type="int" overloaded="no">
-        <autodoc>GetFlags(self) -&gt; int</autodoc>
-      </method>
-      <method name="SetFlags" type="" overloaded="no">
-        <autodoc>SetFlags(self, int flags)</autodoc>
-        <paramlist>
-          <param name="flags" type="int" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-def XRCID(str_id):
-    return XmlResource_GetXRCID(str_id)
-
-def XRCCTRL(window, str_id, *ignoreargs):
-    return window.FindWindowById(XRCID(str_id))
-</pythoncode>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="XmlSubclassFactory" oldname="wxPyXmlSubclassFactory" module="xrc">
-      <constructor name="wxPyXmlSubclassFactory" overloaded="no">
-        <autodoc>__init__(self) -&gt; XmlSubclassFactory</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="XmlProperty" oldname="wxXmlProperty" module="xrc">
-      <constructor name="XmlProperty" overloaded="no">
-        <autodoc>__init__(self, String name=EmptyString, String value=EmptyString, 
-    XmlProperty next=None) -&gt; XmlProperty</autodoc>
-        <paramlist>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-          <param name="value" type="String" default="wxPyEmptyString"/>
-          <param name="next" type="XmlProperty" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetNext" type="XmlProperty" overloaded="no">
-        <autodoc>GetNext(self) -&gt; XmlProperty</autodoc>
-      </method>
-      <method name="SetName" type="" overloaded="no">
-        <autodoc>SetName(self, String name)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, String value)</autodoc>
-        <paramlist>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNext" type="" overloaded="no">
-        <autodoc>SetNext(self, XmlProperty next)</autodoc>
-        <paramlist>
-          <param name="next" type="XmlProperty" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="XmlNode" oldname="wxXmlNode" module="xrc">
-      <constructor name="XmlNode" overloaded="no">
-        <autodoc>__init__(self, XmlNode parent=None, int type=0, String name=EmptyString, 
-    String content=EmptyString, XmlProperty props=None, 
-    XmlNode next=None) -&gt; XmlNode</autodoc>
-        <paramlist>
-          <param name="parent" type="XmlNode" default="NULL"/>
-          <param name="type" type="wxXmlNodeType" default="0"/>
-          <param name="name" type="String" default="wxPyEmptyString"/>
-          <param name="content" type="String" default="wxPyEmptyString"/>
-          <param name="props" type="XmlProperty" default="NULL"/>
-          <param name="next" type="XmlNode" default="NULL"/>
-        </paramlist>
-      </constructor>
-      <constructor name="XmlNodeEasy" overloaded="no">
-        <autodoc>XmlNodeEasy(int type, String name, String content=EmptyString) -&gt; XmlNode</autodoc>
-        <paramlist>
-          <param name="type" type="wxXmlNodeType" default=""/>
-          <param name="name" type="String" default=""/>
-          <param name="content" type="String" default="wxPyEmptyString"/>
-        </paramlist>
-      </constructor>
-      <destructor name="~wxXmlNode" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="AddChild" type="" overloaded="no">
-        <autodoc>AddChild(self, XmlNode child)</autodoc>
-        <paramlist>
-          <param name="child" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertChild" type="" overloaded="no">
-        <autodoc>InsertChild(self, XmlNode child, XmlNode before_node)</autodoc>
-        <paramlist>
-          <param name="child" type="XmlNode" default=""/>
-          <param name="before_node" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveChild" type="bool" overloaded="no">
-        <autodoc>RemoveChild(self, XmlNode child) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="child" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddProperty" type="" overloaded="no">
-        <autodoc>AddProperty(self, XmlProperty prop)</autodoc>
-        <paramlist>
-          <param name="prop" type="XmlProperty" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddPropertyName" type="" overloaded="no">
-        <autodoc>AddPropertyName(self, String name, String value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteProperty" type="bool" overloaded="no">
-        <autodoc>DeleteProperty(self, String name) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetType" type="wxXmlNodeType" overloaded="no">
-        <autodoc>GetType(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetContent" type="String" overloaded="no">
-        <autodoc>GetContent(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetParent" type="XmlNode" overloaded="no">
-        <autodoc>GetParent(self) -&gt; XmlNode</autodoc>
-      </method>
-      <method name="GetNext" type="XmlNode" overloaded="no">
-        <autodoc>GetNext(self) -&gt; XmlNode</autodoc>
-      </method>
-      <method name="GetChildren" type="XmlNode" overloaded="no">
-        <autodoc>GetChildren(self) -&gt; XmlNode</autodoc>
-      </method>
-      <method name="GetProperties" type="XmlProperty" overloaded="no">
-        <autodoc>GetProperties(self) -&gt; XmlProperty</autodoc>
-      </method>
-      <method name="GetPropVal" type="String" overloaded="no">
-        <autodoc>GetPropVal(self, String propName, String defaultVal) -&gt; String</autodoc>
-        <paramlist>
-          <param name="propName" type="String" default=""/>
-          <param name="defaultVal" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasProp" type="bool" overloaded="no">
-        <autodoc>HasProp(self, String propName) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="propName" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetType" type="" overloaded="no">
-        <autodoc>SetType(self, int type)</autodoc>
-        <paramlist>
-          <param name="type" type="wxXmlNodeType" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetName" type="" overloaded="no">
-        <autodoc>SetName(self, String name)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetContent" type="" overloaded="no">
-        <autodoc>SetContent(self, String con)</autodoc>
-        <paramlist>
-          <param name="con" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParent" type="" overloaded="no">
-        <autodoc>SetParent(self, XmlNode parent)</autodoc>
-        <paramlist>
-          <param name="parent" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetNext" type="" overloaded="no">
-        <autodoc>SetNext(self, XmlNode next)</autodoc>
-        <paramlist>
-          <param name="next" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetChildren" type="" overloaded="no">
-        <autodoc>SetChildren(self, XmlNode child)</autodoc>
-        <paramlist>
-          <param name="child" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetProperties" type="" overloaded="no">
-        <autodoc>SetProperties(self, XmlProperty prop)</autodoc>
-        <paramlist>
-          <param name="prop" type="XmlProperty" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="XmlDocument" oldname="wxXmlDocument" module="xrc">
-      <baseclass name="Object"/>
-      <constructor name="XmlDocument" overloaded="no">
-        <autodoc>__init__(self, String filename, String encoding=UTF8String) -&gt; XmlDocument</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="encoding" type="String" default="wxPyUTF8String"/>
-        </paramlist>
-      </constructor>
-      <constructor name="XmlDocumentFromStream" overloaded="no">
-        <autodoc>XmlDocumentFromStream(InputStream stream, String encoding=UTF8String) -&gt; XmlDocument</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="encoding" type="String" default="wxPyUTF8String"/>
-        </paramlist>
-      </constructor>
-      <constructor name="EmptyXmlDocument" overloaded="no">
-        <autodoc>EmptyXmlDocument() -&gt; XmlDocument</autodoc>
-      </constructor>
-      <destructor name="~wxXmlDocument" overloaded="no">
-        <autodoc>__del__(self)</autodoc>
-      </destructor>
-      <method name="Load" type="bool" overloaded="no">
-        <autodoc>Load(self, String filename, String encoding=UTF8String) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-          <param name="encoding" type="String" default="wxPyUTF8String"/>
-        </paramlist>
-      </method>
-      <method name="LoadFromStream" type="bool" overloaded="no">
-        <autodoc>LoadFromStream(self, InputStream stream, String encoding=UTF8String) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="stream" type="wxInputStream" default=""/>
-          <param name="encoding" type="String" default="wxPyUTF8String"/>
-        </paramlist>
-      </method>
-      <method name="Save" type="bool" overloaded="no">
-        <autodoc>Save(self, String filename) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="filename" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SaveToStream" type="bool" overloaded="no">
-        <autodoc>SaveToStream(self, OutputStream stream) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="stream" type="OutputStream" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsOk" type="bool" overloaded="no">
-        <autodoc>IsOk(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetRoot" type="XmlNode" overloaded="no">
-        <autodoc>GetRoot(self) -&gt; XmlNode</autodoc>
-      </method>
-      <method name="GetVersion" type="String" overloaded="no">
-        <autodoc>GetVersion(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetFileEncoding" type="String" overloaded="no">
-        <autodoc>GetFileEncoding(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetRoot" type="" overloaded="no">
-        <autodoc>SetRoot(self, XmlNode node)</autodoc>
-        <paramlist>
-          <param name="node" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetVersion" type="" overloaded="no">
-        <autodoc>SetVersion(self, String version)</autodoc>
-        <paramlist>
-          <param name="version" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetFileEncoding" type="" overloaded="no">
-        <autodoc>SetFileEncoding(self, String encoding)</autodoc>
-        <paramlist>
-          <param name="encoding" type="String" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-#---------------------------------------------------------------------------
-</pythoncode>
-    <class name="XmlResourceHandler" oldname="wxPyXmlResourceHandler" module="xrc">
-      <baseclass name="Object"/>
-      <constructor name="wxPyXmlResourceHandler" overloaded="no">
-        <autodoc>__init__(self) -&gt; XmlResourceHandler</autodoc>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateResource" type="Object" overloaded="no">
-        <autodoc>CreateResource(self, XmlNode node, Object parent, Object instance) -&gt; Object</autodoc>
-        <paramlist>
-          <param name="node" type="XmlNode" default=""/>
-          <param name="parent" type="Object" default=""/>
-          <param name="instance" type="Object" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetParentResource" type="" overloaded="no">
-        <autodoc>SetParentResource(self, XmlResource res)</autodoc>
-        <paramlist>
-          <param name="res" type="XmlResource" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetResource" type="XmlResource" overloaded="no">
-        <autodoc>GetResource(self) -&gt; XmlResource</autodoc>
-      </method>
-      <method name="GetNode" type="XmlNode" overloaded="no">
-        <autodoc>GetNode(self) -&gt; XmlNode</autodoc>
-      </method>
-      <method name="GetClass" type="String" overloaded="no">
-        <autodoc>GetClass(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetParent" type="Object" overloaded="no">
-        <autodoc>GetParent(self) -&gt; Object</autodoc>
-      </method>
-      <method name="GetInstance" type="Object" overloaded="no">
-        <autodoc>GetInstance(self) -&gt; Object</autodoc>
-      </method>
-      <method name="GetParentAsWindow" type="Window" overloaded="no">
-        <autodoc>GetParentAsWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetInstanceAsWindow" type="Window" overloaded="no">
-        <autodoc>GetInstanceAsWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="IsOfClass" type="bool" overloaded="no">
-        <autodoc>IsOfClass(self, XmlNode node, String classname) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="node" type="XmlNode" default=""/>
-          <param name="classname" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNodeContent" type="String" overloaded="no">
-        <autodoc>GetNodeContent(self, XmlNode node) -&gt; String</autodoc>
-        <paramlist>
-          <param name="node" type="XmlNode" default=""/>
-        </paramlist>
-      </method>
-      <method name="HasParam" type="bool" overloaded="no">
-        <autodoc>HasParam(self, String param) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParamNode" type="XmlNode" overloaded="no">
-        <autodoc>GetParamNode(self, String param) -&gt; XmlNode</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetParamValue" type="String" overloaded="no">
-        <autodoc>GetParamValue(self, String param) -&gt; String</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddStyle" type="" overloaded="no">
-        <autodoc>AddStyle(self, String name, int value)</autodoc>
-        <paramlist>
-          <param name="name" type="String" default=""/>
-          <param name="value" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddWindowStyles" type="" overloaded="no">
-        <autodoc>AddWindowStyles(self)</autodoc>
-      </method>
-      <method name="GetStyle" type="int" overloaded="no">
-        <autodoc>GetStyle(self, String param=StyleString, int defaults=0) -&gt; int</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPyStyleString"/>
-          <param name="defaults" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self, String param, bool translate=True) -&gt; String</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-          <param name="translate" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetID" type="int" overloaded="no">
-        <autodoc>GetID(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetName" type="String" overloaded="no">
-        <autodoc>GetName(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetBool" type="bool" overloaded="no">
-        <autodoc>GetBool(self, String param, bool defaultv=False) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-          <param name="defaultv" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="GetLong" type="long" overloaded="no">
-        <autodoc>GetLong(self, String param, long defaultv=0) -&gt; long</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-          <param name="defaultv" type="long" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetColour" type="Colour" overloaded="no">
-        <autodoc>GetColour(self, String param) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetSize" type="Size" overloaded="no">
-        <autodoc>GetSize(self, String param=SizeString) -&gt; Size</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPySizeString"/>
-        </paramlist>
-      </method>
-      <method name="GetPosition" type="Point" overloaded="no">
-        <autodoc>GetPosition(self, String param=PosString) -&gt; Point</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPyPosString"/>
-        </paramlist>
-      </method>
-      <method name="GetDimension" type="int" overloaded="no">
-        <autodoc>GetDimension(self, String param, int defaultv=0) -&gt; int</autodoc>
-        <paramlist>
-          <param name="param" type="String" default=""/>
-          <param name="defaultv" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetBitmap" type="Bitmap" overloaded="no">
-        <autodoc>GetBitmap(self, String param=BitmapString, wxArtClient defaultArtClient=wxART_OTHER, 
-    Size size=DefaultSize) -&gt; Bitmap</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPyBitmapString"/>
-          <param name="defaultArtClient" type="wxArtClient" default="wxART_OTHER"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </method>
-      <method name="GetIcon" type="Icon" overloaded="no">
-        <autodoc>GetIcon(self, String param=IconString, wxArtClient defaultArtClient=wxART_OTHER, 
-    Size size=DefaultSize) -&gt; Icon</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPyIconString"/>
-          <param name="defaultArtClient" type="wxArtClient" default="wxART_OTHER"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-        </paramlist>
-      </method>
-      <method name="GetFont" type="Font" overloaded="no">
-        <autodoc>GetFont(self, String param=FontString) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="param" type="String" default="wxPyFontString"/>
-        </paramlist>
-      </method>
-      <method name="SetupWindow" type="" overloaded="no">
-        <autodoc>SetupWindow(self, Window wnd)</autodoc>
-        <paramlist>
-          <param name="wnd" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="CreateChildren" type="" overloaded="no">
-        <autodoc>CreateChildren(self, Object parent, bool this_hnd_only=False)</autodoc>
-        <paramlist>
-          <param name="parent" type="Object" default=""/>
-          <param name="this_hnd_only" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="CreateChildrenPrivately" type="" overloaded="no">
-        <autodoc>CreateChildrenPrivately(self, Object parent, XmlNode rootnode=None)</autodoc>
-        <paramlist>
-          <param name="parent" type="Object" default=""/>
-          <param name="rootnode" type="XmlNode" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="CreateResFromNode" type="Object" overloaded="no">
-        <autodoc>CreateResFromNode(self, XmlNode node, Object parent, Object instance=None) -&gt; Object</autodoc>
-        <paramlist>
-          <param name="node" type="XmlNode" default=""/>
-          <param name="parent" type="Object" default=""/>
-          <param name="instance" type="Object" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="GetCurFileSystem" type="FileSystem" overloaded="no">
-        <autodoc>GetCurFileSystem(self) -&gt; FileSystem</autodoc>
-      </method>
-    </class>
-    <pythoncode>#----------------------------------------------------------------------------
-# The global was removed  in favor of static accessor functions.  This is for
-# backwards compatibility:
-
-TheXmlResource = XmlResource_Get()
-
-
-#----------------------------------------------------------------------------
-#  Create a factory for handling the subclass property of the object tag.
-
-
-def _my_import(name):
-    mod = __import__(name)
-    components = name.split('.')
-    for comp in components[1:]:
-        mod = getattr(mod, comp)
-    return mod
-
-
-class XmlSubclassFactory_Python(XmlSubclassFactory):
-    def __init__(self):
-        XmlSubclassFactory.__init__(self)
-
-    def Create(self, className):
-        assert className.find('.') != -1, "Module name must be specified!"
-        mname = className[:className.rfind('.')]
-        cname = className[className.rfind('.')+1:]
-        module = _my_import(mname)
-        klass = getattr(module, cname)
-        inst = klass()
-        return inst
-
-
-XmlResource_AddSubclassFactory(XmlSubclassFactory_Python())
-
-#----------------------------------------------------------------------------
-</pythoncode>
-  </module>
-  <module name="gizmos">
-    <import name="_windows"/>
-    <import name="_controls"/>
-    <pythoncode> import wx </pythoncode>
-    <pythoncode> __docfilter__ = wx._core.__DocFilter(globals()) </pythoncode>
-    <class name="DynamicSashSplitEvent" oldname="wxDynamicSashSplitEvent" module="gizmos">
-      <baseclass name="CommandEvent"/>
-      <constructor name="DynamicSashSplitEvent" overloaded="no">
-        <autodoc>__init__(self, Object target) -&gt; DynamicSashSplitEvent</autodoc>
-        <paramlist>
-          <param name="target" type="Object" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="DynamicSashUnifyEvent" oldname="wxDynamicSashUnifyEvent" module="gizmos">
-      <baseclass name="CommandEvent"/>
-      <constructor name="DynamicSashUnifyEvent" overloaded="no">
-        <autodoc>__init__(self, Object target) -&gt; DynamicSashUnifyEvent</autodoc>
-        <paramlist>
-          <param name="target" type="Object" default=""/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="DynamicSashWindow" oldname="wxDynamicSashWindow" module="gizmos">
-      <baseclass name="Window"/>
-      <constructor name="DynamicSashWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxDS_MANAGE_SCROLLBARS|wxDS_DRAG_CORNER, 
-    String name=DynamicSashNameStr) -&gt; DynamicSashWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxDS_MANAGE_SCROLLBARS|wxDS_DRAG_CORNER"/>
-          <param name="name" type="String" default="wxPyDynamicSashNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreDynamicSashWindow" overloaded="no">
-        <autodoc>PreDynamicSashWindow() -&gt; DynamicSashWindow</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxCLIP_CHILDREN|wxDS_MANAGE_SCROLLBARS|wxDS_DRAG_CORNER, 
-    String name=DynamicSashNameStr) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxCLIP_CHILDREN|wxDS_MANAGE_SCROLLBARS|wxDS_DRAG_CORNER"/>
-          <param name="name" type="String" default="wxPyDynamicSashNameStr"/>
-        </paramlist>
-      </method>
-      <method name="GetHScrollBar" type="ScrollBar" overloaded="no">
-        <autodoc>GetHScrollBar(self, Window child) -&gt; ScrollBar</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetVScrollBar" type="ScrollBar" overloaded="no">
-        <autodoc>GetVScrollBar(self, Window child) -&gt; ScrollBar</autodoc>
-        <paramlist>
-          <param name="child" type="Window" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode>
-EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_SPLIT, 1 )
-EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 )
-</pythoncode>
-    <class name="EditableListBox" oldname="wxEditableListBox" module="gizmos">
-      <baseclass name="Panel"/>
-      <constructor name="EditableListBox" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, String label=EmptyString, 
-    Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=wxEL_ALLOW_NEW|wxEL_ALLOW_EDIT|wxEL_ALLOW_DELETE, 
-    String name=EditableListBoxNameStr) -&gt; EditableListBox</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="label" type="String" default="wxPyEmptyString"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxEL_ALLOW_NEW|wxEL_ALLOW_EDIT|wxEL_ALLOW_DELETE"/>
-          <param name="name" type="String" default="wxPyEditableListBoxNameStr"/>
-        </paramlist>
-      </constructor>
-      <method name="SetStrings" type="" overloaded="no">
-        <autodoc>SetStrings(self, wxArrayString strings)</autodoc>
-        <paramlist>
-          <param name="strings" type="wxArrayString" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetStrings" type="PyObject" overloaded="no">
-        <autodoc>GetStrings(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetListCtrl" type="ListCtrl" overloaded="no">
-        <autodoc>GetListCtrl(self) -&gt; ListCtrl</autodoc>
-      </method>
-      <method name="GetDelButton" type="BitmapButton" overloaded="no">
-        <autodoc>GetDelButton(self) -&gt; BitmapButton</autodoc>
-      </method>
-      <method name="GetNewButton" type="BitmapButton" overloaded="no">
-        <autodoc>GetNewButton(self) -&gt; BitmapButton</autodoc>
-      </method>
-      <method name="GetUpButton" type="BitmapButton" overloaded="no">
-        <autodoc>GetUpButton(self) -&gt; BitmapButton</autodoc>
-      </method>
-      <method name="GetDownButton" type="BitmapButton" overloaded="no">
-        <autodoc>GetDownButton(self) -&gt; BitmapButton</autodoc>
-      </method>
-      <method name="GetEditButton" type="BitmapButton" overloaded="no">
-        <autodoc>GetEditButton(self) -&gt; BitmapButton</autodoc>
-      </method>
-    </class>
-    <class name="RemotelyScrolledTreeCtrl" oldname="wxRemotelyScrolledTreeCtrl" module="gizmos">
-      <baseclass name="TreeCtrl"/>
-      <constructor name="RemotelyScrolledTreeCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id, Point pos=DefaultPosition, Size size=DefaultSize, 
-    long style=TR_HAS_BUTTONS) -&gt; RemotelyScrolledTreeCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default=""/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTR_HAS_BUTTONS"/>
-        </paramlist>
-      </constructor>
-      <method name="HideVScrollbar" type="" overloaded="no">
-        <autodoc>HideVScrollbar(self)</autodoc>
-      </method>
-      <method name="AdjustRemoteScrollbars" type="" overloaded="no">
-        <autodoc>AdjustRemoteScrollbars(self)</autodoc>
-      </method>
-      <method name="GetScrolledWindow" type="ScrolledWindow" overloaded="no">
-        <autodoc>GetScrolledWindow(self) -&gt; ScrolledWindow</autodoc>
-      </method>
-      <method name="ScrollToLine" type="" overloaded="no">
-        <autodoc>ScrollToLine(self, int posHoriz, int posVert)</autodoc>
-        <paramlist>
-          <param name="posHoriz" type="int" default=""/>
-          <param name="posVert" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetCompanionWindow" type="" overloaded="no">
-        <autodoc>SetCompanionWindow(self, Window companion)</autodoc>
-        <paramlist>
-          <param name="companion" type="Window" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCompanionWindow" type="Window" overloaded="no">
-        <autodoc>GetCompanionWindow(self) -&gt; Window</autodoc>
-      </method>
-    </class>
-    <class name="TreeCompanionWindow" oldname="wxPyTreeCompanionWindow" module="gizmos">
-      <baseclass name="Window"/>
-      <constructor name="wxPyTreeCompanionWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0) -&gt; TreeCompanionWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetTreeCtrl" type="RemotelyScrolledTreeCtrl" overloaded="no">
-        <autodoc>GetTreeCtrl(self) -&gt; RemotelyScrolledTreeCtrl</autodoc>
-      </method>
-      <method name="SetTreeCtrl" type="" overloaded="no">
-        <autodoc>SetTreeCtrl(self, RemotelyScrolledTreeCtrl treeCtrl)</autodoc>
-        <paramlist>
-          <param name="treeCtrl" type="RemotelyScrolledTreeCtrl" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="ThinSplitterWindow" oldname="wxThinSplitterWindow" module="gizmos">
-      <baseclass name="SplitterWindow"/>
-      <constructor name="ThinSplitterWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxSP_3D|wxCLIP_CHILDREN) -&gt; ThinSplitterWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxSP_3D|wxCLIP_CHILDREN"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="SplitterScrolledWindow" oldname="wxSplitterScrolledWindow" module="gizmos">
-      <baseclass name="ScrolledWindow"/>
-      <constructor name="SplitterScrolledWindow" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=0) -&gt; SplitterScrolledWindow</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="0"/>
-        </paramlist>
-      </constructor>
-    </class>
-    <class name="LEDNumberCtrl" oldname="wxLEDNumberCtrl" module="gizmos">
-      <baseclass name="Control"/>
-      <constructor name="LEDNumberCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxLED_ALIGN_LEFT|wxLED_DRAW_FADED) -&gt; LEDNumberCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLED_ALIGN_LEFT|wxLED_DRAW_FADED"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreLEDNumberCtrl" overloaded="no">
-        <autodoc>PreLEDNumberCtrl() -&gt; LEDNumberCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=wxLED_ALIGN_LEFT|wxLED_DRAW_FADED) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxLED_ALIGN_LEFT|wxLED_DRAW_FADED"/>
-        </paramlist>
-      </method>
-      <method name="GetAlignment" type="wxLEDValueAlign" overloaded="no">
-        <autodoc>GetAlignment(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetDrawFaded" type="bool" overloaded="no">
-        <autodoc>GetDrawFaded(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetValue" type="String" overloaded="no">
-        <autodoc>GetValue(self) -&gt; String</autodoc>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int Alignment, bool Redraw=true)</autodoc>
-        <paramlist>
-          <param name="Alignment" type="wxLEDValueAlign" default=""/>
-          <param name="Redraw" type="bool" default="true"/>
-        </paramlist>
-      </method>
-      <method name="SetDrawFaded" type="" overloaded="no">
-        <autodoc>SetDrawFaded(self, bool DrawFaded, bool Redraw=true)</autodoc>
-        <paramlist>
-          <param name="DrawFaded" type="bool" default=""/>
-          <param name="Redraw" type="bool" default="true"/>
-        </paramlist>
-      </method>
-      <method name="SetValue" type="" overloaded="no">
-        <autodoc>SetValue(self, String Value, bool Redraw=true)</autodoc>
-        <paramlist>
-          <param name="Value" type="String" default=""/>
-          <param name="Redraw" type="bool" default="true"/>
-        </paramlist>
-      </method>
-    </class>
-    <pythoncode> wx.TR_DONT_ADJUST_MAC = TR_DONT_ADJUST_MAC </pythoncode>
-    <class name="TreeListColumnInfo" oldname="wxTreeListColumnInfo" module="gizmos">
-      <baseclass name="Object"/>
-      <constructor name="TreeListColumnInfo" overloaded="no">
-        <autodoc>__init__(self, String text=EmptyString, int image=-1, size_t width=100, 
-    bool shown=True, int alignment=TL_ALIGN_LEFT) -&gt; TreeListColumnInfo</autodoc>
-        <paramlist>
-          <param name="text" type="String" default="wxPyEmptyString"/>
-          <param name="image" type="int" default="-1"/>
-          <param name="width" type="size_t" default="100"/>
-          <param name="shown" type="bool" default="True"/>
-          <param name="alignment" type="wxTreeListColumnAlign" default="wxTL_ALIGN_LEFT"/>
-        </paramlist>
-      </constructor>
-      <method name="GetShown" type="bool" overloaded="no">
-        <autodoc>GetShown(self) -&gt; bool</autodoc>
-      </method>
-      <method name="GetAlignment" type="wxTreeListColumnAlign" overloaded="no">
-        <autodoc>GetAlignment(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetText" type="String" overloaded="no">
-        <autodoc>GetText(self) -&gt; String</autodoc>
-      </method>
-      <method name="GetImage" type="int" overloaded="no">
-        <autodoc>GetImage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetSelectedImage" type="int" overloaded="no">
-        <autodoc>GetSelectedImage(self) -&gt; int</autodoc>
-      </method>
-      <method name="GetWidth" type="size_t" overloaded="no">
-        <autodoc>GetWidth(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="SetShown" type="" overloaded="no">
-        <autodoc>SetShown(self, bool shown)</autodoc>
-        <paramlist>
-          <param name="shown" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetAlignment" type="" overloaded="no">
-        <autodoc>SetAlignment(self, int alignment)</autodoc>
-        <paramlist>
-          <param name="alignment" type="wxTreeListColumnAlign" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetText" type="" overloaded="no">
-        <autodoc>SetText(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetImage" type="" overloaded="no">
-        <autodoc>SetImage(self, int image)</autodoc>
-        <paramlist>
-          <param name="image" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetSelectedImage" type="" overloaded="no">
-        <autodoc>SetSelectedImage(self, int image)</autodoc>
-        <paramlist>
-          <param name="image" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetWidth" type="" overloaded="no">
-        <autodoc>SetWidth(self, size_t with)</autodoc>
-        <paramlist>
-          <param name="with" type="size_t" default=""/>
-        </paramlist>
-      </method>
-    </class>
-    <class name="TreeListCtrl" oldname="wxPyTreeListCtrl" module="gizmos">
-      <baseclass name="Control"/>
-      <constructor name="wxPyTreeListCtrl" overloaded="no">
-        <autodoc>__init__(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=TR_DEFAULT_STYLE, 
-    Validator validator=DefaultValidator, 
-    String name=TreeListCtrlNameStr) -&gt; TreeListCtrl</autodoc>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTR_DEFAULT_STYLE"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTreeListCtrlNameStr"/>
-        </paramlist>
-      </constructor>
-      <constructor name="PreTreeListCtrl" overloaded="no">
-        <autodoc>PreTreeListCtrl() -&gt; TreeListCtrl</autodoc>
-      </constructor>
-      <method name="Create" type="bool" overloaded="no">
-        <autodoc>Create(self, Window parent, int id=-1, Point pos=DefaultPosition, 
-    Size size=DefaultSize, long style=TR_DEFAULT_STYLE, 
-    Validator validator=DefaultValidator, 
-    String name=TreeListCtrlNameStr) -&gt; bool</autodoc>
-        <docstring>Do the 2nd phase and create the GUI control.</docstring>
-        <paramlist>
-          <param name="parent" type="Window" default=""/>
-          <param name="id" type="int" default="-1"/>
-          <param name="pos" type="Point" default="wxDefaultPosition"/>
-          <param name="size" type="Size" default="wxDefaultSize"/>
-          <param name="style" type="long" default="wxTR_DEFAULT_STYLE"/>
-          <param name="validator" type="Validator" default="wxDefaultValidator"/>
-          <param name="name" type="String" default="wxPyTreeListCtrlNameStr"/>
-        </paramlist>
-      </method>
-      <method name="_setCallbackInfo" type="" overloaded="no">
-        <autodoc>_setCallbackInfo(self, PyObject self, PyObject _class)</autodoc>
-        <paramlist>
-          <param name="self" type="PyObject" default=""/>
-          <param name="_class" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetCount" type="size_t" overloaded="no">
-        <autodoc>GetCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="GetIndent" type="unsigned int" overloaded="no">
-        <autodoc>GetIndent(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="SetIndent" type="" overloaded="no">
-        <autodoc>SetIndent(self, unsigned int indent)</autodoc>
-        <paramlist>
-          <param name="indent" type="unsigned int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLineSpacing" type="unsigned int" overloaded="no">
-        <autodoc>GetLineSpacing(self) -&gt; unsigned int</autodoc>
-      </method>
-      <method name="SetLineSpacing" type="" overloaded="no">
-        <autodoc>SetLineSpacing(self, unsigned int spacing)</autodoc>
-        <paramlist>
-          <param name="spacing" type="unsigned int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetImageList" type="ImageList" overloaded="no">
-        <autodoc>GetImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="GetStateImageList" type="ImageList" overloaded="no">
-        <autodoc>GetStateImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="GetButtonsImageList" type="ImageList" overloaded="no">
-        <autodoc>GetButtonsImageList(self) -&gt; ImageList</autodoc>
-      </method>
-      <method name="SetImageList" type="" overloaded="no">
-        <autodoc>SetImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetStateImageList" type="" overloaded="no">
-        <autodoc>SetStateImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetButtonsImageList" type="" overloaded="no">
-        <autodoc>SetButtonsImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignImageList" type="" overloaded="no">
-        <autodoc>AssignImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignStateImageList" type="" overloaded="no">
-        <autodoc>AssignStateImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AssignButtonsImageList" type="" overloaded="no">
-        <autodoc>AssignButtonsImageList(self, ImageList imageList)</autodoc>
-        <paramlist>
-          <param name="imageList" type="ImageList" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddColumn" type="" overloaded="no">
-        <autodoc>AddColumn(self, String text)</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddColumnInfo" type="" overloaded="no">
-        <autodoc>AddColumnInfo(self, TreeListColumnInfo col)</autodoc>
-        <paramlist>
-          <param name="col" type="TreeListColumnInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertColumn" type="" overloaded="no">
-        <autodoc>InsertColumn(self, size_t before, String text)</autodoc>
-        <paramlist>
-          <param name="before" type="size_t" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="InsertColumnInfo" type="" overloaded="no">
-        <autodoc>InsertColumnInfo(self, size_t before, TreeListColumnInfo col)</autodoc>
-        <paramlist>
-          <param name="before" type="size_t" default=""/>
-          <param name="col" type="TreeListColumnInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="RemoveColumn" type="" overloaded="no">
-        <autodoc>RemoveColumn(self, size_t column)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnCount" type="size_t" overloaded="no">
-        <autodoc>GetColumnCount(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="SetColumnWidth" type="" overloaded="no">
-        <autodoc>SetColumnWidth(self, size_t column, size_t width)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="width" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnWidth" type="int" overloaded="no">
-        <autodoc>GetColumnWidth(self, size_t column) -&gt; int</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetMainColumn" type="" overloaded="no">
-        <autodoc>SetMainColumn(self, size_t column)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetMainColumn" type="size_t" overloaded="no">
-        <autodoc>GetMainColumn(self) -&gt; size_t</autodoc>
-      </method>
-      <method name="SetColumnText" type="" overloaded="no">
-        <autodoc>SetColumnText(self, size_t column, String text)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="text" type="String" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnText" type="String" overloaded="no">
-        <autodoc>GetColumnText(self, size_t column) -&gt; String</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumn" type="" overloaded="no">
-        <autodoc>SetColumn(self, size_t column, TreeListColumnInfo info)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="info" type="TreeListColumnInfo" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumn" type="TreeListColumnInfo" overloaded="no">
-        <autodoc>GetColumn(self, size_t column) -&gt; TreeListColumnInfo</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumnAlignment" type="" overloaded="no">
-        <autodoc>SetColumnAlignment(self, size_t column, int align)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="align" type="wxTreeListColumnAlign" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnAlignment" type="wxTreeListColumnAlign" overloaded="no">
-        <autodoc>GetColumnAlignment(self, size_t column) -&gt; int</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetColumnImage" type="" overloaded="no">
-        <autodoc>SetColumnImage(self, size_t column, int image)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="image" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetColumnImage" type="int" overloaded="no">
-        <autodoc>GetColumnImage(self, size_t column) -&gt; int</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="ShowColumn" type="" overloaded="no">
-        <autodoc>ShowColumn(self, size_t column, bool shown)</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-          <param name="shown" type="bool" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsColumnShown" type="bool" overloaded="no">
-        <autodoc>IsColumnShown(self, size_t column) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="column" type="size_t" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemText" type="String" overloaded="no">
-        <autodoc>GetItemText(self, TreeItemId item, int column=-1) -&gt; String</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="column" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="GetItemImage" type="int" overloaded="no">
-        <autodoc>GetItemImage(self, TreeItemId item, int column=-1, int which=TreeItemIcon_Normal) -&gt; int</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="column" type="int" default="-1"/>
-          <param name="which" type="wxTreeItemIcon" default="wxTreeItemIcon_Normal"/>
-        </paramlist>
-      </method>
-      <method name="SetItemText" type="" overloaded="no">
-        <autodoc>SetItemText(self, TreeItemId item, String text, int column=-1)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="column" type="int" default="-1"/>
-        </paramlist>
-      </method>
-      <method name="SetItemImage" type="" overloaded="no">
-        <autodoc>SetItemImage(self, TreeItemId item, int image, int column=-1, int which=TreeItemIcon_Normal)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="image" type="int" default=""/>
-          <param name="column" type="int" default="-1"/>
-          <param name="which" type="wxTreeItemIcon" default="wxTreeItemIcon_Normal"/>
-        </paramlist>
-      </method>
-      <method name="GetItemData" type="TreeItemData" overloaded="no">
-        <autodoc>GetItemData(self, TreeItemId item) -&gt; TreeItemData</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemData" type="" overloaded="no">
-        <autodoc>SetItemData(self, TreeItemId item, TreeItemData data)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="data" type="TreeItemData" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemPyData" type="PyObject" overloaded="no">
-        <autodoc>GetItemPyData(self, TreeItemId item) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemPyData" type="" overloaded="no">
-        <autodoc>SetItemPyData(self, TreeItemId item, PyObject obj)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="obj" type="PyObject" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemHasChildren" type="" overloaded="no">
-        <autodoc>SetItemHasChildren(self, TreeItemId item, bool has=True)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="has" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetItemBold" type="" overloaded="no">
-        <autodoc>SetItemBold(self, TreeItemId item, bool bold=True)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="bold" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="SetItemTextColour" type="" overloaded="no">
-        <autodoc>SetItemTextColour(self, TreeItemId item, Colour colour)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemBackgroundColour" type="" overloaded="no">
-        <autodoc>SetItemBackgroundColour(self, TreeItemId item, Colour colour)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="colour" type="Colour" default=""/>
-        </paramlist>
-      </method>
-      <method name="SetItemFont" type="" overloaded="no">
-        <autodoc>SetItemFont(self, TreeItemId item, Font font)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="font" type="Font" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemBold" type="bool" overloaded="no">
-        <autodoc>GetItemBold(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemTextColour" type="Colour" overloaded="no">
-        <autodoc>GetItemTextColour(self, TreeItemId item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemBackgroundColour" type="Colour" overloaded="no">
-        <autodoc>GetItemBackgroundColour(self, TreeItemId item) -&gt; Colour</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetItemFont" type="Font" overloaded="no">
-        <autodoc>GetItemFont(self, TreeItemId item) -&gt; Font</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsVisible" type="bool" overloaded="no">
-        <autodoc>IsVisible(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="ItemHasChildren" type="bool" overloaded="no">
-        <autodoc>ItemHasChildren(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsExpanded" type="bool" overloaded="no">
-        <autodoc>IsExpanded(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsSelected" type="bool" overloaded="no">
-        <autodoc>IsSelected(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="IsBold" type="bool" overloaded="no">
-        <autodoc>IsBold(self, TreeItemId item) -&gt; bool</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetChildrenCount" type="size_t" overloaded="no">
-        <autodoc>GetChildrenCount(self, TreeItemId item, bool recursively=True) -&gt; size_t</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="recursively" type="bool" default="True"/>
-        </paramlist>
-      </method>
-      <method name="GetRootItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetRootItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetSelection" type="TreeItemId" overloaded="no">
-        <autodoc>GetSelection(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetSelections" type="PyObject" overloaded="no">
-        <autodoc>GetSelections(self) -&gt; PyObject</autodoc>
-      </method>
-      <method name="GetItemParent" type="TreeItemId" overloaded="no">
-        <autodoc>GetItemParent(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstChild" type="PyObject" overloaded="no">
-        <autodoc>GetFirstChild(self, TreeItemId item) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextChild" type="PyObject" overloaded="no">
-        <autodoc>GetNextChild(self, TreeItemId item, void cookie) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="cookie" type="" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetLastChild" type="TreeItemId" overloaded="no">
-        <autodoc>GetLastChild(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNextSibling" type="TreeItemId" overloaded="no">
-        <autodoc>GetNextSibling(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrevSibling" type="TreeItemId" overloaded="no">
-        <autodoc>GetPrevSibling(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetFirstVisibleItem" type="TreeItemId" overloaded="no">
-        <autodoc>GetFirstVisibleItem(self) -&gt; TreeItemId</autodoc>
-      </method>
-      <method name="GetNextVisible" type="TreeItemId" overloaded="no">
-        <autodoc>GetNextVisible(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetPrevVisible" type="TreeItemId" overloaded="no">
-        <autodoc>GetPrevVisible(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetNext" type="TreeItemId" overloaded="no">
-        <autodoc>GetNext(self, TreeItemId item) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="AddRoot" type="TreeItemId" overloaded="no">
-        <autodoc>AddRoot(self, String text, int image=-1, int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="PrependItem" type="TreeItemId" overloaded="no">
-        <autodoc>PrependItem(self, TreeItemId parent, String text, int image=-1, int selectedImage=-1, 
-    TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertItem" type="TreeItemId" overloaded="no">
-        <autodoc>InsertItem(self, TreeItemId parent, TreeItemId idPrevious, String text, 
-    int image=-1, int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="idPrevious" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="InsertItemBefore" type="TreeItemId" overloaded="no">
-        <autodoc>InsertItemBefore(self, TreeItemId parent, size_t index, String text, int image=-1, 
-    int selectedImage=-1, TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="index" type="size_t" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="AppendItem" type="TreeItemId" overloaded="no">
-        <autodoc>AppendItem(self, TreeItemId parent, String text, int image=-1, int selectedImage=-1, 
-    TreeItemData data=None) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="parent" type="TreeItemId" default=""/>
-          <param name="text" type="String" default=""/>
-          <param name="image" type="int" default="-1"/>
-          <param name="selectedImage" type="int" default="-1"/>
-          <param name="data" type="TreeItemData" default="NULL"/>
-        </paramlist>
-      </method>
-      <method name="Delete" type="" overloaded="no">
-        <autodoc>Delete(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteChildren" type="" overloaded="no">
-        <autodoc>DeleteChildren(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="DeleteAllItems" type="" overloaded="no">
-        <autodoc>DeleteAllItems(self)</autodoc>
-      </method>
-      <method name="Expand" type="" overloaded="no">
-        <autodoc>Expand(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="ExpandAll" type="" overloaded="no">
-        <autodoc>ExpandAll(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Collapse" type="" overloaded="no">
-        <autodoc>Collapse(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="CollapseAndReset" type="" overloaded="no">
-        <autodoc>CollapseAndReset(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Toggle" type="" overloaded="no">
-        <autodoc>Toggle(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Unselect" type="" overloaded="no">
-        <autodoc>Unselect(self)</autodoc>
-      </method>
-      <method name="UnselectAll" type="" overloaded="no">
-        <autodoc>UnselectAll(self)</autodoc>
-      </method>
-      <method name="SelectItem" type="" overloaded="no">
-        <autodoc>SelectItem(self, TreeItemId item, bool unselect_others=True, bool extended_select=False)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="unselect_others" type="bool" default="True"/>
-          <param name="extended_select" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="SelectAll" type="" overloaded="no">
-        <autodoc>SelectAll(self, bool extended_select=False)</autodoc>
-        <paramlist>
-          <param name="extended_select" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="EnsureVisible" type="" overloaded="no">
-        <autodoc>EnsureVisible(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="ScrollTo" type="" overloaded="no">
-        <autodoc>ScrollTo(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="HitTest" type="TreeItemId" overloaded="no">
-        <autodoc>HitTest(self, Point point, int OUTPUT, int OUTPUT) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="point" type="Point" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-          <param name="OUTPUT" type="int" default=""/>
-        </paramlist>
-      </method>
-      <method name="GetBoundingRect" type="PyObject" overloaded="no">
-        <autodoc>GetBoundingRect(self, TreeItemId item, bool textOnly=False) -&gt; PyObject</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="textOnly" type="bool" default="False"/>
-        </paramlist>
-      </method>
-      <method name="EditLabel" type="" overloaded="no">
-        <autodoc>EditLabel(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="Edit" type="" overloaded="no">
-        <autodoc>Edit(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="SortChildren" type="" overloaded="no">
-        <autodoc>SortChildren(self, TreeItemId item)</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-        </paramlist>
-      </method>
-      <method name="FindItem" type="TreeItemId" overloaded="no">
-        <autodoc>FindItem(self, TreeItemId item, String str, int flags=0) -&gt; TreeItemId</autodoc>
-        <paramlist>
-          <param name="item" type="TreeItemId" default=""/>
-          <param name="str" type="String" default=""/>
-          <param name="flags" type="int" default="0"/>
-        </paramlist>
-      </method>
-      <method name="GetHeaderWindow" type="Window" overloaded="no">
-        <autodoc>GetHeaderWindow(self) -&gt; Window</autodoc>
-      </method>
-      <method name="GetMainWindow" type="ScrolledWindow" overloaded="no">
-        <autodoc>GetMainWindow(self) -&gt; ScrolledWindow</autodoc>
-      </method>
-    </class>
-  </module>
-</wxPython-metadata>
index 44886701d56344886c842aae45ad93f0993f1cf8..199b5fa7efbb7dcc8c788f33aaf79d78a1e31db3 100644 (file)
@@ -497,6 +497,39 @@ public:
 };
 
 
+//---------------------------------------------------------------------------
+// A wxImageHandler that can be derived from in Python.
+//
+
+class wxPyImageHandler: public wxImageHandler {
+protected:
+    PyObject *m_self;
+
+    // used for interning method names as PyStrings
+    static PyObject* m_DoCanRead_Name;
+    static PyObject* m_GetImageCount_Name;
+    static PyObject* m_LoadFile_Name;
+    static PyObject* m_SaveFile_Name;
+
+    // converstion helpers
+    PyObject* py_InputStream(wxInputStream* stream);
+    PyObject* py_Image(wxImage* image);
+    PyObject* py_OutputStream(wxOutputStream* stream);
+
+public:
+    wxPyImageHandler();
+    ~wxPyImageHandler();
+    void _SetSelf(PyObject *self);
+    
+    virtual bool LoadFile(wxImage* image, wxInputStream& stream,
+                          bool verbose=true, int index=-1 );
+    virtual bool SaveFile(wxImage* image, wxOutputStream& stream,
+                          bool verbose=true );
+    virtual int GetImageCount(wxInputStream& stream );
+    virtual bool DoCanRead(wxInputStream &stream);
+};
+
+
 //---------------------------------------------------------------------------
 // This class holds an instance of a Python Shadow Class object and assists
 // with looking up and invoking Python callback methods from C++ virtual
index b43e5244ca2aae5db96a583ac22581cdc4b05ba9..53a00402cab21ea41e0ccc5da6771b40392fe66b 100644 (file)
 #----------------------------------------------------------------------------
 
 import wx
-from IDE import ACTIVEGRID_BASE_IDE, getSplashBitmap
+import os.path
+from IDE import ACTIVEGRID_BASE_IDE, getSplashBitmap, getIDESplashBitmap
+import activegrid.util.sysutils as sysutilslib
 _ = wx.GetTranslation
 
 #----------------------------------------------------------------------------
 # Package License Data for AboutDialog
 #   Package, License, URL
 #   If no information is available, put a None as a place holder.
+#
+#   NO GPL Allowed.  Only LGPL, BSD, and Public Domain Based Licenses!
 #----------------------------------------------------------------------------
 
 
-licenseData = [
-    ("ActiveGrid", "ASL 2.0", "http://apache.org/licenses/LICENSE-2.0"),
-    ("Python 2.3", "Python Software Foundation License", "http://www.python.org/2.3/license.html"),
-    ("wxPython 2.5", "wxWidgets 2 - LGPL", "http://wxwidgets.org/newlicen.htm"),
-    ("wxWidgets", "wxWindows Library License 3", "http://www.wxwidgets.org/manuals/2.5.4/wx_wxlicense.html"),
+licenseData = [  # add licenses for base IDE features
+    ("ActiveGrid", "Apache License, Version 2.0", "http://apache.org/licenses/LICENSE-2.0"),
+    ("Python 2.4", "Python Software Foundation License", "http://www.python.org/2.4/license.html"),
+    ("wxPython 2.6", "wxWidgets 2 - LGPL", "http://wxwidgets.org/newlicen.htm"),
+    ("wxWidgets", "wxWindows Library License 3", "http://www.wxwidgets.org/manuals/2.6.1/wx_wxlicense.html"),
     ("pychecker", "MetaSlash - BSD", "http://pychecker.sourceforge.net/COPYRIGHT"), 
     ("process.py", "See file", "http://starship.python.net/~tmick/"),
-    ("pysvn", "Apache License", "http://pysvn.tigris.org/"),
+    ("pysvn", "Apache License, Version 2.0", "http://pysvn.tigris.org/"),
 ]
 
-if not ACTIVEGRID_BASE_IDE:    # add licenses for database connections only if not the base IDE
+if not ACTIVEGRID_BASE_IDE:    # add licenses for non-base IDE features such as database connections
     licenseData += [
         ("pydb2", "LGPL", "http://sourceforge.net/projects/pydb2"), 
         ("pysqlite", "Python License (CNRI)", "http://sourceforge.net/projects/pysqlite"),
         ("mysql-python", "GPL, Python License (CNRI), Zope Public License", "http://sourceforge.net/projects/mysql-python"), 
-        ("cx_Oracle", "Computronix", "http://http://www.computronix.com/download/License(cxOracle).txt"), 
+        ("cx_Oracle", "Computronix", "http://www.computronix.com/download/License(cxOracle).txt"), 
         ("SQLite", "Public Domain", "http://www.sqlite.org/copyright.html"),
         ("PyGreSQL", "BSD", "http://www.pygresql.org"),
+        ("pyXML", "CNRI Python License", "http://sourceforge.net/softwaremap/trove_list.php?form_cat=194"),
+        ("Zolera Soap Infrastructure", "Zope Public License 2.0", "http://www.zope.org/Resources/License/"),
+        ("Sarissa", "LGPL", "http://sourceforge.net/projects/sarissa/"),
+        ("Dynarch DHTML Calendar", "LGPL", "http://www.dynarch.com/projects/calendar/"),
     ]
 
-if wx.Platform == '__WXMSW__':
+if wx.Platform == '__WXMSW__':  # add Windows only licenses
     licenseData += [("pywin32", "Python Software Foundation License", "http://sourceforge.net/projects/pywin32/")]
 
 class AboutDialog(wx.Dialog):
@@ -56,10 +64,25 @@ class AboutDialog(wx.Dialog):
 
         aboutPage = wx.Panel(nb, -1)
         sizer = wx.BoxSizer(wx.VERTICAL)
-        splash_bmp = getSplashBitmap()
+
+        if not ACTIVEGRID_BASE_IDE:
+            splash_bmp = getSplashBitmap()
+        else:
+            splash_bmp = getIDESplashBitmap()
+
+        # find version number from 
+        versionFilepath = os.path.join(sysutilslib.mainModuleDir, "version.txt")
+        if os.path.exists(versionFilepath):
+            versionfile = open(versionFilepath, 'r')
+            versionLines = versionfile.readlines()
+            versionfile.close()
+            version = "".join(versionLines)
+        else:
+            version = _("Version Unknown - %s not found" % versionFilepath)
+
         image = wx.StaticBitmap(aboutPage, -1, splash_bmp, (0,0), (splash_bmp.GetWidth(), splash_bmp.GetHeight()))
         sizer.Add(image, 0, wx.ALIGN_CENTER|wx.ALL, 0)
-        sizer.Add(wx.StaticText(aboutPage, -1, wx.GetApp().GetAppName() + _("\nVersion 0.7 Early Access\n\nCopyright (c) 2003-2005 ActiveGrid Incorporated and Contributors.  All rights reserved.")), 0, wx.ALIGN_LEFT|wx.ALL, 10)
+        sizer.Add(wx.StaticText(aboutPage, -1, wx.GetApp().GetAppName() + _("\n%s\n\nCopyright (c) 2003-2005 ActiveGrid Incorporated and Contributors.  All rights reserved.") % version), 0, wx.ALIGN_LEFT|wx.ALL, 10)
         sizer.Add(wx.StaticText(aboutPage, -1, _("http://www.activegrid.com")), 0, wx.ALIGN_LEFT|wx.LEFT|wx.BOTTOM, 10)
         aboutPage.SetSizer(sizer)
         nb.AddPage(aboutPage, _("Copyright"))
@@ -78,12 +101,16 @@ class AboutDialog(wx.Dialog):
             maxHeight = h
         grid.SetColLabelSize(maxHeight + 6)  # add a 6 pixel margin
 
+        maxW = 0
         for row, data in enumerate(licenseData):
             package = data[0]
             license = data[1]
             url = data[2]
             if package:
                 grid.SetRowLabelValue(row, package)
+                w, h = dc.GetTextExtent(package)
+                if w > maxW:
+                    maxW = w
             if license:
                 grid.SetCellValue(row, 0, license)
             if url:
@@ -95,8 +122,9 @@ class AboutDialog(wx.Dialog):
         grid.EnableDragRowSize(False)
         grid.SetRowLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE)
         grid.SetLabelBackgroundColour(wx.WHITE)
-        grid.AutoSizeColumn(0, 100)
-        grid.AutoSizeColumn(1, 100)
+        grid.AutoSizeColumn(0)
+        grid.AutoSizeColumn(1)
+        grid.SetRowLabelSize(maxW + 10)
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(grid, 1, wx.EXPAND|wx.ALL, 10)
         licensePage.SetSizer(sizer)
@@ -104,7 +132,7 @@ class AboutDialog(wx.Dialog):
 
         creditsPage = wx.Panel(nb, -1)
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(wx.StaticText(creditsPage, -1, _("ActiveGrid Development Team:\n\nLawrence Bruhmuller\nEric Chu\nMatt Fryer\nJoel Hare\nMorgan Hua\nAlan Mullendore\nJeff Norton\nKevin Wang\nPeter Yared")), 0, wx.ALIGN_LEFT|wx.ALL, 10)
+        sizer.Add(wx.StaticText(creditsPage, -1, _("ActiveGrid Development Team:\n\nLarry Abrahams\nLawrence Bruhmuller\nEric Chu\nBeth Fryer\nMatt Fryer\nJoel Hare\nMorgan Hua\nMatt McNulty\nPratik Mehta\nAlan Mullendore\nJeff Norton\nSimon Toens\nKevin Wang\nPeter Yared")), 0, wx.ALIGN_LEFT|wx.ALL, 10)
         creditsPage.SetSizer(sizer)
         nb.AddPage(creditsPage, _("Credits"))
             
@@ -114,7 +142,8 @@ class AboutDialog(wx.Dialog):
         sizer.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
 
         self.SetSizer(sizer)
-        self.SetAutoLayout(True)
-        sizer.Fit(self)
+        self.Layout()
+        self.Fit()
+        grid.ForceRefresh()  # wxBug: Get rid of unnecessary scrollbars
         
 
index f8e9d16e4ef03904130838b2d121ee8306700b3c..f795ecd6f8e10ed94b8dd72b527644321e4a132d 100644 (file)
@@ -23,6 +23,19 @@ SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID)
 LINE_BRUSH = wx.BLACK_BRUSH
 INACTIVE_SELECT_BRUSH = wx.Brush("LIGHT BLUE", wx.SOLID)
 
+NORMALFONT = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
+SLANTFONT = wx.Font(NORMALFONT.GetPointSize(), NORMALFONT.GetFamily(), wx.SLANT, NORMALFONT.GetWeight())
+BOLDFONT = wx.Font(NORMALFONT.GetPointSize(), NORMALFONT.GetFamily(), NORMALFONT.GetStyle(), wx.BOLD)
+
+DEFAULT_BACKGROUND_COLOR = wx.Colour(0xEE, 0xEE, 0xEE)
+HEADER_BRUSH = wx.Brush(wx.Colour(0xDB, 0xEB, 0xFF), wx.SOLID)
+BODY_BRUSH = wx.Brush(wx.WHITE, wx.SOLID)
+
+
+PARKING_VERTICAL = 1
+PARKING_HORIZONTAL = 2
+PARKING_OFFSET = 30    # space between shapes
+
 
 def GetRawModel(model):
     if hasattr(model, "GetRawModel"):
@@ -32,6 +45,27 @@ def GetRawModel(model):
     return rawModel
 
 
+def GetLabel(model):
+    model = GetRawModel(model)
+    if hasattr(model, "__xmlname__"):
+        label = model.__xmlname__
+        try:
+            if (len(label) > 0):
+                label = label[0].upper() + label[1:]
+            if (hasattr(model, "complexType")):
+                label += ': %s/%s' % (model.complexType.name, model.name)
+            else:
+                if model.name:
+                    label += ': %s' % model.name
+                elif model.ref:
+                    label += ': %s' % model.ref
+        except AttributeError:
+            pass
+    else:
+        label = str(model)
+    return label
+
+
 class CanvasView(wx.lib.docview.View):
 
 
@@ -40,9 +74,10 @@ class CanvasView(wx.lib.docview.View):
     #----------------------------------------------------------------------------
 
 
-    def __init__(self, brush = SHAPE_BRUSH):
+    def __init__(self, brush=SHAPE_BRUSH, background=DEFAULT_BACKGROUND_COLOR):
         wx.lib.docview.View.__init__(self)
         self._brush = brush
+        self._backgroundColor = background
         self._canvas = None
         self._pt1 = None
         self._pt2 = None
@@ -68,6 +103,7 @@ class CanvasView(wx.lib.docview.View):
         frame.SetSizer(sizer)
         frame.Layout()        
         self.Activate()
+        wx.EVT_RIGHT_DOWN(self._canvas, self.OnRightClick)
         return True
         
 
@@ -145,12 +181,20 @@ class CanvasView(wx.lib.docview.View):
 
         self._canvas.SetScrollbars(20, 20, self._maxWidth / 20, self._maxHeight / 20)
         
-        self._canvas.SetBackgroundColour(wx.WHITE)
+        self._canvas.SetBackgroundColour(self._backgroundColor)
         self._diagram = ogl.Diagram()
         self._canvas.SetDiagram(self._diagram)
         self._diagram.SetCanvas(self._canvas)
+        self._canvas.SetFont(NORMALFONT)
 
 
+    def OnClear(self, event):
+        """ Deletion of selected objects from view.
+        *Must Override*
+        """
+        self.SetPropertyModel(None)
+                  
+
     def OnKeyPressed(self, event):
         key = event.KeyCode()
         if key == wx.WXK_DELETE:
@@ -159,7 +203,42 @@ class CanvasView(wx.lib.docview.View):
             event.Skip()
 
 
+    def OnRightClick(self, event):
+        """ force selection underneath right click position. """
+        self.Activate()
+        self._canvas.SetFocus()
+
+        dc = wx.ClientDC(self._canvas)
+        self._canvas.PrepareDC(dc)
+        x, y = event.GetLogicalPosition(dc)  # this takes into account scrollbar offset
+        shape = self._canvas.FindShape(x, y)[0]
+        
+        model = None
+        if not shape:
+            self.SetSelection(None)
+            self.SetPropertyShape(None)
+        elif hasattr(shape, "GetModel"):
+            self.BringToFront(shape)
+            self.SetPropertyShape(shape)
+            self.SetSelection(shape)
+            shape.Select(True, dc)
+            model = shape.GetModel()
+        elif shape.GetParent() and isinstance(shape.GetParent(), ogl.CompositeShape):  # ComplexTypeHeader for ComplexTypeShape
+            self.BringToFront(shape)
+            self.SetPropertyShape(shape.GetParent())
+            self.SetSelection(shape.GetParent())
+            shape.GetParent().Select(True, dc)
+            model = shape.GetParent().GetModel()
+
+        self.SetPropertyModel(model)
+        
+        return (shape, model)
+
+
     def OnLeftClick(self, event):
+        self.Activate()
+        self._canvas.SetFocus()
+        
         self.EraseRubberBand()
 
         dc = wx.ClientDC(self._canvas)
@@ -322,21 +401,24 @@ class CanvasView(wx.lib.docview.View):
         dc.EndDrawing()
 
 
-    def FindParkingSpot(self, width, height):
+    def FindParkingSpot(self, width, height, parking=PARKING_HORIZONTAL, x=PARKING_OFFSET, y=PARKING_OFFSET):
         """ given a width and height, find a upper left corner where shape can be parked without overlapping other shape """
-        offset = 30  # space between shapes
-        x = offset
-        y = offset
-        maxX = 700  # max distance to the right where we'll place tables
+        max = 700  # max distance to the right where we'll place tables
         noParkingSpot = True
 
         while noParkingSpot:
             point = self.isSpotOccupied(x, y, width, height)
             if point:
-                x = point[0] + offset
-                if x > maxX:
-                    x = offset
-                    y = point[1] + offset
+                if parking == PARKING_HORIZONTAL:
+                    x = point[0] + PARKING_OFFSET
+                    if x > max:
+                        x = PARKING_OFFSET
+                        y = point[1] + PARKING_OFFSET
+                else:  # parking == PARKING_VERTICAL:
+                    y = point[1] + PARKING_OFFSET
+                    if y > max:
+                        y = PARKING_OFFSET
+                        x = point[0] + PARKING_OFFSET
             else:
                 noParkingSpot = False
 
@@ -351,7 +433,7 @@ class CanvasView(wx.lib.docview.View):
         y2 = y + height
 
         for shape in self._diagram.GetShapeList():
-            if isinstance(shape, ogl.RectangleShape) or isinstance(shape, ogl.EllipseShape):
+            if isinstance(shape, ogl.RectangleShape) or isinstance(shape, ogl.EllipseShape) or isinstance(shape, ogl.PolygonShape):
                 if shape.GetParent() and isinstance(shape.GetParent(), ogl.CompositeShape):
                     # skip, part of a composite shape
                     continue
@@ -381,7 +463,7 @@ class CanvasView(wx.lib.docview.View):
     # Canvas methods
     #----------------------------------------------------------------------------
 
-    def AddShape(self, shape, x = None, y = None, pen = None, brush = None, text = None, eventHandler = None):
+    def AddShape(self, shape, x = None, y = None, pen = None, brush = None, text = None, eventHandler = None, shown=True):
         if isinstance(shape, ogl.CompositeShape):
             dc = wx.ClientDC(self._canvas)
             self._canvas.PrepareDC(dc)
@@ -403,7 +485,7 @@ class CanvasView(wx.lib.docview.View):
             shape.AddText(text)
         shape.SetShadowMode(ogl.SHADOW_NONE)
         self._diagram.AddShape(shape)
-        shape.Show(True)
+        shape.Show(shown)
         if not eventHandler:
             eventHandler = EditorCanvasShapeEvtHandler(self)
         eventHandler.SetShape(shape)
@@ -424,16 +506,21 @@ class CanvasView(wx.lib.docview.View):
             for line in shape.GetLines():
                 shape.RemoveLine(line)
                 self._diagram.RemoveShape(line)
+                line.Delete()
             for obj in self._diagram.GetShapeList():
                 for line in obj.GetLines():
                     if self.IsShapeContained(shape, line.GetTo()) or self.IsShapeContained(shape, line.GetFrom()):
                         obj.RemoveLine(line)
                         self._diagram.RemoveShape(line)
+                        line.Delete()
                     if line == shape:
                         obj.RemoveLine(line)
+                        self._diagram.RemoveShape(line)
+                        line.Delete()
                     
             shape.RemoveFromCanvas(self._canvas)
             self._diagram.RemoveShape(shape)
+            shape.Delete()
 
 
     def IsShapeContained(self, parent, shape):
@@ -448,29 +535,22 @@ class CanvasView(wx.lib.docview.View):
     def UpdateShape(self, model):
         for shape in self._diagram.GetShapeList():
             if hasattr(shape, "GetModel") and shape.GetModel() == model:
+                oldw, oldh = shape.GetBoundingBoxMax()
+                oldx = shape.GetX()
+                oldy = shape.GetY()
+
                 x, y, w, h = model.getEditorBounds()
                 newX = x + w / 2
                 newY = y + h / 2
-                changed = False
-                if isinstance(shape, ogl.CompositeShape):
-                    if shape.GetX() != newX or shape.GetY() != newY:
-                        dc = wx.ClientDC(self._canvas)
-                        self._canvas.PrepareDC(dc)
-                        shape.SetSize(w, h, True)  # wxBug: SetSize must be before Move because links won't go to the right place
-                        shape.Move(dc, newX, newY)  # wxBug: Move must be before SetSize because links won't go to the right place
-                        changed = True
-                else:
-                    oldw, oldh = shape.GetBoundingBoxMax()
-                    oldx = shape.GetX()
-                    oldy = shape.GetY()
-                    if oldw != w or oldh != h or oldx != newX or oldy != newY:
-                        shape.SetSize(w, h)
-                        shape.SetX(newX)
-                        shape.SetY(newY)
-                        changed = True
-                if changed:
+                
+                if oldw != w or oldh != h or oldx != newX or oldy != newY:
+                    dc = wx.ClientDC(self._canvas)
+                    self._canvas.PrepareDC(dc)
+                    shape.SetSize(w, h, True)   # wxBug: SetSize must be before Move because links won't go to the right place
+                    shape.Move(dc, newX, newY)  # wxBug: Move must be after SetSize because links won't go to the right place
                     shape.ResetControlPoints()
                     self._canvas.Refresh()
+                    
                 break
 
 
@@ -481,6 +561,10 @@ class CanvasView(wx.lib.docview.View):
         return None
 
 
+    def GetShapeCount(self):
+        return self._diagram.GetCount()
+
+
     def GetSelection(self):
         return filter(lambda shape: shape.Selected(), self._diagram.GetShapeList())
 
@@ -526,7 +610,10 @@ class CanvasView(wx.lib.docview.View):
 
 
     def ScrollVisible(self, shape):
-        xUnit, yUnit = shape._canvas.GetScrollPixelsPerUnit()
+        if not shape:
+            return
+            
+        xUnit, yUnit = self._canvas.GetScrollPixelsPerUnit()
         scrollX, scrollY = self._canvas.GetViewStart()  # in scroll units
         scrollW, scrollH = self._canvas.GetSize()  # in pixels
         w, h = shape.GetBoundingBoxMax() # in pixels
@@ -564,7 +651,10 @@ class CanvasView(wx.lib.docview.View):
 
         # erase old selection if it still exists
         if self._propShape and self._propShape in self._diagram.GetShapeList():
-            self._propShape.SetBrush(self._brush)
+            if hasattr(self._propShape, "DEFAULT_BRUSH"):
+                self._propShape.SetBrush(self._propShape.DEFAULT_BRUSH)
+            else:
+                self._propShape.SetBrush(self._brush)
             if (self._propShape._textColourName in ["BLACK", "WHITE"]):  # Would use GetTextColour() but it is broken
                 self._propShape.SetTextColour("BLACK", 0)
             self._propShape.Draw(dc)
@@ -667,9 +757,10 @@ class EditorCanvasShapeEvtHandler(ogl.ShapeEvtHandler):
             if shape:
                 model = shape.GetModel()
 
-        self._view.SetSelection(model, keys == self.SHIFT_KEY or keys == self.CONTROL_KEY)
-        self._view.SetPropertyShape(shape)
-        self._view.SetPropertyModel(model)
+        if model:
+            self._view.SetSelection(model, keys == self.SHIFT_KEY or keys == self.CONTROL_KEY)
+            self._view.SetPropertyShape(shape)
+            self._view.SetPropertyModel(model)
 
 
     def OnEndDragLeft(self, x, y, keys = 0, attachment = 0):
@@ -686,7 +777,7 @@ class EditorCanvasShapeEvtHandler(ogl.ShapeEvtHandler):
 
     def OnMovePre(self, dc, x, y, oldX, oldY, display):
         """ Prevent objects from being dragged outside of viewable area """
-        if (x > self._view._maxWidth) or (y > self._view._maxHeight):
+        if (x < 0) or (y < 0) or (x > self._view._maxWidth) or (y > self._view._maxHeight):
             return False
 
         return ogl.ShapeEvtHandler.OnMovePre(self, dc, x, y, oldX, oldY, display)
index de0fbaf86e1669f1bb1280b28cc45120ba8650db..7e245bcd1f79945232fb2fc114bda740d173b48f 100644 (file)
@@ -21,6 +21,7 @@ import string
 import sys
 import DebuggerService
 import MarkerService
+from UICommon import CaseInsensitiveCompare
 _ = wx.GetTranslation
 if wx.Platform == '__WXMSW__':
     _WINDOWS = True
@@ -354,18 +355,6 @@ class CodeView(STCTextEditor.TextView):
         return ['Put', 'Editor Specific', 'Keywords', 'Here']
 
 
-    def CaseInsensitiveCompare(self, s1, s2):
-        """ GetAutoCompleteKeywordList() method used to show keywords in case insensitive order """
-        s1L = s1.lower()
-        s2L = s2.lower()
-        if s1L == s2L:
-            return 0
-        elif s1L < s2L:
-            return -1
-        else:
-            return 1
-
-
     def GetAutoCompleteKeywordList(self, context, hint):            
         """ Replace this method with Editor specific keywords """
         kw = self.GetAutoCompleteDefaultKeywords()
@@ -380,7 +369,7 @@ class CodeView(STCTextEditor.TextView):
         else:
             replaceLen = 0
             
-        kw.sort(self.CaseInsensitiveCompare)
+        kw.sort(CaseInsensitiveCompare)
         return " ".join(kw), replaceLen
         
 
@@ -410,6 +399,7 @@ class CodeView(STCTextEditor.TextView):
 
     def OnSetIndentWidth(self):
         dialog = wx.TextEntryDialog(self._GetParentFrame(), _("Enter new indent width (2-10):"), _("Set Indent Width"), "%i" % self.GetCtrl().GetIndent())
+        dialog.CenterOnParent()
         if dialog.ShowModal() == wx.ID_OK:
             try:
                 indent = int(dialog.GetValue())
@@ -480,7 +470,7 @@ class CodeView(STCTextEditor.TextView):
         if hint == "ViewStuff":
             self.GetCtrl().SetViewDefaults()
         elif hint == "Font":
-            font, color = self.GetFontAndColorFromConfig()
+            font, color = self.GetCtrl().GetFontAndColorFromConfig()
             self.GetCtrl().SetFont(font)
             self.GetCtrl().SetFontColor(color)
         else:
index 547d8c9912d204ff61d9236757e5c63d433cc4c6..485853611bfbcc7d169bbcabcefb70a81d26ba4c 100644 (file)
@@ -310,6 +310,13 @@ class RunCommandUI(wx.Panel):
         self._textCtrl.SetFontColor(wx.BLACK)   
         self._textCtrl.StyleClearAll()
         self._textCtrl.SetReadOnly(True)
+
+    def StopAndRemoveUI(self, event):
+        self.StopExecution()
+        self.StopExecution()
+        index = self._noteBook.GetSelection()
+        self._noteBook.GetPage(index).Show(False)
+        self._noteBook.RemovePage(index)
         
     #------------------------------------------------------------------------------
     # Event handling
@@ -322,10 +329,7 @@ class RunCommandUI(wx.Panel):
             self.StopExecution()
             
         elif id == self.CLOSE_TAB_ID:
-            self.StopExecution()
-            index = self._noteBook.GetSelection()
-            self._noteBook.GetPage(index).Show(False)
-            self._noteBook.RemovePage(index)
+            self.StopAndRemoveUI(event)
             
     def OnDoubleClick(self, event):
         # Looking for a stack trace line.
@@ -368,7 +372,7 @@ class RunCommandUI(wx.Panel):
         # FACTOR THIS INTO DocManager
         openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
         for openDoc in openDocs:  
-            if(isinstance(openDoc.GetFirstView(), CodeEditor.CodeView)): 
+            if(isinstance(openDoc, CodeEditor.CodeDocument)): 
                 openDoc.GetFirstView().GetCtrl().ClearCurrentLineMarkers()    
                 
         foundView.GetCtrl().MarkerAdd(lineNum -1, CodeEditor.CodeCtrl.CURRENT_LINE_MARKER_NUM)
@@ -419,8 +423,9 @@ class DebugCommandUI(wx.Panel):
     def ReturnPortToPool(port):
         config = wx.ConfigBase_Get()
         startingPort = config.ReadInt("DebuggerStartingPort", DEFAULT_PORT)
-        if port in range(startingPort, startingPort + PORT_COUNT):
-            DebugCommandUI.debuggerPortList.append(port)
+        val = int(startingPort) + int(PORT_COUNT)
+        if int(port) >= startingPort and (int(port) <= val):
+            DebugCommandUI.debuggerPortList.append(int(port))
             
     ReturnPortToPool = staticmethod(ReturnPortToPool)
 
@@ -588,7 +593,7 @@ class DebugCommandUI(wx.Panel):
             self._tb.EnableTool(self.ADD_WATCH_ID, False)
         openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
         for openDoc in openDocs:  
-            if(isinstance(openDoc.GetFirstView(), CodeEditor.CodeView)): 
+            if(isinstance(openDoc, CodeEditor.CodeDocument)): 
                 openDoc.GetFirstView().GetCtrl().ClearCurrentLineMarkers() 
         if self.framesTab:   
             self.framesTab.ClearWhileRunning()
@@ -662,7 +667,7 @@ class DebugCommandUI(wx.Panel):
     def DeleteCurrentLineMarkers(self):
         openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
         for openDoc in openDocs:  
-            if(isinstance(openDoc.GetFirstView(), CodeEditor.CodeView)): 
+            if(isinstance(openDoc, CodeEditor.CodeDocument)): 
                 openDoc.GetFirstView().GetCtrl().ClearCurrentLineMarkers()    
         
     def LoadFramesListXML(self, framesXML):
@@ -848,7 +853,7 @@ class WatchDialog(wx.Dialog):
         self.label_4 = wx.StaticText(self, -1, ",frame.f_globals, frame.f_locals)")
         self.radio_box_1 = wx.RadioBox(self, -1, "Watch Information", choices=[WatchDialog.WATCH_ALL_FRAMES, WatchDialog.WATCH_THIS_FRAME, WatchDialog.WATCH_ONCE], majorDimension=0, style=wx.RA_SPECIFY_ROWS)
 
-        self._okButton = wx.Button(self, wx.ID_OK, "OK", size=(75,-1))
+        self._okButton = wx.Button(self, wx.ID_OK, "OK")
         self._okButton.SetDefault()
         self._okButton.SetHelpText(_("The OK button completes the dialog"))
         def OnOkClick(event):
@@ -861,7 +866,7 @@ class WatchDialog(wx.Dialog):
             self.EndModal(wx.ID_OK)
         self.Bind(wx.EVT_BUTTON, OnOkClick, self._okButton)
             
-        self._cancelButton = wx.Button(self, wx.ID_CANCEL, _("Cancel"), size=(75,-1))
+        self._cancelButton = wx.Button(self, wx.ID_CANCEL, _("Cancel"))
         self._cancelButton.SetHelpText(_("The Cancel button cancels the dialog."))
         
         self.__set_properties()
@@ -900,7 +905,6 @@ class WatchDialog(wx.Dialog):
         box.Add(self._okButton, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
         box.Add(self._cancelButton, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
         sizer_1.Add(box, 1, wx.EXPAND, 0)
-        self.SetAutoLayout(True)
         self.SetSizer(sizer_1)
         self.Layout()
         
@@ -979,30 +983,31 @@ class FramesUI(wx.SplitterWindow):
         #sizer.Fit(panel)
 
         return panel
+
+    def ReplaceLastLine(self, command):
+        line = self._interCtrl.GetLineCount() - 1
+        self._interCtrl.GotoLine(line)
+        start = self._interCtrl.GetCurrentPos()
+        self._interCtrl.SetTargetStart(start)
+        end = self._interCtrl.GetLineEndPosition(line)
+        self._interCtrl.SetTargetEnd(end)
+        self._interCtrl.ReplaceTarget(">>> " + command)
+        self._interCtrl.GotoLine(line)
+        self._interCtrl.SetSelectionStart(self._interCtrl.GetLineEndPosition(line))
+
+    def ExecuteCommand(self, command):
+        if not len(self.command_list) or not command == self.command_list[len(self.command_list) -1]:
+            self.command_list.append(command)
+            self.command_index = len(self.command_list) - 1
+        retval = self._ui._callback._debuggerServer.execute_in_frame(self._framesChoiceCtrl.GetStringSelection(), command)
+        self._interCtrl.AddText("\n" + str(retval))
+        self._interCtrl.ScrollToLine(self._interCtrl.GetLineCount())
+        # Refresh the tree view in case this command resulted in changes there. TODO: Need to reopen tree items.
+        self.PopulateTreeFromFrameMessage(self._framesChoiceCtrl.GetStringSelection())
         
     def MakeInspectConsoleTab(self, parent, id):
         self.command_list = []
         self.command_index = 0
-        def ExecuteCommand(command):
-            if not len(self.command_list) or not command == self.command_list[len(self.command_list) -1]:
-                self.command_list.append(command)
-                self.command_index = len(self.command_list) - 1
-            retval = self._ui._callback._debuggerServer.execute_in_frame(self._framesChoiceCtrl.GetStringSelection(), command)
-            self._interCtrl.AddText("\n" + str(retval))
-            self._interCtrl.ScrollToLine(self._interCtrl.GetLineCount())
-            # Refresh the tree view in case this command resulted in changes there. TODO: Need to reopen tree items.
-            self.PopulateTreeFromFrameMessage(self._framesChoiceCtrl.GetStringSelection())
-
-        def ReplaceLastLine(command):
-            line = self._interCtrl.GetLineCount() - 1
-            self._interCtrl.GotoLine(line)
-            start = self._interCtrl.GetCurrentPos()
-            self._interCtrl.SetTargetStart(start)
-            end = self._interCtrl.GetLineEndPosition(line)
-            self._interCtrl.SetTargetEnd(end)
-            self._interCtrl.ReplaceTarget(">>> " + command)
-            self._interCtrl.GotoLine(line)
-            self._interCtrl.SetSelectionStart(self._interCtrl.GetLineEndPosition(line))
             
         def OnKeyPressed(event):
             key = event.KeyCode()
@@ -1011,13 +1016,13 @@ class FramesUI(wx.SplitterWindow):
                     return
             elif key == wx.WXK_RETURN:
                 command = self._interCtrl.GetLine(self._interCtrl.GetCurrentLine())[4:]
-                ExecuteCommand(command)             
+                self.ExecuteCommand(command)             
                 self._interCtrl.AddText("\n>>> ")
                 return
             elif key == wx.WXK_UP:
                 if not len(self.command_list):
                     return
-                ReplaceLastLine(self.command_list[self.command_index])
+                self.ReplaceLastLine(self.command_list[self.command_index])
                 if self.command_index  == 0:
                     self.command_index  = len(self.command_list) - 1
                 else:
@@ -1030,7 +1035,7 @@ class FramesUI(wx.SplitterWindow):
                     self.command_index = self.command_index + 1
                 else:
                     self.command_index = 0
-                ReplaceLastLine(self.command_list[self.command_index])                        
+                self.ReplaceLastLine(self.command_list[self.command_index])                        
                 return
             event.Skip()
 
@@ -1081,6 +1086,12 @@ class FramesUI(wx.SplitterWindow):
                 self.Bind(wx.EVT_MENU, self.OnView, id=self.viewID)
             item = wx.MenuItem(menu, self.viewID, "View in Dialog")
             menu.AppendItem(item)
+            if not hasattr(self, "toInteractID"):
+                self.toInteractID = wx.NewId()
+                self.Bind(wx.EVT_MENU, self.OnSendToInteract, id=self.toInteractID)
+            item = wx.MenuItem(menu, self.toInteractID, "Send to Interact")
+            menu.AppendItem(item)
+
         offset = wx.Point(x=0, y=20)
         menuSpot = event.GetPoint() + offset
         self._treeCtrl.PopupMenu(menu, menuSpot)
@@ -1105,13 +1116,33 @@ class FramesUI(wx.SplitterWindow):
         value = self._treeCtrl.GetItemText(self._introspectItem,1)
         dlg = wx.lib.dialogs.ScrolledMessageDialog(self, value, title, style=wx.DD_DEFAULT_STYLE | wx.RESIZE_BORDER)
         dlg.Show()
-
+        
+    def OnSendToInteract(self, event):
+        value = ""
+        prevItem = ""
+        for item in self._parentChain:
+            
+            if item.find(prevItem + '[') != -1:
+               value += item[item.find('['):]
+               continue
+            if value != "":
+                value = value + '.'
+            if item == 'globals':
+                item = 'globals()'
+            if item != 'locals':
+                value += item
+                prevItem = item
+        print value
+        self.ReplaceLastLine(value)
+        self.ExecuteCommand(value)
+        
     def OnWatch(self, event):
         try:
             if hasattr(self, '_parentChain'):
                 wd = WatchDialog(wx.GetApp().GetTopWindow(), "Add a Watch", self._parentChain)
             else:
                 wd = WatchDialog(wx.GetApp().GetTopWindow(), "Add a Watch", None)
+            wd.CenterOnParent()
             if wd.ShowModal() == wx.ID_OK:
                 name, text, send_frame, run_once = wd.GetSettings()
                 if send_frame:
@@ -1125,6 +1156,7 @@ class FramesUI(wx.SplitterWindow):
                 nodeList = domDoc.getElementsByTagName('watch')
                 if len(nodeList) == 1:
                     watchValue = nodeList.item(0).getAttribute("message")
+            wd.Destroy()
         except:
             tp, val, tb = sys.exc_info()
             traceback.print_exception(tp, val, tb)   
@@ -1147,6 +1179,8 @@ class FramesUI(wx.SplitterWindow):
                 tree = self._treeCtrl
                 parent = tree.GetItemParent(self._introspectItem)
                 treeNode = self.AppendSubTreeFromNode(thingToWalk, thingToWalk.getAttribute('name'), parent, insertBefore=self._introspectItem)
+                if thingToWalk.getAttribute('name').find('[') == -1:
+                    self._treeCtrl.SortChildren(treeNode)
                 self._treeCtrl.Expand(treeNode)
                 tree.Delete(self._introspectItem)
         except:
@@ -1297,7 +1331,8 @@ class FramesUI(wx.SplitterWindow):
                 if intro == "True":
                     tree.SetItemHasChildren(n, True)
                     tree.SetPyData(n, "Introspect")
-
+        if name.find('[') == -1:
+            self._treeCtrl.SortChildren(treeNode)
         return treeNode
         
     def StripOuterSingleQuotes(self, string):
@@ -1613,7 +1648,7 @@ class DebuggerService(Service.Service):
     RUN_ID = wx.NewId()
     DEBUG_ID = wx.NewId()
     DEBUG_WEBSERVER_ID = wx.NewId()
-
+    RUN_WEBSERVER_ID = wx.NewId()
             
     def ComparePaths(first, second):
         one = DebuggerService.ExpandPath(first)
@@ -1695,6 +1730,9 @@ class DebuggerService(Service.Service):
                 debuggerMenu.Append(DebuggerService.DEBUG_WEBSERVER_ID, _("Debug Internal Web Server"), _("Debugs the internal webservier"))
                 wx.EVT_MENU(frame, DebuggerService.DEBUG_WEBSERVER_ID, frame.ProcessEvent)
                 wx.EVT_UPDATE_UI(frame, DebuggerService.DEBUG_WEBSERVER_ID, frame.ProcessUpdateUIEvent)
+                debuggerMenu.Append(DebuggerService.RUN_WEBSERVER_ID, _("Restart Internal Web Server"), _("Restarts the internal webservier"))
+                wx.EVT_MENU(frame, DebuggerService.RUN_WEBSERVER_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, DebuggerService.RUN_WEBSERVER_ID, frame.ProcessUpdateUIEvent)
             
             debuggerMenu.AppendSeparator()
             
@@ -1709,6 +1747,11 @@ class DebuggerService(Service.Service):
             
         viewMenuIndex = menuBar.FindMenu(_("&Project"))
         menuBar.Insert(viewMenuIndex + 1, debuggerMenu, _("&Run"))
+        
+        toolBar.AddSeparator()
+        toolBar.AddTool(DebuggerService.RUN_ID, getRunningManBitmap(), shortHelpString = _("Run"), longHelpString = _("Run"))
+        toolBar.AddTool(DebuggerService.DEBUG_ID, getDebuggingManBitmap(), shortHelpString = _("Debug"), longHelpString = _("Debug"))
+        toolBar.Realize()
 
         return True
 
@@ -1742,6 +1785,9 @@ class DebuggerService(Service.Service):
         elif an_id == DebuggerService.DEBUG_WEBSERVER_ID:
             self.OnDebugWebServer(event)
             return True
+        elif an_id == DebuggerService.RUN_WEBSERVER_ID:
+            self.OnRunWebServer(event)
+            return True
         return False
         
     def ProcessUpdateUIEvent(self, event):
@@ -1778,13 +1824,13 @@ class DebuggerService(Service.Service):
             return
         self.ShowWindow(True)
         projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
-        project = projectService.GetView().GetDocument()
         try:
             dlg = CommandPropertiesDialog(self.GetView().GetFrame(), 'Debug Python File', projectService, None, pythonOnly=True, okButtonName="Debug", debugging=True)
         except:
             return
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
-            fileToDebug, initialArgs, startIn, isPython, environment = dlg.GetSettings()
+            projectPath, fileToDebug, initialArgs, startIn, isPython, environment = dlg.GetSettings()
             dlg.Destroy()
         else:
             dlg.Destroy()
@@ -1822,7 +1868,13 @@ class DebuggerService(Service.Service):
             page.Execute(args, startIn=os.getcwd(), environment=os.environ)
         except:
             pass
-         
+            
+    def OnRunWebServer(self, event):
+        if not Executor.GetPythonExecutablePath():
+            return
+        import WebServerService
+        wsService = wx.GetApp().GetService(WebServerService.WebServerService)
+        wsService.ShutDownAndRestart()                
                                
     def HasAnyFiles(self):
         docs = wx.GetApp().GetDocumentManager().GetDocuments()
@@ -1849,10 +1901,12 @@ class DebuggerService(Service.Service):
                           _("Debug"),
                           wx.YES_NO|wx.ICON_QUESTION
                           )
+            yesNoMsg.CenterOnParent()
             if yesNoMsg.ShowModal() == wx.ID_YES:
                 docs = wx.GetApp().GetDocumentManager().GetDocuments()
                 for doc in docs:
                     doc.Save()
+            yesNoMsg.Destroy()
 
     def OnExit(self):
         DebugCommandUI.ShutdownAllDebuggers()
@@ -1865,15 +1919,13 @@ class DebuggerService(Service.Service):
         if not Executor.GetPythonExecutablePath():
             return
         projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
-        project = projectService.GetView().GetDocument()
         try:
             dlg = CommandPropertiesDialog(self.GetView().GetFrame(), 'Run', projectService, None)
         except:
             return
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
-            fileToRun, initialArgs, startIn, isPython, environment = dlg.GetSettings()
-            
-
+            projectPath, fileToRun, initialArgs, startIn, isPython, environment = dlg.GetSettings()
             dlg.Destroy()
         else:
             dlg.Destroy()
@@ -1881,7 +1933,12 @@ class DebuggerService(Service.Service):
         self.PromptToSaveFiles()
         # This will need to change when we can run more than .py and .bpel files.
         if not isPython:
-            projectService.RunProcessModel(fileToRun)
+            projects = projectService.FindProjectByFile(projectPath)
+            if not projects:
+                return
+            project = projects[0]
+            deployFilePath = project.GenerateDeployment()
+            projectService.RunProcessModel(fileToRun, project.GetAppInfo().language, deployFilePath)
             return
             
         self.ShowWindow(True)
@@ -1901,10 +1958,16 @@ class DebuggerService(Service.Service):
             fileName = wx.GetApp().GetDocumentManager().GetCurrentDocument().GetFilename()
             if line < 0:
                 line = view.GetCtrl().GetCurrentLine()
+        else:
+            view = None
         if  self.BreakpointSet(fileName, line + 1):
             self.ClearBreak(fileName, line + 1)
+            if view:
+                view.GetCtrl().Refresh()
         else:
             self.SetBreak(fileName, line + 1)
+            if view:
+                view.GetCtrl().Refresh()
         # Now refresh all the markers icons in all the open views.
         self.ClearAllBreakpointMarkers()
         self.SetAllBreakpointMarkers()    
@@ -1939,6 +2002,10 @@ class DebuggerService(Service.Service):
         else:
             return self._masterBPDict[expandedName] 
 
+    def SetBreakpointList(self, fileName, bplist):
+        expandedName = DebuggerService.ExpandPath(fileName)
+        self._masterBPDict[expandedName] = bplist
+        
     def BreakpointSet(self, fileName, line):
         expandedName = DebuggerService.ExpandPath(fileName)
         if not self._masterBPDict.has_key(expandedName):
@@ -1977,16 +2044,20 @@ class DebuggerService(Service.Service):
     def ClearAllBreakpointMarkers(self):
         openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
         for openDoc in openDocs:  
-            if(isinstance(openDoc.GetFirstView(), CodeEditor.CodeView)): 
+            if isinstance(openDoc, CodeEditor.CodeDocument): 
                 openDoc.GetFirstView().MarkerDeleteAll(CodeEditor.CodeCtrl.BREAKPOINT_MARKER_NUM) 
-
+                
+    def UpdateBreakpointsFromMarkers(self, view, fileName):
+        newbpLines = view.GetMarkerLines(CodeEditor.CodeCtrl.BREAKPOINT_MARKER_NUM)
+        self.SetBreakpointList(fileName, newbpLines)
+        
     def GetMasterBreakpointDict(self):
         return self._masterBPDict
         
     def SetAllBreakpointMarkers(self):
         openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
         for openDoc in openDocs:  
-            if(isinstance(openDoc.GetFirstView(), CodeEditor.CodeView)): 
+            if(isinstance(openDoc, CodeEditor.CodeDocument)): 
                 self.SetCurrentBreakpointMarkers(openDoc.GetFirstView())
             
     def SetCurrentBreakpointMarkers(self, view):
@@ -2052,6 +2123,11 @@ class DebuggerOptionsPanel(wx.Panel):
         config.Write("DebuggerHostName", self._LocalHostTextCtrl.GetValue())
         if self._PortNumberTextCtrl.IsInBounds():
             config.WriteInt("DebuggerStartingPort", self._PortNumberTextCtrl.GetValue())
+            
+
+    def GetIcon(self):
+        return getContinueIcon()
+
 
 class CommandPropertiesDialog(wx.Dialog):
     
@@ -2070,10 +2146,8 @@ class CommandPropertiesDialog(wx.Dialog):
         if not self._projectNameList:
             wx.MessageBox(_("To run or debug you must have an open runnable file or project containing runnable files. Use File->Open to open the file you wish to run or debug."), _("Nothing to Run"))
             raise BadBadBad
-        if _WINDOWS:
-            wx.Dialog.__init__(self, parent, -1, title)
-        else:
-            wx.Dialog.__init__(self, parent, -1, title, size=(390,270)) 
+
+        wx.Dialog.__init__(self, parent, -1, title)
            
         projStaticText = wx.StaticText(self, -1, _("Project:")) 
         fileStaticText = wx.StaticText(self, -1, _("File:")) 
@@ -2082,43 +2156,43 @@ class CommandPropertiesDialog(wx.Dialog):
         pythonPathStaticText = wx.StaticText(self, -1, _("PYTHONPATH:"))
         postpendStaticText = _("Postpend win32api path")
         cpPanelBorderSizer = wx.BoxSizer(wx.VERTICAL)
-        self._projList = wx.Choice(self, -1, (200,-1), choices=self._projectNameList)
+        self._projList = wx.Choice(self, -1, choices=self._projectNameList)
         self.Bind(wx.EVT_CHOICE, self.EvtListBox, self._projList)
         HALF_SPACE = 5
-        flexGridSizer = wx.FlexGridSizer(cols = 3, vgap = 10, hgap = 10)
+        GAP = HALF_SPACE
+        if wx.Platform == "__WXMAC__":
+            GAP = 10
+        flexGridSizer = wx.GridBagSizer(GAP, GAP)
         
-        flexGridSizer.Add(projStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
-        flexGridSizer.Add(self._projList, 1, flag=wx.EXPAND)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
+        flexGridSizer.Add(projStaticText, (0,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+        flexGridSizer.Add(self._projList, (0,1), (1,2), flag=wx.EXPAND)
         
-        flexGridSizer.Add(fileStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
-        self._fileList = wx.Choice(self, -1, (200,-1))
+        flexGridSizer.Add(fileStaticText, (1,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+        self._fileList = wx.Choice(self, -1)
         self.Bind(wx.EVT_CHOICE, self.OnFileSelected, self._fileList)
-        flexGridSizer.Add(self._fileList, 1, flag=wx.EXPAND)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
+        flexGridSizer.Add(self._fileList, (1,1), (1,2), flag=wx.EXPAND)
         
         config = wx.ConfigBase_Get()
         self._lastArguments = config.Read("LastRunArguments")
         self._argsEntry = wx.TextCtrl(self, -1, str(self._lastArguments))
         self._argsEntry.SetToolTipString(str(self._lastArguments))
 
-        flexGridSizer.Add(argsStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
-        flexGridSizer.Add(self._argsEntry, 1, flag=wx.EXPAND)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
+        flexGridSizer.Add(argsStaticText, (2,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+        flexGridSizer.Add(self._argsEntry, (2,1), (1,2), flag=wx.EXPAND)
         
-        flexGridSizer.Add(startInStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+        flexGridSizer.Add(startInStaticText, (3,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
         self._lastStartIn = config.Read("LastRunStartIn")
         if not self._lastStartIn:
             self._lastStartIn = str(os.getcwd())
         self._startEntry = wx.TextCtrl(self, -1, self._lastStartIn)
         self._startEntry.SetToolTipString(self._lastStartIn)
 
-        flexGridSizer.Add(self._startEntry, 1, wx.EXPAND)
+        flexGridSizer.Add(self._startEntry, (3,1), flag=wx.EXPAND)
         self._findDir = wx.Button(self, -1, _("Browse..."))
         self.Bind(wx.EVT_BUTTON, self.OnFindDirClick, self._findDir)
-        flexGridSizer.Add(self._findDir, 0, wx.RIGHT, 10)
+        flexGridSizer.Add(self._findDir, (3,2))
         
-        flexGridSizer.Add(pythonPathStaticText, 0, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+        flexGridSizer.Add(pythonPathStaticText, (4,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
         if os.environ.has_key('PYTHONPATH'):
             startval = os.environ['PYTHONPATH']
         else:
@@ -2126,34 +2200,29 @@ class CommandPropertiesDialog(wx.Dialog):
         self._lastPythonPath = config.Read("LastPythonPath", startval)
         self._pythonPathEntry = wx.TextCtrl(self, -1, self._lastPythonPath)
         self._pythonPathEntry.SetToolTipString(self._lastPythonPath)
-        flexGridSizer.Add(self._pythonPathEntry, 1, wx.EXPAND)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
+        flexGridSizer.Add(self._pythonPathEntry, (4,1), (1,2), flag=wx.EXPAND)
+        
         if debugging and _WINDOWS:
             self._postpendCheckBox = wx.CheckBox(self, -1, postpendStaticText)
             checked = bool(config.ReadInt("PythonPathPostpend", 1))
             self._postpendCheckBox.SetValue(checked)
-            flexGridSizer.Add(self._postpendCheckBox, 1, wx.EXPAND)
-        flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
-        cpPanelBorderSizer.Add(flexGridSizer, 0, wx.ALL, 10)
+            flexGridSizer.Add(self._postpendCheckBox, (5,1), flag=wx.EXPAND)
+        cpPanelBorderSizer.Add(flexGridSizer, 0, flag=wx.ALL, border=10)
         
-        box = wx.BoxSizer(wx.HORIZONTAL)
+        box = wx.StdDialogButtonSizer()
         self._okButton = wx.Button(self, wx.ID_OK, okButtonName)
         self._okButton.SetDefault()
         self._okButton.SetHelpText(_("The ") + okButtonName + _(" button completes the dialog"))
-        box.Add(self._okButton, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
+        box.AddButton(self._okButton)
         self.Bind(wx.EVT_BUTTON, self.OnOKClick, self._okButton)
         btn = wx.Button(self, wx.ID_CANCEL, _("Cancel"))
         btn.SetHelpText(_("The Cancel button cancels the dialog."))
-        box.Add(btn, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
-        cpPanelBorderSizer.Add(box, 0, wx.ALIGN_RIGHT|wx.BOTTOM, 5)
+        box.AddButton(btn)
+        box.Realize()
+        cpPanelBorderSizer.Add(box, 0, flag=wx.ALIGN_RIGHT|wx.ALL, border=5)
         
         self.SetSizer(cpPanelBorderSizer)
-        if _WINDOWS:
-            self.GetSizer().Fit(self)
-        
-        self.Layout()
-        
+                
         # Set up selections based on last values used.
         self._fileNameList = None
         self._selectedFileIndex = 0
@@ -2168,6 +2237,9 @@ class CommandPropertiesDialog(wx.Dialog):
         self._selectedProjectIndex = selectedIndex
         self._selectedProjectDocument = self._projectDocumentList[selectedIndex]
         self.PopulateFileList(self._selectedProjectDocument, lastFile)
+
+        cpPanelBorderSizer.Fit(self)
+
             
     def OnOKClick(self, event):
         startIn = self._startEntry.GetValue()
@@ -2193,6 +2265,7 @@ class CommandPropertiesDialog(wx.Dialog):
         self.EndModal(wx.ID_OK)
             
     def GetSettings(self):  
+        projectPath = self._selectedProjectDocument.GetFilename()
         filename = self._fileNameList[self._selectedFileIndex]
         args = self._argsEntry.GetValue() 
         startIn = self._startEntry.GetValue()
@@ -2207,7 +2280,7 @@ class CommandPropertiesDialog(wx.Dialog):
         else:
             env['PYTHONPATH'] = self._pythonPathEntry.GetValue()
             
-        return filename, args, startIn, isPython, env
+        return projectPath, filename, args, startIn, isPython, env
                       
     def OnFileSelected(self, event):
         self._selectedFileIndex = self._fileList.GetSelection()
@@ -2229,16 +2302,17 @@ class CommandPropertiesDialog(wx.Dialog):
             self._argsEntry.SetValue(self._lastArguments)  
                 
             
-
     def OnFindDirClick(self, event):
         dlg = wx.DirDialog(self, "Choose a starting directory:", self._startEntry.GetValue(),
                           style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
 
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             self._startEntry.SetValue(dlg.GetPath())
             
         dlg.Destroy() 
            
+
     def EvtListBox(self, event):
         if event.GetString():
             index = self._projectNameList.index(event.GetString())
@@ -2524,3 +2598,76 @@ def getAddWatchImage():
 
 def getAddWatchIcon():
     return wx.IconFromBitmap(getAddWatchBitmap())
+    
+#----------------------------------------------------------------------
+def getRunningManData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\x86IDAT8\x8d\xa5\x93\xb1K\x02Q\x1c\xc7\xbf\xcf\x9a\x1bZl\x88\xb4\
+\x04\x83\x10\xa2\x96\xc0A\xa8\x96\x96\xf4h\xe9\xf0\x1f\xd0\xcd(Bpi\x13nH\xb2\
+%\x9d\x1a"\xb9)\xb4\x16i\x10\n\x13MA\x84\xa3&\xa1\xa1A\xa1E\xbdw\x97\xa2\xbd\
+\x06\xf1(\xef,\xac\xef\xf6x\xdf\xf7}\x9f\xdf\x97\xf7\x081M\xe0?\x9a\xfc\xcd \
+\\\xdc2\x99\xb6A[\x14\x91C\x9e\x8c\x1d\x00\x00\xd5\xa7*\x9a\x8a\xfa7\x82u\
+\xfb\x14dj\x03mQ\xc3}\xf2\xb5\x83\xc7B\x9e\x89\xf7/\xda\xba\xd1\x94\x01\x00j\
+CF\xe2t\xef\x1b>\x1f\x8c3Q\xf0\x11\xd3p\xa2yf\x1a\xbc\xcb\n\xdee\x85\xdd>\
+\x07\xb5!C\xe9\xb4\xb1\xe9=b\x03\x8fc\xc3\xcf\xbcN\xb3\x9e`@\x11\xb9\xaa`\
+\x7fg\x19\'\x97y\xd8\x96\xfa\xf8\x95\xf23d\xa5O4\xbfh\x87(\xf8\x88a\xc0 $|~\
+\x87n\xf7\x03\xaa\xf2\x8e\xc0\xee\n\x00 \x91\xab\xc3\xeb4\xc3\xed\xe1\xb4qF\
+\x96\xb8`\xb3h\xb7\xa6Jo\xa0\x9d\x1eD\xc1G\xc4!\x9f\xae\x03\x00\xa8\xd5jh4e\
+\r\xb9\xf0P\x82T,\x83\xf3\x0bl\xd8k\x18\xe0\xf6p\x84vz\xa0M\x8aB\xf2\x98\x84\
+\x03[\xb0.XP\xcafu^m\x04>\x18\xd7\x9aM\xe4\xea\xba\xc0x\xec\x8c\xa9\xca*^\
+\xa5\x1b}\xc0u*\xc9B\xd14\x12\xe8\x97%\x15\xcbF`\xdaH\xba\x80P4\r)\x13#R\xc6\
+\xf0\xdc\x8f2\x01\x80\x94\x89\xe9>\xc9(\xcd:\xb6\xd9\x1aw\xa0\x95i\xf8\x0e\
+\xc6\xd1\'\'\x86\xa2\xd5\x8d \xbe@\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getRunningManBitmap():
+    return BitmapFromImage(getRunningManImage())
+
+def getRunningManImage():
+    stream = cStringIO.StringIO(getRunningManData())
+    return ImageFromStream(stream)
+
+def getRunningManIcon():
+    icon = EmptyIcon()
+    icon.CopyFromBitmap(getRunningManBitmap())
+    return icon
+
+#----------------------------------------------------------------------
+def getDebuggingManData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\xafIDAT8\x8d\x8d\x93\xbfK[Q\x14\xc7?7\n:\t\xb5SA\xc1?@\xc1A\x9c,%\
+\xd0\xa9\x83\xb5\x98!(b\t\xbc\xa7q("m\x1c\n5V]D\xd4-\xf8\x83\xa7\xa2\t\xa1\
+\xa6\xed$8\x08\x92\xa1\x8b\x14A\xd0YB"\xa4\xf4\x87\x90\x97K\xa8\xcb\xed\xf0\
+\xc8m\xae\xfa\xd4\x03\x07.\xe7\x9e\xf3\xfd\x9e\x9f\x88@\x1d\xb5\xba\x94\xca\
+\xaa\xeb\xb6\xbb4\xc0\x03d&\xb1\xa7\xfc\xfe\x0c\x80L\xdaQ\xd2\xad\x90I;F\x80\
+++\xbe\xe0bve\xdf\xd7y\xfemH\xc4\x162\xaa\xbb\xa5D(\x1c\x11\xb7\x02\x88@\x9d\
+f?*4\xd1\xf6\xa2\x0f\x80\x93\xf4\x8e\xe1\xb8\xf2\xf1\xb5\x18\x9cH(\x80\xe4bT\
+\x83\xd5W\x1f\xa1pD\x8c|\xd8T\x00\xdf\xd6\xd7\xe8\x1f\xb3tp\xf1\n^\xfe\xf8\
+\xa5^u7\x00P\x1eYP\xd2\x95\x1c\xa4\xa6\x84\x18\x8do\xab*C&\xed\xa8\xafG\x7f\
+\xe9\x1f\xb3x\xdc\x08\xad\x8f \x7f\tg%\xf8Y\x82\xe3\x8de\x86\x82\xcdF9\xba\
+\x84\xc1\x89\x84*K\t\xc0\xf0\xbbq:\x9f\xfcO\x7f?\xe7\x01\x9c\xff\x86Br\x8e\
+\x83\xd4\x94\x06\xd0SH.F\xc5P\xb0\x19\xe9z \xf9KOmkN\x07\x03\x14/r\xb4?\x8b\
+\xe8\xc6\xeb\x1e\x00l\x1f\xfe\xd15\x17\xaf<\xdb\xd37\xef\xd9\x9d\xb4\xe9\x8a\
+\xadj\xbfx\xb4\x878(#\x03\x00\xe9JF{[\xf92\xeb\xb1V\x99\xbbb\xab|\x9f\xb7\
+\x8d\xa9\x9cf\x1dq\x9au\xc4\x8dM\x0c\x85#\xa2x\x91cw\xd2\xd6i\x83\trk\x13\
+\x9f\x0fL\xab\xda\xe6\xd4\xd6Y+\xf1h\x8f\xb9T~G\xd2\x11\xb4\xd4\xe7O[\xf7\
+\x1e\xd6\x9d\xc7\xe4\xb7\xbe\x86\xf8\xb1?\xf4\x9c\xff\x01\xbe\xe9\xaf\x96\
+\xf0\x7fPA\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getDebuggingManBitmap():
+    return BitmapFromImage(getDebuggingManImage())
+
+def getDebuggingManImage():
+    stream = cStringIO.StringIO(getDebuggingManData())
+    return ImageFromStream(stream)
+
+def getDebuggingManIcon():
+    icon = EmptyIcon()
+    icon.CopyFromBitmap(getDebuggingManBitmap())
+    return icon
+
+#----------------------------------------------------------------------
+
index b75e544585b3ef75e00400c16893b457c4b4b2ce..32e4fcffeb105b6a0ebfc9104dbe2ab8f2b341ea 100644 (file)
 import wx
 import wx.lib.pydocview
 import MessageService
+import ProjectEditor
 import os
 import os.path
-import pickle
+import activegrid.util.xmlutils as xmlutils
 
 _ = wx.GetTranslation
 
@@ -38,7 +39,7 @@ EXTENSIONS_CONFIG_STRING = "Extensions"
 class Extension:
     
 
-    def __init__(self, menuItemName):
+    def __init__(self, menuItemName=None):
         self.menuItemName = menuItemName
         self.id = 0
         self.menuItemDesc = ''
@@ -46,32 +47,51 @@ class Extension:
         self.commandPreArgs = ''
         self.commandPostArgs = ''
         self.fileExt = None
-
+        self.opOnSelectedFile = True
+        
 
 class ExtensionService(wx.lib.pydocview.DocService):
 
+    EXTENSIONS_KEY = "/AG_Extensions"
 
     def __init__(self):
         self.LoadExtensions()
 
 
+    def __getExtensionKeyName(extensionName):
+        return "%s/%s" % (ExtensionService.EXTENSIONS_KEY, extensionName)
+      
+  
+    __getExtensionKeyName = staticmethod(__getExtensionKeyName)
+
+
     def LoadExtensions(self):
+        self._extensions = []
+
+        extensionNames = []
         config = wx.ConfigBase_Get()
-        pickledExtensions = config.Read(EXTENSIONS_CONFIG_STRING)
-        if pickledExtensions:
-            try:
-                self._extensions = pickle.loads(pickledExtensions.encode('ascii'))
-            except:
-                tp, val, tb = sys.exc_info()
-                traceback.print_exception(tp,val,tb)
-                self._extensions = []
-        else:
-            self._extensions = []
-        
+        path = config.GetPath()
+        try:
+            config.SetPath(ExtensionService.EXTENSIONS_KEY)
+            cont, value, index = config.GetFirstEntry()
+            while cont:
+                extensionNames.append(value)
+                cont, value, index = config.GetNextEntry(index)
+        finally:
+            config.SetPath(path)
+                    
+        for extensionName in extensionNames:
+            extensionData = config.Read(self.__getExtensionKeyName(extensionName))
+            if extensionData:
+                extension = xmlutils.unmarshal(extensionData.encode('utf-8'))
+                self._extensions.append(extension)
+
 
     def SaveExtensions(self):
         config = wx.ConfigBase_Get()
-        config.Write(EXTENSIONS_CONFIG_STRING, pickle.dumps(self._extensions))
+        config.DeleteGroup(ExtensionService.EXTENSIONS_KEY)
+        for extension in self._extensions:
+            config.Write(self.__getExtensionKeyName(extension.menuItemName), xmlutils.marshal(extension))
 
 
     def GetExtensions(self):
@@ -82,6 +102,10 @@ class ExtensionService(wx.lib.pydocview.DocService):
         self._extensions = extensions
 
 
+    def CheckSumExtensions(self):
+        return xmlutils.marshal(self._extensions)
+
+
     def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
         toolsMenuIndex = menuBar.FindMenu(_("&Tools"))
         if toolsMenuIndex > -1:
@@ -100,8 +124,15 @@ class ExtensionService(wx.lib.pydocview.DocService):
                 wx.EVT_UPDATE_UI(frame, ext.id, frame.ProcessUpdateUIEvent)
 
         if toolsMenuIndex == -1:
-            formatMenuIndex = menuBar.FindMenu(_("&Format"))
-            menuBar.Insert(formatMenuIndex + 1, toolsMenu, _("&Tools"))
+            index = menuBar.FindMenu(_("&Run"))
+            if index == -1:
+                index = menuBar.FindMenu(_("&Project"))
+            if index == -1:
+                index = menuBar.FindMenu(_("&Format"))
+            if index == -1:
+                index = menuBar.FindMenu(_("&View"))
+            menuBar.Insert(index + 1, toolsMenu, _("&Tools"))
+
 
     def ProcessEvent(self, event):
         id = event.GetId()
@@ -126,6 +157,14 @@ class ExtensionService(wx.lib.pydocview.DocService):
                             if fileExt in doc.GetDocumentTemplate().GetFileFilter():
                                 event.Enable(True)
                                 return True
+                        if extension.opOnSelectedFile and isinstance(doc, ProjectEditor.ProjectDocument):
+                            filename = doc.GetFirstView().GetSelectedFile()
+                            if filename:
+                                template = wx.GetApp().GetDocumentManager().FindTemplateForPath(filename)
+                                for fileExt in extension.fileExt:
+                                    if fileExt in template.GetFileFilter():
+                                        event.Enable(True)
+                                        return True
                     event.Enable(False)
                     return False
         return False
@@ -136,7 +175,12 @@ class ExtensionService(wx.lib.pydocview.DocService):
             doc = wx.GetApp().GetDocumentManager().GetCurrentDocument()
             if not doc:
                 return
-            filename = doc.GetFilename()
+            if extension.opOnSelectedFile and isinstance(doc, ProjectEditor.ProjectDocument):
+                filename = doc.GetFirstView().GetSelectedFile()
+                if not filename:
+                    filename = doc.GetFilename()
+            else:
+                filename = doc.GetFilename()
             ext = os.path.splitext(filename)[1]
             if not '*' in extension.fileExt:
                 if not ext or ext[1:] not in extension.fileExt:
@@ -171,99 +215,107 @@ class ExtensionOptionsPanel(wx.Panel):
     def __init__(self, parent, id):
         wx.Panel.__init__(self, parent, id)
         
-        extOptionsPanelBorderSizer = wx.BoxSizer(wx.HORIZONTAL)
+        extOptionsPanelBorderSizer = wx.BoxSizer(wx.VERTICAL)
         
-        extOptionsPanelSizer = wx.FlexGridSizer(cols=2, hgap=SPACE, vgap=HALF_SPACE)
+        extOptionsPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
         
         extCtrlSizer = wx.BoxSizer(wx.VERTICAL)
-        extCtrlSizer.Add(wx.StaticText(self, -1, _("Extensions:")), 0)
-        self._extListBox = wx.ListBox(self, -1, size=(-1,185), style=wx.LB_SINGLE)
+        extCtrlSizer.Add(wx.StaticText(self, -1, _("External Tools:")), 0, wx.BOTTOM, HALF_SPACE)
+        self._extListBox = wx.ListBox(self, -1, size=(-1,160), style=wx.LB_SINGLE)
         self.Bind(wx.EVT_LISTBOX, self.OnListBoxSelect, self._extListBox)
-        extCtrlSizer.Add(self._extListBox, 1, wx.TOP | wx.BOTTOM | wx.EXPAND, SPACE)        
-        buttonSizer = wx.GridSizer(rows=1, hgap=10, vgap=5)
+        extCtrlSizer.Add(self._extListBox, 1, wx.BOTTOM | wx.EXPAND, SPACE)        
+        buttonSizer = wx.GridSizer(cols=2, vgap=5, hgap=10)
         self._moveUpButton = wx.Button(self, -1, _("Move Up"))
         self.Bind(wx.EVT_BUTTON, self.OnMoveUp, self._moveUpButton)
-        buttonSizer.Add(self._moveUpButton, 0)
+        buttonSizer.Add(self._moveUpButton, 1, wx.EXPAND)
         self._moveDownButton = wx.Button(self, -1, _("Move Down"))
         self.Bind(wx.EVT_BUTTON, self.OnMoveDown, self._moveDownButton)
-        buttonSizer.Add(self._moveDownButton, 0)
-        extCtrlSizer.Add(buttonSizer, 0, wx.ALIGN_CENTER | wx.BOTTOM, HALF_SPACE)
-        buttonSizer = wx.GridSizer(rows=1, hgap=10, vgap=5)
-        self._addButton = wx.Button(self, -1, _("Add"))
+        buttonSizer.Add(self._moveDownButton, 1, wx.EXPAND)
+        self._addButton = wx.Button(self, wx.ID_ADD)
         self.Bind(wx.EVT_BUTTON, self.OnAdd, self._addButton)
-        buttonSizer.Add(self._addButton, 0)
-        self._deleteButton = wx.Button(self, wx.ID_DELETE)
+        buttonSizer.Add(self._addButton, 1, wx.EXPAND)
+        self._deleteButton = wx.Button(self, wx.ID_DELETE, label=_("Delete")) # get rid of accelerator for letter d in "&Delete"
         self.Bind(wx.EVT_BUTTON, self.OnDelete, self._deleteButton)
-        buttonSizer.Add(self._deleteButton, 0)
+        buttonSizer.Add(self._deleteButton, 1, wx.EXPAND)
         extCtrlSizer.Add(buttonSizer, 0, wx.ALIGN_CENTER)
-        extOptionsPanelSizer.Add(extCtrlSizer, 0)
+        extOptionsPanelSizer.Add(extCtrlSizer, 0, wx.EXPAND)
 
         self._extDetailPanel = wx.Panel(self)
-        staticBox = wx.StaticBox(self._extDetailPanel, label=_("Selected Extension"))
-        staticBoxSizer = wx.StaticBoxSizer(staticBox)
-        self._extDetailPanel.SetSizer(staticBoxSizer)
-        extDetailSizer = wx.FlexGridSizer(cols=1, hgap=5, vgap=3)
-        staticBoxSizer.AddSizer(extDetailSizer, 0, wx.ALL, 5)
+        staticBox = wx.StaticBox(self, label=_("Selected External Tool"))
+        staticBoxSizer = wx.StaticBoxSizer(staticBox, wx.VERTICAL)
+        
+        extDetailSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=3)
+        extDetailSizer.AddGrowableCol(1,1)
 
         extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Menu Item Name:")))
         self._menuItemNameTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))
-        extDetailSizer.Add(self._menuItemNameTextCtrl, 1, wx.EXPAND)
+        extDetailSizer.Add(self._menuItemNameTextCtrl, 0, wx.EXPAND)
         self.Bind(wx.EVT_TEXT, self.SaveCurrentItem, self._menuItemNameTextCtrl)        
 
         extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Menu Item Description:")))
         self._menuItemDescTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))
-        extDetailSizer.Add(self._menuItemDescTextCtrl, 1, wx.EXPAND)
+        extDetailSizer.Add(self._menuItemDescTextCtrl, 0, wx.EXPAND)
 
         extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Command Path:")))
         self._commandTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))        
         findFileButton = wx.Button(self._extDetailPanel, -1, _("Browse..."))
         def OnBrowseButton(event):
-            fileDlg = wx.FileDialog(self, _("Choose an Executable:"), style=wx.OPEN | wx.HIDE_READONLY)
+            fileDlg = wx.FileDialog(self, _("Choose an Executable:"), style=wx.OPEN|wx.FILE_MUST_EXIST|wx.HIDE_READONLY|wx.CHANGE_DIR)
             path = self._commandTextCtrl.GetValue()
             if path:
                 fileDlg.SetPath(path)
+            # fileDlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
             if fileDlg.ShowModal() == wx.ID_OK:
                 self._commandTextCtrl.SetValue(fileDlg.GetPath())
                 self._commandTextCtrl.SetInsertionPointEnd()
+                self._commandTextCtrl.SetToolTipString(fileDlg.GetPath())
             fileDlg.Destroy()
         wx.EVT_BUTTON(findFileButton, -1, OnBrowseButton)
         hsizer = wx.BoxSizer(wx.HORIZONTAL)
         hsizer.Add(self._commandTextCtrl, 1, wx.EXPAND)
         hsizer.Add(findFileButton, 0, wx.LEFT, HALF_SPACE)
-        extDetailSizer.Add(hsizer, 0)
+        extDetailSizer.Add(hsizer, 0, wx.EXPAND)
 
-        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Command Pre Arguments:")))
+        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Command Pre Args:")))
         self._commandPreArgsTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))
-        extDetailSizer.Add(self._commandPreArgsTextCtrl, 1, wx.EXPAND)
+        extDetailSizer.Add(self._commandPreArgsTextCtrl, 0, wx.EXPAND)
 
-        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Command Post Arguments:")))
+        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("Command Post Args:")))
         self._commandPostArgsTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))
-        extDetailSizer.Add(self._commandPostArgsTextCtrl, 1, wx.EXPAND)
+        extDetailSizer.Add(self._commandPostArgsTextCtrl, 0, wx.EXPAND)
 
-        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("File Extensions (Comma Separated):")))
+        extDetailSizer.Add(wx.StaticText(self._extDetailPanel, -1, _("File Extensions:")))
         self._fileExtTextCtrl = wx.TextCtrl(self._extDetailPanel, -1, size = (-1, -1))
-        self._fileExtTextCtrl.SetToolTipString(_("""For example: "txt, text" or "*" for all files"""))
-        extDetailSizer.Add(self._fileExtTextCtrl, 1, wx.EXPAND)
+        self._fileExtTextCtrl.SetToolTipString(_("""For example: "txt, text" (comma separated) or "*" for all files"""))
+        extDetailSizer.Add(self._fileExtTextCtrl, 0, wx.EXPAND)
 
-        extOptionsPanelSizer.Add(self._extDetailPanel, 0)
+        self._selFileCtrl = wx.CheckBox(self._extDetailPanel, -1, _("Operate on Selected File"))
+        extDetailSizer.Add(self._selFileCtrl)
+        self._selFileCtrl.SetToolTipString(_("If focus is in the project, instead of operating on the project file, operate on the selected file."))
 
-        extOptionsPanelBorderSizer.Add(extOptionsPanelSizer, 0, wx.ALL | wx.EXPAND, SPACE)
-        self.SetSizer(extOptionsPanelBorderSizer)
-        self.Layout()
-        parent.AddPage(self, _("Extensions"))
+        self._extDetailPanel.SetSizer(extDetailSizer)
+        staticBoxSizer.Add(self._extDetailPanel, 1, wx.ALL|wx.EXPAND, SPACE)
         
+        extOptionsPanelSizer.Add(staticBoxSizer, 1, wx.LEFT|wx.EXPAND, SPACE)
+
+        extOptionsPanelBorderSizer.Add(extOptionsPanelSizer, 1, wx.ALL|wx.EXPAND, SPACE)
+        self.SetSizer(extOptionsPanelBorderSizer)
+
         if self.PopulateItems():
             self._extListBox.SetSelection(0)
-        self.OnListBoxSelect(None)
+        self.OnListBoxSelect()
+
+        self.Layout()
+        
+        parent.AddPage(self, _("External Tools"))        
 
 
     def OnOK(self, optionsDialog):
         self.SaveCurrentItem()
         extensionsService = wx.GetApp().GetService(ExtensionService)
-        oldExtensions = extensionsService.GetExtensions()
         extensionsService.SetExtensions(self._extensions)
         extensionsService.SaveExtensions()
-        if oldExtensions.__repr__() != self._extensions.__repr__():
+        if extensionsService.CheckSumExtensions() != self._oldExtensions:  # see PopulateItems() note about self._oldExtensions
             msgTitle = wx.GetApp().GetAppName()
             if not msgTitle:
                 msgTitle = _("Document Options")
@@ -277,6 +329,7 @@ class ExtensionOptionsPanel(wx.Panel):
         extensionsService = wx.GetApp().GetService(ExtensionService)
         import copy
         self._extensions = copy.deepcopy(extensionsService.GetExtensions())
+        self._oldExtensions = extensionsService.CheckSumExtensions()  # wxBug:  need to make a copy now since the deepcopy reorders fields, so we must compare the prestine copy with the modified copy
         for extension in self._extensions:
             self._extListBox.Append(extension.menuItemName, extension)
         self._currentItem = None
@@ -284,9 +337,9 @@ class ExtensionOptionsPanel(wx.Panel):
         return len(self._extensions)
       
 
-    def OnListBoxSelect(self, event):
+    def OnListBoxSelect(self, event=None):
         self.SaveCurrentItem()
-        if not self._extListBox.GetSelections():
+        if self._extListBox.GetSelection() == wx.NOT_FOUND:
             self._currentItemIndex = -1
             self._currentItem = None
             self._deleteButton.Enable(False)
@@ -316,43 +369,52 @@ class ExtensionOptionsPanel(wx.Panel):
                 extension.fileExt = None
             else:
                 extension.fileExt = fileExt.split(',')
+            extension.opOnSelectedFile = self._selFileCtrl.GetValue()
             
 
     def LoadItem(self, extension):
         if extension:
             self._menuItemDescTextCtrl.SetValue(extension.menuItemDesc or '')
             self._commandTextCtrl.SetValue(extension.command or '')
+            self._commandTextCtrl.SetToolTipString(extension.command or '')
             self._commandPreArgsTextCtrl.SetValue(extension.commandPreArgs or '')
             self._commandPostArgsTextCtrl.SetValue(extension.commandPostArgs or '')
             if extension.fileExt:
-                self._fileExtTextCtrl.SetValue(extension.fileExt.__repr__()[1:-1].replace("'",""))  # Make the list a string, strip the brakcet on either side
+                list = ""
+                for ext in extension.fileExt:
+                    if list:
+                        list = list + ", "
+                    list = list + ext
+                self._fileExtTextCtrl.SetValue(list)
             else:
                 self._fileExtTextCtrl.SetValue('')
+            self._selFileCtrl.SetValue(extension.opOnSelectedFile)
             self._menuItemNameTextCtrl.SetValue(extension.menuItemName or '')  # Do the name last since it triggers the write event that updates the entire item
             self._extDetailPanel.Enable()
         else:
             self._menuItemNameTextCtrl.SetValue('')
             self._menuItemDescTextCtrl.SetValue('')
             self._commandTextCtrl.SetValue('')
+            self._commandTextCtrl.SetToolTipString(_("Path to executable"))
             self._commandPreArgsTextCtrl.SetValue('')
             self._commandPostArgsTextCtrl.SetValue('')
             self._fileExtTextCtrl.SetValue('')
+            self._selFileCtrl.SetValue(True)
             self._extDetailPanel.Enable(False)
             
       
     def OnAdd(self, event):
         self.SaveCurrentItem()
-        extensionNames = map(lambda extension: extension.menuItemName, self._extensions)
         name = _("Untitled")
         count = 1
-        while name in extensionNames:
+        while self._extListBox.FindString(name) != wx.NOT_FOUND:
             count = count + 1
-            name = _("Untitled %s") % count
+            name = _("Untitled%s") % count
         extension = Extension(name)
         self._extensions.append(extension)
         self._extListBox.Append(extension.menuItemName, extension)
-        self._extListBox.SetSelection(self._extListBox.GetCount() - 1)
-        self.OnListBoxSelect(None)
+        self._extListBox.SetStringSelection(extension.menuItemName)
+        self.OnListBoxSelect()
         self._menuItemNameTextCtrl.SetFocus()
         self._menuItemNameTextCtrl.SetSelection(-1, -1)
         
@@ -364,7 +426,7 @@ class ExtensionOptionsPanel(wx.Panel):
         if self._currentItemIndex > -1:
             self._extListBox.SetSelection(self._currentItemIndex)
         self._currentItem = None  # Don't update it since it no longer exists
-        self.OnListBoxSelect(None)
+        self.OnListBoxSelect()
 
 
     def OnMoveUp(self, event):
@@ -374,7 +436,7 @@ class ExtensionOptionsPanel(wx.Panel):
         self._extListBox.Insert(itemAboveString, self._currentItemIndex)
         self._extListBox.SetClientData(self._currentItemIndex, itemAboveData)
         self._currentItemIndex = self._currentItemIndex - 1
-        self.OnListBoxSelect(None) # Reset buttons
+        self.OnListBoxSelect() # Reset buttons
 
 
     def OnMoveDown(self, event):
@@ -384,4 +446,4 @@ class ExtensionOptionsPanel(wx.Panel):
         self._extListBox.Insert(itemBelowString, self._currentItemIndex)
         self._extListBox.SetClientData(self._currentItemIndex, itemBelowData)
         self._currentItemIndex = self._currentItemIndex + 1
-        self.OnListBoxSelect(None) # Reset buttons
+        self.OnListBoxSelect() # Reset buttons
index 63eea49a130f066ace38739f39458612dc814c0e..1fd557b00252dae40e8f10661fbb523c8cdeaa5f 100644 (file)
@@ -79,8 +79,7 @@ class FindInDirService(FindService.FindService):
         id = event.GetId()
         if id == FindInDirService.FINDALL_ID:
             projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
-            view = projectService.GetView()
-            if view and view.GetDocument() and view.GetDocument().GetFiles():
+            if projectService.GetFilesFromCurrentProject():
                 event.Enable(True)
             else:
                 event.Enable(False)
@@ -94,7 +93,7 @@ class FindInDirService(FindService.FindService):
     def ShowFindDirDialog(self, findString=None):
         config = wx.ConfigBase_Get()
 
-        frame = wx.Dialog(None, -1, _("Find in Directory"), size= (320,200))
+        frame = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("Find in Directory"), size= (320,200))
         borderSizer = wx.BoxSizer(wx.HORIZONTAL)
 
         contentSizer = wx.BoxSizer(wx.VERTICAL)
@@ -112,11 +111,11 @@ class FindInDirService(FindService.FindService):
             dir = dirCtrl.GetValue()
             if len(dir):
                 dlg.SetPath(dir)
+            dlg.CenterOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 dirCtrl.SetValue(dlg.GetPath())
                 dirCtrl.SetToolTipString(dirCtrl.GetValue())
                 dirCtrl.SetInsertionPointEnd()
-
             dlg.Destroy()
         wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
 
@@ -128,6 +127,9 @@ class FindInDirService(FindService.FindService):
         lineSizer.Add(wx.StaticLine(frame, -1, size = (10,-1)), 0, flag=wx.EXPAND)
         contentSizer.Add(lineSizer, flag=wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM, border=HALF_SPACE)
         
+        if wx.Platform == "__WXMAC__":
+            contentSizer.Add((-1, 10), 0, wx.EXPAND)
+        
         lineSizer = wx.BoxSizer(wx.HORIZONTAL)
         lineSizer.Add(wx.StaticText(frame, -1, _("Find what:")), 0, wx.ALIGN_CENTER | wx.RIGHT, HALF_SPACE)
         if not findString:
@@ -151,13 +153,17 @@ class FindInDirService(FindService.FindService):
         buttonSizer = wx.BoxSizer(wx.VERTICAL)
         findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
         findBtn.SetDefault()
-        buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
+        BTM_SPACE = HALF_SPACE
+        if wx.Platform == "__WXMAC__":
+            BTM_SPACE = SPACE
+        buttonSizer.Add(findBtn, 0, wx.BOTTOM, BTM_SPACE)
         buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL), 0)
         borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE)
 
         frame.SetSizer(borderSizer)
         frame.Fit()
 
+        frame.CenterOnParent()
         status = frame.ShowModal()
 
         passedCheck = False
@@ -168,6 +174,7 @@ class FindInDirService(FindService.FindService):
                                        _("Find in Directory"),
                                        wx.OK | wx.ICON_EXCLAMATION
                                        )
+                dlg.CenterOnParent()
                 dlg.ShowModal()
                 dlg.Destroy()
 
@@ -178,6 +185,7 @@ class FindInDirService(FindService.FindService):
                                        _("Find in Directory"),
                                        wx.OK | wx.ICON_EXCLAMATION
                                        )
+                dlg.CenterOnParent()
                 dlg.ShowModal()
                 dlg.Destroy()
 
@@ -197,10 +205,8 @@ class FindInDirService(FindService.FindService):
         regExpr = regExprCtrl.IsChecked()
         self.SaveFindConfig(findString, wholeWord, matchCase, regExpr)
 
-            
+        frame.Destroy()
         if status == wx.ID_OK:            
-            frame.Destroy()
-
             messageService = wx.GetApp().GetService(MessageService.MessageService)
             messageService.ShowWindow()
 
@@ -267,7 +273,6 @@ class FindInDirService(FindService.FindService):
 
             return True
         else:
-            frame.Destroy()
             return False
             
 
@@ -285,7 +290,7 @@ class FindInDirService(FindService.FindService):
     def ShowFindAllDialog(self, findString=None):
         config = wx.ConfigBase_Get()
 
-        frame = wx.Dialog(None, -1, _("Find in Project"), size= (320,200))
+        frame = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("Find in Project"), size= (320,200))
         borderSizer = wx.BoxSizer(wx.HORIZONTAL)
 
         contentSizer = wx.BoxSizer(wx.VERTICAL)
@@ -310,13 +315,17 @@ class FindInDirService(FindService.FindService):
         buttonSizer = wx.BoxSizer(wx.VERTICAL)
         findBtn = wx.Button(frame, wx.ID_OK, _("Find"))
         findBtn.SetDefault()
-        buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
+        BTM_SPACE = HALF_SPACE
+        if wx.Platform == "__WXMAC__":
+            BTM_SPACE = SPACE
+        buttonSizer.Add(findBtn, 0, wx.BOTTOM, BTM_SPACE)
         buttonSizer.Add(wx.Button(frame, wx.ID_CANCEL), 0)
         borderSizer.Add(buttonSizer, 0, wx.ALL, SPACE)
 
         frame.SetSizer(borderSizer)
         frame.Fit()
 
+        frame.CenterOnParent()
         status = frame.ShowModal()
 
         # save user choice state for this and other Find Dialog Boxes
@@ -326,9 +335,8 @@ class FindInDirService(FindService.FindService):
         regExpr = regExprCtrl.IsChecked()
         self.SaveFindConfig(findString, wholeWord, matchCase, regExpr)
 
+        frame.Destroy()
         if status == wx.ID_OK:
-            frame.Destroy()
-
             messageService = wx.GetApp().GetService(MessageService.MessageService)
             messageService.ShowWindow()
 
@@ -412,7 +420,6 @@ class FindInDirService(FindService.FindService):
 
             return True
         else:
-            frame.Destroy()
             return False
 
 
@@ -442,8 +449,9 @@ class FindInDirService(FindService.FindService):
                 break
 
         if not foundView:
-            doc = wx.GetApp().GetDocumentManager().CreateDocument(filename, wx.lib.docview.DOC_SILENT)
-            foundView = doc.GetFirstView()
+            doc = wx.GetApp().GetDocumentManager().CreateDocument(filename, wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE)
+            if doc:
+                foundView = doc.GetFirstView()
 
         if foundView:
             foundView.GetFrame().SetFocus()
index 2fac20da2319fce20316142822779c24b7cf1cc8..3d5e2e40836a308c57d9e7970d3e960d29364112 100644 (file)
@@ -121,6 +121,7 @@ class FindService(wx.lib.pydocview.DocService):
                 self._findDialog = None
 
             self._replaceDialog = FindReplaceDialog(self.GetDocumentManager().FindSuitableParent(), -1, _("Replace"), size=(320,200), findString=findString)
+            self._replaceDialog.CenterOnParent()
             self._replaceDialog.Show(True)
         else:
             if self._replaceDialog != None:
@@ -129,6 +130,7 @@ class FindService(wx.lib.pydocview.DocService):
                 self._replaceDialog = None
 
             self._findDialog = FindDialog(self.GetDocumentManager().FindSuitableParent(), -1, _("Find"), size=(320,200), findString=findString)
+            self._findDialog.CenterOnParent()
             self._findDialog.Show(True)
 
 
@@ -152,6 +154,7 @@ class FindService(wx.lib.pydocview.DocService):
         """ Display Goto Line Number dialog box """
         line = -1
         dialog = wx.TextEntryDialog(parent, _("Enter line number to go to:"), _("Go to Line"))
+        dialog.CenterOnParent()
         if dialog.ShowModal() == wx.ID_OK:
             try:
                 line = int(dialog.GetValue())
@@ -356,7 +359,10 @@ class FindDialog(wx.Dialog):
         wx.EVT_BUTTON(self, FindService.FINDONE_ID, self.OnActionEvent)
         cancelBtn = wx.Button(self, wx.ID_CANCEL)
         wx.EVT_BUTTON(self, wx.ID_CANCEL, self.OnClose)
-        buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
+        BTM_SPACE = HALF_SPACE
+        if wx.Platform == "__WXMAC__":
+            BTM_SPACE = SPACE
+        buttonSizer.Add(findBtn, 0, wx.BOTTOM, BTM_SPACE)
         buttonSizer.Add(cancelBtn, 0)
         gridSizer.Add(buttonSizer, pos=(0,2), span=(3,1))
 
@@ -455,9 +461,14 @@ class FindReplaceDialog(FindDialog):
         wx.EVT_BUTTON(self, FindService.REPLACEONE_ID, self.OnActionEvent)
         replaceAllBtn = wx.Button(self, FindService.REPLACEALL_ID, _("Replace All"))
         wx.EVT_BUTTON(self, FindService.REPLACEALL_ID, self.OnActionEvent)
-        buttonSizer.Add(findBtn, 0, wx.BOTTOM, HALF_SPACE)
-        buttonSizer.Add(replaceBtn, 0, wx.BOTTOM, HALF_SPACE)
-        buttonSizer.Add(replaceAllBtn, 0, wx.BOTTOM, HALF_SPACE)
+        
+        BTM_SPACE = HALF_SPACE
+        if wx.Platform == "__WXMAC__":
+            BTM_SPACE = SPACE
+            
+        buttonSizer.Add(findBtn, 0, wx.BOTTOM, BTM_SPACE)
+        buttonSizer.Add(replaceBtn, 0, wx.BOTTOM, BTM_SPACE)
+        buttonSizer.Add(replaceAllBtn, 0, wx.BOTTOM, BTM_SPACE)
         buttonSizer.Add(cancelBtn, 0)
         gridSizer.Add(buttonSizer, pos=(0,2), span=(3,1))
 
@@ -495,12 +506,24 @@ def getFindData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\x81IDAT8\x8d\xa5S\xc1\x16\xc0\x10\x0ckk\xff\xff\xc7d\x87\xad^U\r\
-\x93S\xe5U$\n\xb3$:\xc1e\x17(\x19Z\xb3$\x9e\xf1DD\xe2\x15\x01x\xea\x93\xef\
-\x04\x989\xea\x1b\xf2U\xc0\xda\xb4\xeb\x11\x1f:\xd8\xb5\xff8\x93\xd4\xa9\xae\
-@/S\xaaUwJ3\x85\xc0\x81\xee\xeb.q\x17C\x81\xd5XU \x1a\x93\xc6\x18\x8d\x90\
-\xe8}\x89\x00\x9a&\x9b_k\x94\x0c\xdf\xd78\xf8\x0b\x99Y\xb4\x08c\x9e\xfe\xc6\
-\xe3\x087\xf9\xd0D\x180\xf1#\x8e\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01\xb1IDAT8\x8d\xa5\x93=o\xd3P\x14\x86\x1f\xa7\x11\x95<\xdc\xc6\xecN+5\
+[\x86B\x99\xacLQ2Zr[\x89\xa1\xfd\x0b%\x95\x90\x00\xf1\x03\x80\x01\x98\x80\
+\x19G\xac\x0cm\xff@Y\xd9:\xd9Ck\x94\xd6\xddb\x94\x9b\x98\xc8\xd2e1C\xe5\x8b\
+\xdd\x14\x96\xbe\xdb=\x1f\xefy\xef\xf90\x8c\xda\x12wA\xbd\xfc\x18\xfa\x9fs\
+\x80\xf9|\x0e\xc0\x93\xc1\x81\x01\xf0\xe6\xf5\xab\x1c`:\x9d\x02\xf0\xf6\xdd{\
+\xa3\xc8\xa9\xddd\xec\xf5z\xb4Z\xeb\x00\x1c\x1f\x1d\xe6\x85\xdd\xf3<\x06\x83\
+\xc1\x82\xbd\xa2 \x0cCL\xd3d<\x1e\x13\xc71\xb6m\x030\x1a\x8d\x08\x82\x00\x80\
+\xb3\xb3s:\x9d\x8e\xce\xa9(h6\x9b8\x8e\x83m\xdb4\x1a\r\x82 \xe0\xc5\xf3g\xb9\
+eY\xb4\xdbm\x1c\xc7Y\xe8\x81&\xf8\xf4\xf1C\xde\xedv+\xce\x97Owx\xfc\xe8k\xc5\
+\xb6\xb7\xb7\x8b\xef\x0foW \x84\xe0\xea\xea\x02\xa5\x94n\x18\x80\x94\x92\xd9\
+l\x02@\x96e\x95>\xd4nVO\xd3\xb9\x0e\xba\r\xa6i\xd2\xef\xf7\xf0\xfd!\xc7G\x87\
+y\xed:)\xd5\x01J\xfd\xd6c\xfc~\x9a\xfc\x93\xe8\xf2\xf2\x02(Ma6\x9b \x84@)\
+\xa5\t}\xff\x0b\xd0\'I~R\x14\xca\xb2L\xfb\x97\x97\xef-\xeeA!_J\x89\xeb\xba\
+\xb8\xae\xab\xbf\x06\x7f\x97\xacP[\x87\xeb9\x0b!H\x92\ta\x18"\xa5\xd4U\xbd\
+\xadm\xe3\xe1\x83\x8d<\x8a~\x90\xa6\xbf\x88\xe3\x18)\xa5&\xa9\x03X\x96E\xab\
+\xb5\x8em7\xf5\xc2\x94\xb1\xba\xba\xc6\xe6\xe6\x06++\xf7\x89\xa2\xa8\xe2\xd3\
+=89\xf9Va.\x14\x14\xd8\xdf?X VJa\x14\xd7X\xde\xef2\xbc\xadm\xe3\x7f~\xe3\xae\
+\xe7\xfc\x07\x84;\xc5\x82\xa1m&\x95\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 
 def getFindBitmap():
index 21001efc6b977229f5da4e9af54cea630439b10e..bcdbe7ed7bafc4fce7e55bda182f380c4454790c 100644 (file)
@@ -76,7 +76,6 @@ class HtmlView(CodeEditor.CodeView):
 ##        sizer = wx.BoxSizer(wx.HORIZONTAL)
 ##        sizer.Add(self._notebook, 1, wx.EXPAND)
 ##        frame.SetSizer(sizer)
-##        frame.SetAutoLayout(True)
 ##
 ##
 ##    def OnNotebookChanging(self, event):
@@ -120,7 +119,7 @@ class HtmlCtrl(CodeEditor.CodeCtrl):
 
 
     def SetViewDefaults(self):
-        CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Html", hasWordWrap = False, hasTabs = True)
+        CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Html", hasWordWrap = True, hasTabs = True)
 
 
     def GetFontAndColorFromConfig(self):
@@ -160,6 +159,10 @@ class HtmlOptionsPanel(STCTextEditor.TextOptionsPanel):
         STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "Html", label = "HTML", hasWordWrap = True, hasTabs = True)
 
 
+    def GetIcon(self):
+        return getHTMLIcon()
+
+
 HTMLKEYWORDS = [
         "A", "ABBR", "ACRONYM", "ADDRESS", "APPLET", "AREA", "B", "BASE", "BASEFONT", "BDO", "BIG", "BLOCKQUOTE",
         "BODY", "BR", "BUTTON", "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP", "DD", "DEL", "DFN", "DIR",
@@ -199,16 +202,26 @@ def getHTMLData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\xd3IDAT8\x8dcddbf\xa0\x040\xfe\xbf\xd1\xf3\x9f\x12\x03X\xfe}\xbeI\
-\x91\x0b\x98(\xd2=(\x0c`\x90W\xd2\xfc\x0f\x030\xb6\xbc\x92\xe6\x7f\x1d\x03\
-\xf3\xffN\xae\xde\xff\xff\xff\xff\xff\xdf\xc0\xd8\xfa\xff\xb5;O\xfe_\xbb\xf3\
-\xe4\xbf\x8e\x819\\\xcd\xd7_\xff\xff\xb3<|x\x9dAAY\x0b\xc5\xd0\x07w\xaf1\xd8\
-\xdbZ0\xec\xdd\xb5\x85\x81\x81\x81\x81\xe1\xdd\xf3\x1b\x0c\xab\x97\xcef\xe0`\
-ca\xf8\xfa\xf1\x19\\\x1d\x17+\x03\x03\x0b\x03\x03\x03Cqq>\xc3\xd3\x17o\x18V,\
-]\n\x97de\xe7\x81\xb3\x199\xc4\x18\x0e\x1d:\xc2 "*\xce\xf0\x8f\x11!\x8e\xd3\
-\x0b\xd8\xd8\xa7\x8e\xed\xf9\x7f\xf1\xcca\x14o\xca+i\xfeg\xfc{:\x95\xa2\x844\
-\xf0\xd1H\xb1\x01\x8c\x94\xe6F\x8a]\x00\x00YXz\xf0\x97\x87\'\x1a\x00\x00\x00\
-\x00IEND\xaeB`\x82' 
+\x00\x01\xeeIDAT8\x8d}\x92?h\x13a\x18\xc6\x7fw=\x8d\xb4\x98\xa9-uP\x1a\xc9p$\
+\xdc`\xd0C\x8d\x8b)\xc5!Z\x11\xcc\xd0A\xd0*\xa8\x93\x8b8\x18\x11\x14RD\x07\t\
+N\xfe\xc1\x0cRAtS\x1c,\xcd\x10\x8c\xd8S\xba$9"\x11L\r\x96\x92\xa4.\xda#i\xa5\
+\xe7p^r\x97?\xbe\xd3\xf1~\xdf\xf3{\x9f\xe7\xbbW\xf8T(\x998j\xb9V\x07 _\xde\
+\x0e\xc0\xad\x19U\xe0?%\x01\x0c\xef\x19owv\xf9\xff\x01\x96\x88N\x850\x92)\
+\xf3\xde\x95s}!Rgcx\xdb\x9f\xd6\xf7Z\x13"\xa7\xcf\x00\xf4\x85t\x01\xea\x9b\
+\xedV\xfa\xd53\x00\xb2z\xb3\x7f\x84\xe5Z\xbd\x15\xc1)>x,\x04\x84,\xc0\xed\'\
+\xfd\x01\x9dB\xdb:\xc0\x8a\xb1E\xa3\xb2A8\xe0!\x9cL\x99\x00\x83;\x83D\x0fxQ\
+\x15Y\xe8\x19\xc1\x16\xff\xfe\xf2\x11V\xaf\xb1\x03\x90G\xe0\xf5\xe7\n\xd5\
+\xf58\xb0\xc4\xfc"\xbcL\xbf7c\x91#\x82h\xff\xae\xb5\xa6{\xf2\xdc\x9bi\x17\
+\xf8\xc6\x85\xaf\x9c\xbf:\x03\xc0\xe8P\x82\x8bwN\xa2\xe5\x8a\xa6\xe8\x9cjW\
+\xf1\xed\x1c`M\x05P\x94\xa7=\xf3\xcf\xa6&\x91\x8c_\x85\xd6c\xad\x18[\xae\x0b\
+\'\xf6\xef\xe6h4\r\xc0\xcf\x1f\xd0\xa8l0:\x94 \x937\x00\xc8\xe4\r\xeb\r:\x85\
+\xe3J\x0cy\xe41\xde\xb1\xbb\xd4\xbf\x97\x11\x07|\x00T\xcbz\x97\x0b\xb1\x97\
+\xb5jY\xa71\xf6\x0e-Wb65\xc9\x8b\xf9\xe7,\xaenZg\xebq\xd7])\xab7\xc9\xea\xee\
+\x8c\xdaB\x90\xf8u\xbde\x13n\xb6\x96I[\x08\xa2N$(~\x8b#\xfb\x12H\x1f\x1e^\
+\xeaZQ-W4\x0f\x9f\xaa\x01~\x8eO\r\x92\xc9\x1b\xc8>KlC\xbc{!\x1c\xf0\xf4\x8e\
+\xa0*\xb2\x90|\xb4\xcf\xe1\xa0-v\xd6\xe5\xb3\xd3\x08\x828\xd0\x8b\x01X\xcb\
+\xa2\xe5J\xdc\x7f\xe0o\xc3\'\n\x84\x03\x1eb\x91C\xa8\x8a,\xfc\x05\xf6\x0e\
+\xbfa\x1f\xe7Z\xfb\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 
 def getHTMLBitmap():
index 4a9a5a45c8ef510a8d7dba953d78d82d3f6b1e86..a9c6dcc77bcc2cfa0822e52cdbca14d8bbeda292 100644 (file)
@@ -16,10 +16,33 @@ import wx.lib.pydocview
 import sys
 import wx.grid
 import os.path
-import activegrid.util
+import activegrid.util.sysutils as sysutilslib
+import activegrid.util.appdirs as appdirs
 
 _ = wx.GetTranslation
 ACTIVEGRID_BASE_IDE = False
+#----------------------------------------------------------------------------
+# Helper functions for command line args
+#----------------------------------------------------------------------------
+
+# Since Windows accept command line options with '/', but this character
+# is used to denote absolute path names on other platforms, we need to
+# conditionally handle '/' style arguments on Windows only.
+def printArg(argname):
+    output = "'-" + argname + "'"
+    if wx.Platform == "__WXMSW__":
+        output = output + " or '/" + argname + "'"
+        
+    return output
+        
+def isInArgs(argname, argv):
+    result = False
+    if ("-" + argname) in argv:
+        result = True
+    if wx.Platform == "__WXMSW__" and ("/" + argname) in argv:
+        result = True
+        
+    return result
 
 #----------------------------------------------------------------------------
 # Classes
@@ -34,38 +57,53 @@ class IDEApplication(wx.lib.pydocview.DocApp):
         global ACTIVEGRID_BASE_IDE
         
         args = sys.argv
-        if "-h" in args or "-help" in args or "/help" in args:
+                    
+        if "-h" in args or "-help" in args or "--help" in args\
+            or (wx.Platform == "__WXMSW__" and "/help" in args):
             print "Usage: ActiveGridAppBuilder.py [options] [filenames]\n"
-            print "    option '-multiple' or '/multiple' to allow multiple instances of application."
-            print "    option '-debug' or '/debug' for debug mode."
-            print "    option '-h' or '-help' or '/help' to show usage information for command."
-            print "    option '-baseide' or '/baseide' for base IDE mode."
+            # Mac doesn't really support multiple instances for GUI apps
+            # and since we haven't got time to test this thoroughly I'm 
+            # disabling it for now.
+            if wx.Platform != "__WXMAC__":
+                print "    option " + printArg("multiple") + " to allow multiple instances of application."
+            print "    option " + printArg("debug") + " for debug mode."
+            print "    option '-h' or " + printArg("help") + " to show usage information for command."
+            print "    option " + printArg("baseide") + " for base IDE mode."
             print "    [filenames] is an optional list of files you want to open when application starts."
             return False
-        elif "-dev" in args or "/dev" in args:
+        elif isInArgs("dev", args):
             self.SetAppName(_("ActiveGrid Application Builder Dev"))
             self.SetDebug(False)
-        elif "-debug" in args or "/debug" in args:
+        elif isInArgs("debug", args):
             self.SetAppName(_("ActiveGrid Application Builder Debug"))
             self.SetDebug(True)
             self.SetSingleInstance(False)
-        elif "-baseide" in args or "/baseide" in args:
+        elif isInArgs("baseide", args):
             self.SetAppName(_("ActiveGrid IDE"))
             ACTIVEGRID_BASE_IDE = True
         else:
             self.SetAppName(_("ActiveGrid Application Builder"))
             self.SetDebug(False)
-        if "-multiple" in args or "/multiple" in args:
+        if isInArgs("multiple", args) and wx.Platform != "__WXMAC__":
             self.SetSingleInstance(False)
+
+        if not ACTIVEGRID_BASE_IDE:
+            import CmdlineOptions
+            if isInArgs(CmdlineOptions.DEPLOY_TO_SERVE_PATH_ARG, args):
+                CmdlineOptions.enableDeployToServePath()
             
         if not wx.lib.pydocview.DocApp.OnInit(self):
             return False
 
-        self.ShowSplash(getSplashBitmap())
+        if not ACTIVEGRID_BASE_IDE:
+            self.ShowSplash(getSplashBitmap())
+        else:
+            self.ShowSplash(getIDESplashBitmap())
 
         import STCTextEditor
         import FindInDirService
         import MarkerService
+        import project as projectlib
         import ProjectEditor
         import PythonEditor
         import OutlineService
@@ -82,16 +120,31 @@ class IDEApplication(wx.lib.pydocview.DocApp):
         import AboutDialog
         import SVNService
         import ExtensionService
-                    
+                            
         if not ACTIVEGRID_BASE_IDE:
+            import activegrid.model.basedocmgr as basedocmgr
+            import UpdateService as updater
             import DataModelEditor
             import ProcessModelEditor
             import DeploymentService
             import WebServerService
-            import WebBrowserService
             import WelcomeService
             import ViewEditor
             import PropertyService
+            import WSDLEditor
+            import WsdlAgEditor
+            import XPathEditor
+            import ImportServiceWizard
+            import RoleEditor
+            import HelpService
+            import WebBrowserService
+            import SQLEditor
+        _EDIT_LAYOUTS = True
+        if not ACTIVEGRID_BASE_IDE:
+            import BPELEditor
+            if _EDIT_LAYOUTS:
+                import LayoutEditor
+                import SkinEditor
                         
 
         # This creates some pens and brushes that the OGL library uses.
@@ -131,7 +184,7 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 _("Deployment View"),
                 XmlEditor.XmlDocument,
                 XmlEditor.XmlView,
-                icon = getDPLIcon())
+                icon = DeploymentService.getDPLIcon())
             docManager.AssociateTemplate(dplTemplate)
 
         htmlTemplate = wx.lib.docview.DocTemplate(docManager,
@@ -148,15 +201,32 @@ class IDEApplication(wx.lib.pydocview.DocApp):
 
         imageTemplate = wx.lib.docview.DocTemplate(docManager,
                 _("Image"),
-                "*.gif;*.jpg;*.jpeg",
+                "*.bmp;*.ico;*.gif;*.jpg;*.jpeg;*.png",
                 _("Image"),
-                _(".gif"),
+                _(".png"),
                 _("Image Document"),
                 _("Image View"),
                 ImageEditor.ImageDocument,
                 ImageEditor.ImageView,
+                wx.lib.docview.TEMPLATE_NO_CREATE,
                 icon = ImageEditor.getImageIcon())
         docManager.AssociateTemplate(imageTemplate)
+        
+        if not ACTIVEGRID_BASE_IDE and _EDIT_LAYOUTS:
+            layoutTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("Layout"),
+                    "*.lyt",
+                    _("Layout"),
+                    _(".lyt"),
+                    _("Renderer Layouts Document"),
+                    _("Layout View"),
+                    # Fix the fonts for CDATA XmlEditor.XmlDocument,
+                    # XmlEditor.XmlView,
+                    LayoutEditor.LayoutEditorDocument,
+                    LayoutEditor.LayoutEditorView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = LayoutEditor.getLytIcon())
+            docManager.AssociateTemplate(layoutTemplate)
 
         perlTemplate = wx.lib.docview.DocTemplate(docManager,
                 _("Perl"),
@@ -231,6 +301,34 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 DataModelEditor.DataModelView,
                 icon = DataModelEditor.getDataModelIcon())
             docManager.AssociateTemplate(dataModelTemplate)
+            
+        if not ACTIVEGRID_BASE_IDE and _EDIT_LAYOUTS:
+            layoutTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("Skin"),
+                    "*.skn",
+                    _("Skin"),
+                    _(".skn"),
+                    _("Application Skin"),
+                    _("Skin View"),
+                    SkinEditor.SkinDocument,
+                    SkinEditor.SkinView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = getSkinIcon())
+            docManager.AssociateTemplate(layoutTemplate)
+
+        if not ACTIVEGRID_BASE_IDE:
+            identityTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("Identity"),
+                    "*.xacml",
+                    _("Identity"),
+                    _(".xacml"),
+                    _("Identity Configuration"),
+                    _("Identity View"),
+                    RoleEditor.RoleEditorDocument,
+                    RoleEditor.RoleEditorView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = XmlEditor.getXMLIcon())
+            docManager.AssociateTemplate(identityTemplate)
 
         textTemplate = wx.lib.docview.DocTemplate(docManager,
                 _("Text"),
@@ -244,6 +342,59 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 icon = STCTextEditor.getTextIcon())
         docManager.AssociateTemplate(textTemplate)
 
+        if not ACTIVEGRID_BASE_IDE:
+            sqlTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("SQL"),
+                    "*.sql",
+                    _("SQL"),
+                    _(".sql"),
+                    _("SQL Document"),
+                    _("SQL View"),
+                    SQLEditor.SQLDocument,
+                    SQLEditor.SQLView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = SQLEditor.getSQLIcon())
+            docManager.AssociateTemplate(sqlTemplate)
+
+
+            wsdlagTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("Service Reference"),
+                    "*.wsdlag",
+                    _("Project"),
+                    _(".wsdlag"),
+                    _("Service Reference Document"),
+                    _("Service Reference View"),
+                    WsdlAgEditor.WsdlAgDocument,
+                    WsdlAgEditor.WsdlAgView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = WSDLEditor.getWSDLIcon())
+            docManager.AssociateTemplate(wsdlagTemplate)
+
+            wsdlTemplate = WSDLEditor.WSDLTemplate(docManager,
+                    _("WSDL"),
+                    "*.wsdl",
+                    _("WSDL"),
+                    _(".wsdl"),
+                    _("WSDL Document"),
+                    _("WSDL View"),
+                    WSDLEditor.WSDLDocument,
+                    WSDLEditor.WSDLView,
+                    icon = WSDLEditor.getWSDLIcon())
+            docManager.AssociateTemplate(wsdlTemplate)
+
+            xformTemplate = wx.lib.docview.DocTemplate(docManager,
+                    _("XForm"),
+                    "*.xform",
+                    _("XForm"),
+                    _(".xform"),
+                    _("XForm Document"),
+                    _("XForm View"),
+                    ViewEditor.ViewEditorDocument,
+                    ViewEditor.ViewEditorView,
+                    wx.lib.docview.TEMPLATE_NO_CREATE,
+                    icon = ViewEditor.getXFORMIcon())
+            docManager.AssociateTemplate(xformTemplate)
+
         xmlTemplate = wx.lib.docview.DocTemplate(docManager,
                 _("XML"),
                 "*.xml",
@@ -256,7 +407,6 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 icon = XmlEditor.getXMLIcon())
         docManager.AssociateTemplate(xmlTemplate)
 
-
         if not ACTIVEGRID_BASE_IDE:
             viewTemplate = wx.lib.pydocview.ChildDocTemplate(docManager,
                 _("View"),
@@ -267,9 +417,21 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 _("ViewEditor View"),
                 ViewEditor.ViewEditorDocument,
                 ViewEditor.ViewEditorView,
-                icon = ProcessModelEditor.getProcessModelIcon())
+                icon = ProcessModelEditor.getXFORMIcon())
             docManager.AssociateTemplate(viewTemplate)
 
+            bpelTemplate = wx.lib.pydocview.ChildDocTemplate(docManager,
+                _("BPEL"),
+                "*.none",
+                _("BPEL"),
+                _(".bpel"),
+                _("BPELEditor Document"),
+                _("BPELEditor View"),
+                BPELEditor.BPELDocument,
+                BPELEditor.BPELView,
+                icon = ProcessModelEditor.getProcessModelIcon())
+            docManager.AssociateTemplate(bpelTemplate)
+
             dataModelChildTemplate = wx.lib.pydocview.ChildDocTemplate(docManager,
                 _("Schema"),
                 "*.none",
@@ -282,14 +444,13 @@ class IDEApplication(wx.lib.pydocview.DocApp):
                 icon = DataModelEditor.getDataModelIcon())
             docManager.AssociateTemplate(dataModelChildTemplate)
         
-
         textService             = self.InstallService(STCTextEditor.TextService())
         pythonService           = self.InstallService(PythonEditor.PythonService())
         perlService             = self.InstallService(PerlEditor.PerlService())
         phpService              = self.InstallService(PHPEditor.PHPService())
         if not ACTIVEGRID_BASE_IDE:
-            propertyService     = self.InstallService(PropertyService.PropertyService("Property", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_RIGHT))
-        projectService          = self.InstallService(ProjectEditor.ProjectService("Project", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_TOPLEFT))
+            propertyService     = self.InstallService(PropertyService.PropertyService("Properties", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_RIGHT))
+        projectService          = self.InstallService(ProjectEditor.ProjectService("Projects", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_TOPLEFT))
         findService             = self.InstallService(FindInDirService.FindInDirService())
         if not ACTIVEGRID_BASE_IDE:
             webServerService    = self.InstallService(WebServerService.WebServerService())
@@ -297,66 +458,134 @@ class IDEApplication(wx.lib.pydocview.DocApp):
         outlineService          = self.InstallService(OutlineService.OutlineService("Outline", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOMLEFT))
         filePropertiesService   = self.InstallService(wx.lib.pydocview.FilePropertiesService())
         markerService           = self.InstallService(MarkerService.MarkerService())
-        messageService          = self.InstallService(MessageService.MessageService("Message", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM))
+        messageService          = self.InstallService(MessageService.MessageService("Messages", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM))
         debuggerService         = self.InstallService(DebuggerService.DebuggerService("Debugger", embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM))
         if not ACTIVEGRID_BASE_IDE:
             processModelService = self.InstallService(ProcessModelEditor.ProcessModelService())
             viewEditorService   = self.InstallService(ViewEditor.ViewEditorService())
             deploymentService   = self.InstallService(DeploymentService.DeploymentService())
             dataModelService    = self.InstallService(DataModelEditor.DataModelService())
+            dataSourceService   = self.InstallService(DataModelEditor.DataSourceService())
+            wsdlService         = self.InstallService(WSDLEditor.WSDLService())
             welcomeService      = self.InstallService(WelcomeService.WelcomeService())
+        if not ACTIVEGRID_BASE_IDE and _EDIT_LAYOUTS:
+            layoutService       = self.InstallService(LayoutEditor.LayoutEditorService())
         extensionService        = self.InstallService(ExtensionService.ExtensionService())
         optionsService          = self.InstallService(wx.lib.pydocview.DocOptionsService(supportedModes=wx.lib.docview.DOC_MDI))
         aboutService            = self.InstallService(wx.lib.pydocview.AboutService(AboutDialog.AboutDialog))
         svnService              = self.InstallService(SVNService.SVNService())
+        if not ACTIVEGRID_BASE_IDE:
+            helpPath = os.path.join(sysutilslib.mainModuleDir, "activegrid", "tool", "data", "AGDeveloperGuideWebHelp", "AGDeveloperGuideWebHelp.hhp")
+            helpService             = self.InstallService(HelpService.HelpService(helpPath))
+        
 
         if not ACTIVEGRID_BASE_IDE:
             projectService.AddRunHandler(processModelService)
 
+        # order of these added determines display order of Options Panels
         optionsService.AddOptionsPanel(ProjectEditor.ProjectOptionsPanel)
+        optionsService.AddOptionsPanel(DebuggerService.DebuggerOptionsPanel)
         if not ACTIVEGRID_BASE_IDE:
             optionsService.AddOptionsPanel(WebServerService.WebServerOptionsPanel)
-            optionsService.AddOptionsPanel(DataModelEditor.SchemaOptionsPanel)
             optionsService.AddOptionsPanel(DataModelEditor.DataSourceOptionsPanel)
-        optionsService.AddOptionsPanel(DebuggerService.DebuggerOptionsPanel)
-        if not ACTIVEGRID_BASE_IDE:
+            optionsService.AddOptionsPanel(DataModelEditor.SchemaOptionsPanel)
             optionsService.AddOptionsPanel(WebBrowserService.WebBrowserOptionsPanel)
+            optionsService.AddOptionsPanel(ImportServiceWizard.ServiceOptionsPanel)
         optionsService.AddOptionsPanel(PythonEditor.PythonOptionsPanel)
-        optionsService.AddOptionsPanel(XmlEditor.XmlOptionsPanel)
-        optionsService.AddOptionsPanel(PerlEditor.PerlOptionsPanel)
         optionsService.AddOptionsPanel(PHPEditor.PHPOptionsPanel)
-        optionsService.AddOptionsPanel(STCTextEditor.TextOptionsPanel)
+        optionsService.AddOptionsPanel(PerlEditor.PerlOptionsPanel)
+        optionsService.AddOptionsPanel(XmlEditor.XmlOptionsPanel)
         optionsService.AddOptionsPanel(HtmlEditor.HtmlOptionsPanel)
+        optionsService.AddOptionsPanel(STCTextEditor.TextOptionsPanel)
         optionsService.AddOptionsPanel(SVNService.SVNOptionsPanel)
         optionsService.AddOptionsPanel(ExtensionService.ExtensionOptionsPanel)
 
         filePropertiesService.AddCustomEventHandler(projectService)
 
-        outlineService.AddTemplateForBackgroundHandler(pythonTemplate)
-        outlineService.AddTemplateForBackgroundHandler(phpTemplate)
-        outlineService.AddTemplateForBackgroundHandler(projectTemplate) # special case, don't clear outline if in project
+        outlineService.AddViewTypeForBackgroundHandler(PythonEditor.PythonView)
+        outlineService.AddViewTypeForBackgroundHandler(PHPEditor.PHPView)
+        outlineService.AddViewTypeForBackgroundHandler(ProjectEditor.ProjectView) # special case, don't clear outline if in project
+        outlineService.AddViewTypeForBackgroundHandler(MessageService.MessageView) # special case, don't clear outline if in message window
         if not ACTIVEGRID_BASE_IDE:
-            outlineService.AddTemplateForBackgroundHandler(dataModelTemplate)
-            outlineService.AddTemplateForBackgroundHandler(processModelTemplate)
+            outlineService.AddViewTypeForBackgroundHandler(DataModelEditor.DataModelView)
+            outlineService.AddViewTypeForBackgroundHandler(ProcessModelEditor.ProcessModelView)
+            outlineService.AddViewTypeForBackgroundHandler(PropertyService.PropertyView) # special case, don't clear outline if in property window
         outlineService.StartBackgroundTimer()
         
         if not ACTIVEGRID_BASE_IDE:
-            propertyService.AddTemplateForBackgroundHandler(dataModelTemplate)
-            propertyService.AddTemplateForBackgroundHandler(processModelTemplate)
-            propertyService.AddTemplateForBackgroundHandler(viewTemplate)
-            propertyService.AddTemplateForBackgroundHandler(dataModelChildTemplate)
+            propertyService.AddViewTypeForBackgroundHandler(DataModelEditor.DataModelView)
+            propertyService.AddViewTypeForBackgroundHandler(ProcessModelEditor.ProcessModelView)
+            propertyService.AddViewTypeForBackgroundHandler(ViewEditor.ViewEditorView)
+            propertyService.AddViewTypeForBackgroundHandler(BPELEditor.BPELView)
+            propertyService.AddViewTypeForBackgroundHandler(WSDLEditor.WSDLView)
             propertyService.StartBackgroundTimer()
+            
+            propertyService.AddCustomCellRenderers(DataModelEditor.GetCustomGridCellRendererDict())
+            propertyService.AddCustomCellRenderers(BPELEditor.GetCustomGridCellRendererDict())
+            propertyService.AddCustomCellRenderers(WsdlAgEditor.GetCustomGridCellRendererDict())
+            propertyService.AddCustomCellRenderers(XPathEditor.GetCustomGridCellRendererDict())
+            propertyService.AddCustomCellRenderers(ViewEditor.GetCustomGridCellRendererDict())
+            propertyService.AddCustomCellRenderers(WSDLEditor.GetCustomGridCellRendererDict())
+
+            propertyService.AddCustomCellEditors(DataModelEditor.GetCustomGridCellEditorDict())
+            propertyService.AddCustomCellEditors(BPELEditor.GetCustomGridCellEditorDict())
+            propertyService.AddCustomCellEditors(ViewEditor.GetCustomGridCellEditorDict())
+            propertyService.AddCustomCellEditors(WsdlAgEditor.GetCustomGridCellEditorDict())
+            propertyService.AddCustomCellEditors(XPathEditor.GetCustomGridCellEditorDict())
+            propertyService.AddCustomCellEditors(WSDLEditor.GetCustomGridCellEditorDict())
+        
+        if not ACTIVEGRID_BASE_IDE:
+            projectService.AddNameDefault(".bpel", projectService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".xsd", dataModelService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".xform", projectService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".wsdl", projectService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".wsdlag", projectService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".skn", projectService.GetDefaultNameCallback)
+            projectService.AddNameDefault(".xacml", projectService.GetDefaultNameCallback)
 
+            projectService.AddFileTypeDefault(".lyt", basedocmgr.FILE_TYPE_LAYOUT)
+            projectService.AddFileTypeDefault(".bpel", basedocmgr.FILE_TYPE_PROCESS)
+            projectService.AddFileTypeDefault(".xsd", basedocmgr.FILE_TYPE_SCHEMA)
+            projectService.AddFileTypeDefault(".wsdlag", basedocmgr.FILE_TYPE_SERVICE)
+            projectService.AddFileTypeDefault(".skn", basedocmgr.FILE_TYPE_SKIN)
+            projectService.AddFileTypeDefault(".xacml", basedocmgr.FILE_TYPE_IDENTITY)
+            projectService.AddFileTypeDefault(".css", basedocmgr.FILE_TYPE_STATIC)
+            projectService.AddFileTypeDefault(".js", basedocmgr.FILE_TYPE_STATIC)
+            projectService.AddFileTypeDefault(".gif", basedocmgr.FILE_TYPE_STATIC)
+            projectService.AddFileTypeDefault(".jpg", basedocmgr.FILE_TYPE_STATIC)
+            projectService.AddFileTypeDefault(".jpeg", basedocmgr.FILE_TYPE_STATIC)
+            # projectService.AddFileTypeDefault(".xform", basedocmgr.FILE_TYPE_XFORM)  # don't register xform as a default, must be explicitly added
+
+            projectService.AddLogicalViewFolderDefault(".wsdlag", _("Services"))
+            projectService.AddLogicalViewFolderDefault(".wsdl", _("Services"))
+            projectService.AddLogicalViewFolderDefault("wsdl.php", _("Services"))
+            projectService.AddLogicalViewFolderDefault("wsdl.py", _("Services"))
+            projectService.AddLogicalViewFolderDefault(".xsd", _("Schemas"))
+            projectService.AddLogicalViewFolderDefault("xsd.php", _("Schemas"))
+            projectService.AddLogicalViewFolderDefault("xsd.py", _("Schemas"))
+            projectService.AddLogicalViewFolderDefault(".bpel", _("Processes"))
+            projectService.AddLogicalViewFolderDefault(".xform", _("XForms"))
+            projectService.AddLogicalViewFolderDefault(".lyt", _("XForms/Skins_and_Layouts"))
+            projectService.AddLogicalViewFolderDefault(".skn", _("XForms/Skins_and_Layouts"))
+            projectService.AddLogicalViewFolderDefault(".xacml", _("Security"))
+            projectService.AddLogicalViewFolderDefault(".css", _("XForms/Static"))
+            projectService.AddLogicalViewFolderDefault(".js", _("XForms/Static"))
+        projectService.AddLogicalViewFolderDefault(".gif", _("Images"))
+        projectService.AddLogicalViewFolderDefault(".jpeg", _("Images"))
+        projectService.AddLogicalViewFolderDefault(".jpg", _("Images"))
+        projectService.AddLogicalViewFolderDefault(".py", None)
+    
+        
         self.SetDefaultIcon(getActiveGridIcon())
         if not ACTIVEGRID_BASE_IDE:
             embeddedWindows = wx.lib.pydocview.EMBEDDED_WINDOW_TOPLEFT | wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOMLEFT |wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM | wx.lib.pydocview.EMBEDDED_WINDOW_RIGHT
         else:
             embeddedWindows = wx.lib.pydocview.EMBEDDED_WINDOW_TOPLEFT | wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOMLEFT |wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM
         if self.GetUseTabbedMDI():
-            frame = IDEDocTabbedParentFrame(docManager, None, -1, wx.GetApp().GetAppName(), embeddedWindows=embeddedWindows)
+            self.frame = IDEDocTabbedParentFrame(docManager, None, -1, wx.GetApp().GetAppName(), embeddedWindows=embeddedWindows)
         else:
-            frame = IDEMDIParentFrame(docManager, None, -1, wx.GetApp().GetAppName(), embeddedWindows=embeddedWindows)
-        frame.Show(True)
+            self.frame = IDEMDIParentFrame(docManager, None, -1, wx.GetApp().GetAppName(), embeddedWindows=embeddedWindows)
+        self.frame.Show(True)
 
 
         wx.lib.pydocview.DocApp.CloseSplash(self)
@@ -365,19 +594,38 @@ class IDEApplication(wx.lib.pydocview.DocApp):
         if not projectService.OpenSavedProjects() and not docManager.GetDocuments() and self.IsSDI():  # Have to open something if it's SDI and there are no projects...
             projectTemplate.CreateDocument('', wx.lib.docview.DOC_NEW).OnNewDocument()
             
-        TIPS_FILE_PARTS = ("activegrid", "tool", "data", "tips.txt")
-        tips_path = activegrid.util.mainModuleDir
-        for segment in TIPS_FILE_PARTS:
-            tips_path = os.path.join(tips_path, segment)                
+        tips_path = os.path.join(sysutilslib.mainModuleDir, "activegrid", "tool", "data", "tips.txt")
+            
+        # wxBug: On Mac, having the updates fire while the tip dialog is at front
+        # for some reason messes up menu updates. This seems a low-level wxWidgets bug,
+        # so until I track this down, turn off UI updates while the tip dialog is showing.
+        #wx.UpdateUIEvent.SetUpdateInterval(-1)
+        #appUpdater = updater.AppUpdateService(self)
+        #appUpdater.RunUpdateIfNewer()
         if not ACTIVEGRID_BASE_IDE:
+            wx.UpdateUIEvent.SetUpdateInterval(-1)
+            appUpdater = updater.AppUpdateService(self)
+            appUpdater.RunUpdateIfNewer()
             if not welcomeService.RunWelcomeIfFirstTime():
-                if os.path.exists(tips_path):
-                    wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider(tips_path, 0))
+                if os.path.isfile(tips_path):
+                    self.ShowTip(docManager.FindSuitableParent(), wx.CreateFileTipProvider(tips_path, 0))
         else:
-            if os.path.exists(tips_path):
-                wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider(tips_path, 0))
+            if os.path.isfile(tips_path):
+                self.ShowTip(docManager.FindSuitableParent(), wx.CreateFileTipProvider(tips_path, 0))
+
+        wx.UpdateUIEvent.SetUpdateInterval(1000)  # Overhead of updating menus was too much.  Change to update every n milliseconds.
+
+        # we need this for a while due to the Mac 1.0 release which put things
+        # in ~/Documents/ActiveGrid Projects/demos.
+        # Now it should be ~/Documents/ActiveGrid Demos/ 
+        base_path = appdirs.documents_folder
+        if os.path.isdir(os.path.join(base_path, "ActiveGrid Projects", "demos")):
+            message = _("The location where demo files are stored has changed between the 1.0 and 1.1 release as a result of improved multi-user support across platforms. In order for ActiveGrid Application Builder to find these files, they need to be moved from '%s/ActiveGrid Projects/demos' to '%s/ActiveGrid Demos'. Click OK to move the files.") % (base_path, base_path)
+            wx.MessageBox(message, _("Demo Files Location Update"))
+            import shutil
+            shutil.copytree(os.path.join(base_path, "ActiveGrid Projects", "demos"), os.path.join(base_path, "ActiveGrid Demos"))
+            shutil.rmtree(os.path.join(base_path, "ActiveGrid Projects"))
 
-        wx.UpdateUIEvent.SetUpdateInterval(400)  # Overhead of updating menus was too much.  Change to update every 400 milliseconds.
         
         return True
 
@@ -408,1585 +656,2196 @@ import cStringIO
 
 def getSplashData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x90\x00\x00\x00\xb4\x08\x06\
-\x00\x00\x00\xba\xf5zX\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\
- \x00IDATx\x9c\xec\xbdy\xb8eU}\xf7\xf9Yk\xed\xf1\x0c\xf7\xd6\xbduk.f(\xa0\
-\x98\x14\x84B\xa4\x04J\x01\x99\x14\xa3\xa2\xf8\x9a\xe45\t&\xfd\xb6\x99\xda<\
-\x1d\xcd\x9b\xf4\x9bt\x92N:\x1d\x9f7\xe9\xc4\x98\x8ei}}\xd4\xa45J\x82\x88A\
-\x01E\x19\x15\x19\xa4(\xa6\x82\x9a\xe7\xba\xe3\x99\xf7\xb4V\xff\xb1\xf6>\xe7\
-\xdc[\x05\xea5\xa6$\xec\xcf\xf3\xc0\xbdu\xee\x9e\xce>\xfb\xac\xef\xfa\x8dK\
-\x18c\x0c%%%%%%?"\xf2X_@IIII\xc9+\x93R@JJJJJ\x16E) %%%%%\x8b\xa2\x14\x90\x92\
-\x92\x92\x92\x92EQ\nHIIII\xc9\xa2(\x05\xa4\xa4\xa4\xa4\xa4dQ\x94\x02RRRRR\
-\xb2(J\x01)))))Y\x14\xa5\x80\x94\x94\x94\x94\x94,\x8aR@JJJJJ\x16E) %%%%%\x8b\
-\xa2\x14\x90\x92\x92\x92\x92\x92EQ\nHIIII\xc9\xa2(\x05\xa4\xa4\xa4\xa4\xa4dQ\
-\x94\x02RRRRR\xb2(J\x01)))))Y\x14\xa5\x80\x94\x94\x94\x94\x94,\x8aR@JJJJJ\
-\x16E) %%%%%\x8b\xa2\x14\x90\x92\x92\x92\x92\x92EQ\nHIIII\xc9\xa2(\x05\xa4\
-\xa4\xa4\xa4\xa4dQ\x94\x02RRRRR\xb2(J\x01)))))Y\x14\xa5\x80\x94\x94\x94\x94\
-\x94,\x8aR@JJJJJ\x16E) %%%%%\x8b\xa2\x14\x90\x92\x92\x92\x92\x92EQ\nHIIII\
-\xc9\xa2(\x05\xa4\xa4\xa4\xa4\xa4dQ\x94\x02RRRRR\xb2(J\x01)))))Y\x14\xa5\x80\
-\x94\x94\x94\x94\x94,\x8aR@JJJJJ\x16E) %%%%%\x8b\xa2\x14\x90\x92\x92\x92\x92\
-\x92EQ\nHIIII\xc9\xa2(\x05\xa4\xa4\xa4\xa4\xa4dQ\x94\x02RRRRR\xb2(J\x01)))))\
-Y\x14\xa5\x80\x94\x94\x94\x94\x94,\x8aR@JJJJJ\x16E) %%%%%\x8b\xa2\x14\x90\
-\x92\x92\x92\x92\x92EQ\nHIIII\xc9\xa2(\x05\xa4\xa4\xa4\xa4\xa4dQ8\xc7\xfa\
-\x02~|\xf4\x82\x7f\x1f\xa9\x89\xe6%\xf6\x14\xe8\xa1\xfde\xff\xa7\xe9\xff\xfd\
-h\xc7\x1f>\x8f\x06\xa3\xf33\x88|\'9\xff\x1a\x86O.\x8er1bh\xef\xa3]\xe8\xd0\
-\xa1\x8b\x9f\xf3\x0f\xa9\xe7o\x93\x9f{\xe1i\xfb\xef\xa3\x7f\xbd\xdan+\x14\
-\xe5<\xa2\xa4\xa4d1\xbc\xc2\x05D\x03\xd9\xd0\xbf\x8bQT\xce\x1b@\x8f.\x01\x1a\
-\x89F\x90\xe4[8\x80\xca\x87V\x99\x1fE\xe7"c\xf2\x81W\xe6\xa7\x10\x0c\x04\xa4\
-7\xf47\x95\x1f\xe7(\x83\xb8\x19z\xa1\xf8]\x82\x11\xfd\xa1\xdcn\xa3\x17\xec\
-\x18\x1bP\x02\xdc\xc1\xf6Y\xbe\x99\x02\x94\xc9\xec\xf9S\x03B\x80\xf402\xbf\
-\xea\xfc\xa58\xea!M\x8a\xef\xbb`\x12\x88\xbb`R\xf0B\x90\xd5\\\xf4JJJJ~4^\xe1\
-\x02\x02GZ\x10G\xff+\x0c&\xea\x06\x9dK\x8d\x99\xb7E!\x1e\x83\t\xbd\\p\x04\rF\
-\r\r\xb8\x12Pv\x94F\x82p@(\x8e\xa6\x03B\xd8\x01\xdf\x1e<\xb5\xa3\xbb\x04\x10\
-\x98\x85\x1fC!0\x02p\x8a\x1d\x0bkIb\x10\xc4\x1aD\x92P\x95\x1a\xa4\x01\xe9\
-\x80\x14\xfd+7\x80\x16\xd0\x8b\x0c\xbe\x1b\xe0JC\x96F()\xadp\x98\xd4n+()))Y\
-\x14\xc2\x18\xf3R\x1e\x9eW\x00\x85\x05\xd2\x9f\xc3\xe7?\xe5Q\xbdA\xc5V:\xb7>\
-\xc0\xe4\xe3\xa7\x1d\xc4\x178w\x10\x14\x83\xfe\xb0\xabk0\xd8\x1b18\xee\xb0h\
-\x1c\xe9\xa5J\x11$H2\x04q\xfe\xd3Z=\x86\x00\xf0\x10(0\xf2\xc8\x83\x88\x14D\
-\x06:A\x9b\x0c-\x15\xca\xf1\xd1\xa8\\Wr\x0b\xc4@\x92d\xc4Z`\xa4\x8b\x138 \
-\x16\xc8\x9f\x01\x93\x81o\xffD\x1c\xc5T|\xaf\xd4\x90\x92\x92\x92E\xf1\x1fD@`\
-X<\xe0\xa8\xa1\x86\xa1}\x06q\x8bb\xf6\xbf\xd0b(\xf6Q\xc3/.\x08,\x18 \x16\xf3\
-\x9dh\xc3\xc8\xfc\xc8\x82\x0cA\x9a\x8b\x96\x15\x0f\x99\xcb\x94\xc8]g\xe0X\
-\xeb\xc6\xc8!\x0b$E\xf7ZH\xa9\xc1S\xa0\x1c\nW[f$i\xa2\xf1\xbc\xf9\xd7\xaf\
-\x99\xff\x0e5\xd0\xcb\xac\x05\xe4-0\xd2\x14\xe0\xf3\x1f\xc2\x0c-))9\x06\xbc\
-\xe2\xc7\x8e\x81\r1\x9f#f\xd5\x06\x10\xc3C\xab\xe5h\xc2Q\xec/\x8f&\x1eC\xaf\
-\t1\xdf\xdb\x04\xb9\xc5\xc2@\xceD.j\x12\xf7\x88\x13\xd9pJ\x04$C/h\xeb"\xcb\
-\x0f*\xab!\x85$X+\xc9\x8a\x8d\x11\x90\xba\x92F\n\x99\x04%\xf3\x98\xc8\xd0\
-\xf15\xd0\xee\xc0\xae\xdd\xfb\x99\x9d\x9de||\x9c5\xc7\xaf\xa0\xea\xdb3\xea\
-\x08\x96\xf9Gy\xf3%%%%?\x04\xafp\x01\xf9!\x82\xbf\x85p\x14\x83s\x7f\x14\xb7a\
-\xe8a\x97\x15\x0c\r\xfc/cy\x0c\x8eko\xa0\x18\xdaO\x15\x9b,\xf4e-\x10\x0fS\
-\x1cka\x00[H\x0c\x12-\xb0?q\x88Im\x8c\x1c\x85\x12\x02\x91_s"\xa0\xe3X1\x90@\
-\n\xec\xde\x9e\xf0\xec\x93\x8f\xb1\xe5\xc9\xc78\xb0w;\xad\xd9in|\xdb\r\xdcx\
-\xc3\xf5\x8c\xd6\x14\x196\xde\x1e\np\xfc2\x04RRR\xb2x^\xe1.\xac\xa1P\xc1\x11\
-\x7f\xd1\xf37\xe8\xbf6$ B\x91\xe6\xb1\x8f"\x99\xd5\n\xc7\xf0\xber\xfe\xc1\ry\
-L$\xff\xdbB\x91\xe8_\xd0 \xe8\xdd\xdfv\x90$6@$6\xce\x81\x83\xc1\xed\xe7\x84\
-\x15?\xa3\xa3\\y+\x82\x83\x07`\xdf\x1c\xdc\xff\xfc~\xf6\xce\xcc\xb0k\xeb\xb3\
-\xecyq\x0b\xf1\xec\x01V\x8ez\x9cw\xeaq\xac;n\x82[~\xfefFC\x17Gd\xa4q\x8f \
-\x08P\xd2^H\xb7\x17Q\t\xc2#\xee\\III\xc9\x0f\xc3\xabH@\x86\xc2\xc9\xc2\xe4\
-\x16\x84\xe8\x0b\x88\x8b\rvS\xa4\xc5\xc2PM\xc7p\xadD.\x0c\xda\xd8(\xbaq\x8e\
-\xe2\x03K\xed\x89\xc5P\xea\xafP \xed1\xb2<n"\xc1\x9e\xddh\x8cpH\xb0\xc2\x11c\
-\x85#\x05\x0e\'\xb0{_\xc6\x96\xe7^\xe0\x99g\xb7\xb1g\xf7af\'\xdb\xb4[1\xcdT\
-\xd1\xaa\xd4I\x84@\xc4\r\xbc\xa4\xc9qc>\x97_\xb0\x9ew]s)\xaf9\xb9\x86\x8f\
-\x8ds@b3\xafLF\xda\xed\xe2\xb8.x\xc5_\xcb4\xde\x92\x92\x92\x1f\x9dW\xb8\x0b\
-\xeb\x87p\xc1,(\xb0\xb3\x0c,\x88^\x1c\x13x\x1eQ\xd4$\xf0\xa4\xad\x93\xd0)h\r\
-N\x00\xd2JK\x91\xf8\xdb?\x8a\xd4\x90i;(K\x99\xa7\xf2\x0eek\x89<\x96!\xa0\xdd\
-\xe9\xe2WF\x98j\xb7\xa9U\xab\xc4@\xd7@M@\x15I\x16C36\x04u\xc1\xde\x06<\xf4\
-\xfd\x03\xdc\xfd\xc0w\xd9\xfc\xe2v\xa6\xda=R\xe1\x10\xa5\x828\x01GU\x08\xbd\
-\x11\x8c\xe3\xd0\xc9b\x94\xe3\x91\xc6M\\\x93q\xe6\xbaS\xf8O7l\xe2\xc6K\'\xa8\
-\x00\xbd.\xd4C\xec{21E\xb8\xdf\t\x8b\xa2\x92\xfcz\xcb:\x90\x92\x92\x92E\xf0\
-\x8a\xb7@^\x9a\x81\xc5\xa15h\xad)\xde\xaa\xe38\x08!l\x16\x15\xa0\xd0d\xd1\
-\x1c\xbe/@\'\xd6\n\xc9\x0c\xb8!h\x8fD\x06h!\x07\xb2c\x0c\x0e\x19jH\xbdL?\xe7\
-\xca\xa6\x10\xa7\xd8\xe1:\xce\x7f\x17C\xaf\x1d\xea\xc1\xae\xdd-\xb6~\xffQ\
-\xe4\xe4n~\xedW\xde\xd7\xb7:\xa6Rx\xef\x07\xfe\x8a]\xd3\x1d2\xbf\xcaL\x14\
-\x93\xe1\xe2\x04!aPG\'\x82n+B\x18\x87Z(\xe9\xb5\xf7P\x0fR\xdet\xe9E\xfc\xd2\
-\xfb\xae\xe0\x8c\x89\xbc,\xa4\x0b\x13\x95\xc2\xc2\xc9\xad\x0fL^\x08S\xd4\x7f\
-8 r1))))\xf9\x11y\xc5[ /\xe5\xc32C\x83\xa2\x90\xd8\x02:\x86R\\\x8d\xd5\x08$\
-\xc4FS\xf1\x03\xfa\x11\x07Q\xb4%q\x88\xf0\xc8\x84\xec\xc7$\x00\x94\x10d\xf9\
-\xadK\x19\x88D\x11\x02\xc9\x18\xb8\xa2\x9e{\x11\xb6\xef\x99d\xcb\xb3\xdb\xd9\
-\xbe\xeb\x00\xcfo\xdd\x81\xf4\x02\xb4QLm\x7f\x92\x8f\xfd\xce\xcf\xd2\xe8B#\
-\x86\xa6\x86\xcf\xfc\xf3\x93\xec\x9a\x8c\xf0\x96\x1e\xcf\\l\xa8T|zi\x861\x82\
-\x04\x07%\xc1\xf5\r"\x13\xf8t9\xf7\xf8\x1a7]\xf7\x06\xder\xe5\xd9\x8c{\xf6\
-\x03\xf5\x04\xb8\x15Hz=\x1c?\xaf\x8c\x97\x1eE\xa8?\x13\x83:\x99~\xd0\xbf\xa4\
-\xa4\xa4\xe4G\xe4\x95/ \x05\xf3\xfaAY46P\x8cP(\xe5\xe0\x0c\x87+\xc4\xa0-H\
-\x92*B\x17\x84N\x07{*\x87,\xf3I\x95C\x04\xf4\xb0\xa2P\x9c\xc6\xcf\x7f6\x80\
-\x833\xb0ko\x8fm;\xf7\xb2}\xd7A^\xdc\xbd\x8f\x9d{\x0e39\xd3B\xb8\x01q*P\xd2g\
-dl\x9cf\xb6\x84\x8a\xa8\x10\xc5\t\xe7m\xd8\xc4u\xd7_\x80\x0b\xd4Bxq\x1b\xdc\
-\xfa\x95\xbb\xc0\xad\xd3M\x14\x8d\xb9\x16T\x05(\x05YD\xda\x9eeI%\xe4\xac\xd3\
-\x8e\xe7\xac\xd3O\xe7\xd4e\x01W\x9f7\xcaI\x13P\xf5\xec\xf5$\xbd\x0ccRT\xe8\
-\xa2\xfc\xfc\xe3\xcd+\xe53d\xbf\xec\xf2\x88b\xc9\x92\x92\x92\x92\x1f\x91\xff\
-8\x02\x02G\x15\x91 \xf0\xfb\xe5\x86QF?\xdfV\xe6\x9b\xa7\x00\xae\x9d\xdd\xbb\
-\xa2B\xd6i\xe0T\xaa }:\x99\x15\x8e\x060\x1d\xc3T\x03\x0e\x1c\x80m/nc\xc7\xb3\
-[\xd8\xb3\x7f\x86\xad;{t\xb3\x80\xc4\x80Q.\xd2\xaf\xa0\x9d\x90X\x1fO\x1c\xa4\
-\x04\x95\x90\xa8=\x87\x14\x9a\xac\x97\x11e1Q+"\xf0$7\xff\xdc{hjp$\xbc\xb0\
-\x1b\xfe\xf0O\xfeo\x12#\xe8\xf4b2\x13\xb3t\xf9\nzI\xc4\xd8h\xc8\x05\xe7\x9d\
-\xceY\xa7\x1dG\xe7\xd0\x1e\x0e\xecz\x81ucmnz\xf3\n\xd6\xb8\xe0kC\xdc\xe9\xe1\
-\x85>\x9eo\x88\xda=\xd2n\x82\x13\x04\xf9\xfd\x18\x88\xc7p\xc5\xfcK\xb5\x89,)\
-))\xf9ax\xe5\x0b\xc8Q\\X\x0b\x07\xc9BW\xa4\x9a_\x9d\xddK\xc0\r \xd107\xabY3\
-\xae\x88M\x05\xc7\xf8\xc4\x02\x9a\t\xfc\xf1_\xdc\xce\x8b\x87;<\xb3{\x9a\xfd3\
--\xb4\xd6T<\x97\x9a\xaf\x902 \xf5\x97\x93j\x9fD\x0bR\xa1\xc8\xa4\x836\x8e=\
-\xabL\xe9\xa6\x80\xe3\xa3<\x85\xa7b*^\x05\x99v8s\xdd\x89lz\xad\x15\xb2\x0c\
-\xb8\xe3\xee\xbb\xd8\xfc\xcc\xb3T&N#\x0cC&\xd6\xaee\xed)\xa7p\xc9\xeb\x8fc\
-\xf2`\x87\xc7\x1e\xfc:\x9f\xfb\xfa\xa7\xd9t\xd1z~\xfb\x97\xde\xcd\tc\xe0\x01\
-\xa6\x17\x83/\xf1B\x97,\xea\xa2\x94\xc2\xafV\x01\xe8v;\x84\x95Z\xdf\x9dWt\
-\xf6R\x1cUkKJJJ~$^\xf9A\xf4b\x1a=\xd4\xf2|X8\xba)6\xe1H\x16\x8d\x14\xad`4\
-\x9a\xd0\xec\xc0\xf7\xb6\xec \xea\xf6h\x1f\xda\xce\x07\x7f\xf1\x1ad\x1e\xf1N\
-\x14\xecm\xc0\xe5\xef\xf80mo\x9c4X\x86SYB\x10\xd8F\x84I\xa7A\xd4m"=\x97TJ2\\\
-\x12Y\x04\xa5\xddAf\x93\xd0H\x99\xa1\x1b\xb3\xf8D\xb8i\x9b\x89\x11\x8f\xdf\
-\xf8\x95[\xb8\xfeR\x9f\n\xf0\x9d\xc7\x9e\xe3\x0f\xfe\xe4oX~\xdc\xb9\x9cy\xfe\
-\x9b8\xfbu\'\xf2\xdcvx\xfc\x89-<\xf1\xc4\x83,\x1f\x91l\xba\xf8\x0c\xdey\xf5\
-\x06\xceY\xeb z]B\xd3!\x0c\x03t\xe6apPC\x11\xfd,3\x08!\x8a\xac\xe1\x057\xeah\
-\xed\xef\xcb zII\xc9\x8f\x8e3\xbf\xf0\xad\x98\xd0\x0f\x05\xa0\x8b\x17E\xca\
-\xbc\xe9\xbe\xf91\x8c\x17\xa1\xed\x88>8a^+q\xb4A\xce\xe9oV\xb8\xa2\xcc\xd0\
-\xbf\xa5\x1cl\xbd\xb0\x17T\x06\xbc\xb0/\xe2\xc0\xe4\x0c/\xee\xd8\xcb\xf6\x1d\
-{\xd8\xb7\xff\x10\x87\xa7\xe6h4\xda\xb4\xba\t\xc2\xa9\x90%1\xa67\xcb;\xdf{\r\
-\xabB\xfa\x95\xde\xc6\x85`l%]1J\xa4}:\x9d\x84F\xc7v\xbfU\x08\x94\x1b \x84\
-\xc6\x08\x8d\x91\x9a\xdc!f\x7f\x8a|\x9e\x9f\xf6\x18\x19\xa9\xd2m\xb6\x98\xa8\
-(\xc2Xs\xea\xf2\x1a\xef\xbc\xd4\xefg\x815\xc5\x18\x7f\xf8\xd1\xbf\xe4\x89\'w\
-\xf1\xf0\xf7\x9e\xe1K\xb7}\x99V\xb3\xc3\xca\x95c\xfc\xec\xf5o\xe0\xcd\x97\
-\x9e\xcd\xf9\'A\x05\xf00\x84\x81\xce[\xed\xb6\x90\xc122\xc4\xbc\x8az\xa9\x06\
-\x1dy\xe7Y\x19F\xd3\xef\x19o\xf8\xb7I\xdf\x9dW\xa5\xaf\x87\xfe)\x07\xe7>Z%\
-\xffK\xbf\xfc\xf2\xa7\xe8\xfff?\xf5l\xc8\xba\x1at\x0f\xc8?\xfd\xa2\x0e\xc7\
-\xb65\x063h\x80Y<%\xa2\x14\xd0W//\xd5\xc3\xe8\xa8,\xec\xdam\x9f-\xf5*\x7fv\
-\x1c2\xec\x17M\xd9~L\x19\n\x8d\xec\x7f!\x15\xa0\x93\x04\xe9Et\x1b\x87\tG\xc6\
-\xec\xc8\x9ah\x90\x1eI\xd4\xc5u]prA)>\x94,\xb1\xf9\xb3\xae;\xff\x8c\xc6\x0c\
-\x84\xc2\x00ZB\xaa\xc1DPq\xe9E-\x82\xc0\xa7\x18\x0e\xa3^\x8c\xefW\x98\x9eM\
-\xa9\x8e\xd9\x80v\'\xffk\x0c$\x06\x0eO\xc2\xae\xbd\x9a\xdd{\xf6\xb1\xe7\xc0A\
-v\xee\xdd\xcb\xae\xbd\x87889C\xa6\\2\\2\xe1a\x8cK&\x0245\x1bX\x0f\xc11\x19A\
-\x00=g\x96]\x1dX\x16\x82\x9b\xd9\xb8u\xbb\x03M\x1d\xd3s\x05\xd2Ud\xe4\xef[\
-\x1b2%p\xbd:\x15\x15\xd0\xea\xf4H\xa3\x0c<\xc7V$\x9a\x14H\x11\xae\xa1VQ\xcc\
-\xee\xdc\xcc\xa9k\x96\xe1vg\x18\xa5\xcb\xef\xfe\xe2\x7faI\n-\x03\x7f\xff\xd5\
-\x83\xdc\xfd\xc8\xf7y\xfe\xe9\xa7qH\x08]\xcd\xea1\x9f\xab\xdf~\x05\xef\xb8v\
-\x03k\x96XW\x95\x87=\xb42\x06\x8cg\x05\xdc\xb5\xa6\x95\x14\xc3\xbd\xb7^\x8a\
-\xe1\x8az\xf5\x12\xf51?"f\xe8?i\x07d\x8d\xc1 \xf2\xeb\x91\x83uP\x86\xd5L\x80\
-A\xf7\x07\x7f\xb0M+\x8f\xb8\xf6\x05\xd6\xe4\xbc\xf7hl{\x9a\x1e\x1a\x81\x83\
-\x07\x90\x80\xa3\xb1\xff\x13]\x90\x89\x15\xf2\xcc!\x8a\x03\x1c\xcf\x01U\xc4\
-\xbe"$).a."%\xafJ\xb4\x86$\xb5\xfem\xd7\xa6\x93$\xa9F)\x89\xe8\xafv\x90?\xdb\
-&\xa3\x1b\xf5\xf0\x83\x80\x0cM;\xee2\xe6-\xf9\x89>?i\x9a\xe28\x0eY\x96\x91$\
-\tA\x10\x10E\x11RJ\\\xd7%\x8ec<\xcf#\xcb2\x94\xb2\xd7_\xbc\x06\x90e\x19q\x1c\
-\x13\x86Gv\x9c0\xc6`\x8c\xf5V\x00\x08!\xfa\xfb\xce\xcd\xcd1::\xfa\x03\xaf\
-\xcf\x19|\xb15f\xa8\xf5F\xe1+\xef\xb44\xa1\x07\x18M8R\x032\xb2^\x82TKA\x83\
-\x1b\x86\xfd\xb6\x1dY\x9c\xa2\xb5FJ\x89t\x1c\xc4B\xf1\xa08\x97\xc2\x18;\xce&\
-\x1d\xf0\xab\x928\x0bQ\x022\xe5\x93"\xf3\xcc \x07\'pi%\xe0\x8e9l\xd9\x07\xdf\
-}\xfa /\xee;\xc4\xa1\xd9\x19\x9ex\xfaY\xa6g\xbaD\xa9!N\r\x08\x17\xe9\x06h\
-\xe9\x12e\x1eQ\xb6\x1c\xd7\xab\xa2q0\xb90\xdaF\x85y\x9bC\x93\xe1\xeb\x88Tdte\
-\x85\xc9\xc8Z-\x1e1\x12\xcf\xc6L\x94$\xca\x0c&\x8e\xc1s\x90\x95\x11\xa4\x94\
-\x88\xb4C\x1a\xa7L\xcf\xb5\x11\xca\xc3\x0b}\x942\xa4Y\x97$\x9a\x83\xb4\x8d$\
-\xc2\t$\xe7\x9d\xb6\x86\xb3N>\x8ek/\xdb\xc8\xe5\xaf\r\xf1\xb0\xedH\xfe\xe8\
-\xbf\xdf\xc1?=\xf0<T\xc7\x10B\x128\x92\xcb_\x7f\x1e?\xf7\xce\xabX\xbf\x96~\
-\x15\xb9\xed\xbf\x9b\x0e\r\xd8\xca\x8a\xb8\x18\xba\xa5\xbc\x9cx\x14\xfc\x04\
-\x1et3\xffW;\xe0\xdb.^\xba\xff9\xce\xdf\xce\xb6\x99\xb7\x93\x88b\xb2\xf2R\
-\x0c\xb7p)\xc4d8k\xcc\xc9\xe7@:\xd7ok\xa2\xe6W\xa2\xf3\x15\xb8\x1c\x1f/\xcc\
-\xb7\xcb\x8d_\x07\x9d\xcb\\\xc9\xab\x9e\xf9\xbe^\x1cGZ]\x89\x13L\x96b\xb2\
-\x84\xb0VA\nI%\xa8\xd0\xca\xba\xb8\xca\xa7\xe2U\x8fx\x1e\xff\xad)DA)E\x1c\
-\xc7\x00\xf8\xbe\xed-\x11EQ_(\xba\xdd.\xb5Z-\x7f;\x92^/o[\xa4\x14a\x18\xd2h4\
-\x08\x82\xa0\xbf}!L\x85x\x14\xafy\x9e\x871\xe6\x87\x12\x0f\x00g\xd0\xd0o\xd0\
-\xaa\xa3\xdf\xbd\xc9@\xa5Z\xfc-&\x8b5\xcau\x91a\x1dm$F@\xa3\xd1\xc4q5^\xe0\
-\xe3\xf8\x1e\x06\xd9\xaf\x89H\xb077\xc3.\xac\xa7\x8d]\xf3Hb\xdbyh\x17\xc4\
-\x12\xbbm[\x83\xe9\xc2X\x18\x92\x01\x8a\x848\x81\'\x9f\xdd\xc9\x7f\xfd\xa3\
-\xbffF\x8f\xd3\xa2\xc6d;\xc6\r+\x8c\x8c\x06t\xa3\x8cXUH\x95\xc4\xb8.F\xfa\
-\x08\xe9cd\x00\xda\xc1\t\x04I\x927[\x17\x19\x92\x14a\x12{\x85"C\x88\x14#3\
-\x12R\xb4\xd3e\xba]\x18E\x11\xd6Y\x04&I\xa9U\xab\x04\xfe(q\xe6\xd0h\xa7\xa4Q\
-\xd7\xe65\xb9\x12\xaaU\xbc\xc0\xc1I;Ds\x87P\xf1\x1c\xeb\x96\xd7\xb9\xe8\xdcs\
-8\xe3\x94\xe38w\xfdi\x9ct\x12|\xff\xa9\x88\xa7\x9e\xdbJm\xf9\xd9\xacY\x03\
-\x1f\xfb\xdc3|\xe5\xe1-(\x932.`\xd3\x9b^\xcf{\xdeq1\xa7\xac\xc8\x17\x1f\xd4\
-\xb6\xfd\xfa\xc2\x0e\xbb\x14"\xf8\xd32\xf6\xbd\xacz\r\xf7\x02\x1b\xden\x90\
-\xe2\xa0\nk\xb7\xf8{\xbf\x8d\x0c}\xeb\xea\xa5:&\x83\xb5\xcc\xd2,\xc5U\xb2o\
-\x95\x90\xa4\x18\xed"\xfc\x00\x84\xcd>\xb3\xe9\xda \x94\xc6\xef\xcb\x96\xf9\
-\xa9\xb9\x8d%\xc7\x06\x93&\x08\xafX\x14\x0e\x92,\xc5Q\xb6\xdeJ\xf9\n2\x05\
-\xb8\x10%\xf4\x92\x087\xacPqjt\xb4\x9d,\xbb\xceO\xd6z\x15Bp\xf8\xf0a\x96-[\
-\xd6\xb7"\x92$\xc1u]\x84\x10}\x01\xa8T*dYF\xaf\xd7\xa3Z\xad\xe2\xe4\x1e\xa1\
-\xe9\xe9i\xc6\xc7\xc7\x19\x19\x19\xe9\x1f\xb3\xd3\xe9\xa0\x94\xc2q\x9c\xbe\
-\x90t\xbb\xddy\xc7\xf7<\x8fv\xbbM5O\xc8y)\x9c\x85\xdf\xa0\xc2d\x93F\x0e\xc5?\
-\x00m\x90^H\x8cC\x86\x87\x16\xb0\xe7 \xac]Q\x07l\t^\x9bAzl\x11\x11\xe8\xbb \
-\x04\xa4\x02Z\x1a\xf6\x1d\xd4\xec\xdc\xb1\x8b}\x87\xdalyf\x9a\xfd\x07&\t\x02\
-M=\xe8\xf2\xd1\xdf\x7f\x1fu \xc4\xc5s\xe1\xacsN`\xc9\xda\xd3y\xe0\xbb\xbb\
-\xa8\x1dw\x12\xd1\xa8C,\x04\xed\xb9Y\x94\xf2\x11^\x05-=\x8cV$FBZ\xac\xa7\x91\
-w\x9br<{%\xc6\xdaW\xca\xd8\xf59\x94\xb6"b\x84&5\x1a\x1c\xc5\xcc\\\x07M\xc5V\
-\xac\x0bH\xa2\x8c\xc0\xf3\xe8F]\xa6\xe6\xba\xe8\xd4\xc5\rjT\xaa!\xbeL\xc9t\
-\x8f\xcck\xd3j\xce\xe0\xbb\x8a+/}-7^}!\xebO\x81\xc3\xbb\xe1\xe9\'\xb7\xf1w\
-\x1f\xff\x0c\xbb\xf6\xec&\x13\x92\x8f\x7f\xea\xc3T\xaa\xf0\x7f}\xfc\xbb\xdcv\
-\xc7\xbf2Q\xafp\xd3\x9b\xaf\xe0\xdd\xd7\xbc\x9e\x93V\xdb{\x17u\xa1\x12\xda\
-\xd4\xde\xc9\x83\xd3\xac^1N\xbf\xa9#\xcc\x8f[\xfc\xb4\x8c~\xf9u\xe8#Vp\\\xb0\
-M_<t\xff\xa5y\xb1\x8b~k\x15\xac\x99 m\x8cb\xf8\xa8\xf6\xf9\xd2\x88\xfc>\x08\
-\x9d\xe1\nc]\xa0\xe8\xdc\x15\x11\xda\x02Q\x01\x9d\xc4\xbe$\xb0\x8b6\xaa<\xef\
-M H\xa3\x0c\xc7/\xddW\xafZ\x04\x08\xdf\xcd\xc7(Id4Ij M\t]\x07OH\x9a\xb3s\xd4\
-\x97\x8c\x82\xe3\x10\xb8a\xdf\xad\x9a\xc5\x82J\x10\xfc\xc4\x9d\x9fi\x9a\xf2\
-\xe7\x7f\xfe\xe7\x1c8p\x808\x8e\xc9\xb2\x8c \x08\xf8\xec\xe7\xfeAdib\x80y\
-\xee\xa6j\xb5\x8a1\x86V\xabE\xbd^g||\xbc\x7f\xac\xc2\x82q\x1c\x07\xcf\xf3\
-\x88\xa2\xa8o\xcd\x14\x96I\xbb\xdd&\x08\x82\xfe\xb1~\x10N\xf1\xc5\x1e8\x1d\
-\x86\x83\x8bX\x15p\x01\xe5\xda\xf5%\xb4DJ+\x18#+`*\xb3\x16\xa0,n,0\xd5\x86\
-\xfd\x87aj6f\xcb\xb3/\xb0\xff\xf0\x14/\xee\xde\xcb\xbe\x03\x87h\xb4\xbbdF\
-\x80Ph\x110\xb6j\x1d;wL3R5\xf8\xd9$\x0f|\x7f\x9a\xab\xce\x1b\'5v5\xd7\xb96l\
-\xba\xfa\x06\xee\xdd\xfdU\xba\xee8Y"\xf0Fj\xc43\x99m\x0c\xd8vA\x056\x06\xe3\
-\xc8|\xda.\xc0q\xed\x01:]{U\x99\xf5]\x98\xcc\xb1\x83\x93q\x11Z\x83\x12\x98,\
-\xc2\xf5\x04\xb3\xd3\x11\x92\n\xca\x04\xb6\xb1a/\xa2\xd7\x9e#\x18\x19c\xacZ!\
-\x89\r\xdd\xa4I\x96\xcc\xa0IpE\x93k/y-\x97]\xf16.:\xcb\xa3\x0b\xdc\xf3m\xf8\
-\xbd?{\x98m\xdb\xf7\x11G)q\x94\xa1\x98\xe0\xa3\x7f\xf6\x01\x96V\xe1\xd3\xff\
-\xf88\xdf\xfc\xe2\xdf\xf0\xc1\xff\xf43\xdc\xfc\xf6\xb7r\xca\x98\xbd<\'\xb3.\
-\xd8\xba\x07q3\xc1\xf5]V/\x1b\x1f\xca2+\x04d~\r\xc7\xcb\xc7=\xfe\x1d\xc8O>p_\
-\r\x0f\xf7\x85\x180\xd8H\x0c\x0b\x8c\xb1\r,\xe7\x91o\\$Z\x88\x81\x88\xf4\x8f\
-\xc9`^c\x1bZZ\xf3\xd5\x08\x83pF\x88$\xb43[\xb7S_28\xbd\x03xh\xdc,\xa6"}\x1c\
-\xd7\x1b\xa4\xe7\x95\xbc\xea\xb0\xe3\x95\xa4\xa732\x01\x8e\x90\xc8|BQ<\x95\
-\xb5\xf1Q0\xd0m\xf6\x08\xabA?\xef^e\xee\xbfK\x01\xae\xe38\xec\xdc\xb9\x93,\
-\xcb\x98\x98\x98 \xcb2\xe6\xe6\xe6\xf8\xfa\xd7\xee4\x85\xf5Q\x88\xc7\xa7?\
-\xfdi\x1c\xc7\xa1^\xaf\x13E\x11B\x08\x9a\xcd&Zkn\xba\xe9&\xda\xed6\x8f>\xfa(\
-\xadV\x8b+\xae\xb8\x82J\xa5\xd2\x17\x90$I\xb8\xfb\xee\xbb\x99\x9a\x9a\xe2\
-\xf4\xd3O\xe7\xfc\xf3\xcf\x9f\xe7\xdez\xc9\xeb+\xbe\\z\xe8[$0\x83Q*\x8f\x8d\
-\xa7\x1a\x12\xa9\x90\xd2\xa1\x0b<\xb37_\x7fbw\xcc\xd4\xe44\xbb\xf7\xeec\xd7\
-\xbe\xfd\x1c\x98\x9ca\xae\xd1\xa6\xddK\xe9\xa5\x1a\xbc\x80\xd4HR\x14F-E\x86>\
-\xda\x08\xe2,#N\xa1\xb1k\x12*Khdm\xaa\xa2\xca\xe7\xff\xe5\xeb\xbc\xf9\xbc\
-\xf7\xe0\n{\xeaeU\xd8x\xf1\nV\xfe\xcbR^\xdc;\x0b\xee\x08q7\x86\x14\xc2\xd11Z\
-]\x89\x11y\xddE\xa6!\xedYG\xb70\xd6,\xf5\xf2\x8f9\x1f\xb8\xb4R\xc4\xdaFR\x95\
-\xd1\xf8\x08D\xa2\xf1|\x87\xd9\xc9&\x821$\xae]L\xca\x18B\xdf\xa3\x95\xf6\x98\
-m\xb70\xc6\xb0z\xcdq\\\xfa\x86\r\\y\xd9j\xd6\xaf\xb5\x87\xfe\xce\xa33\xfc\
-\xee\x9f\xde\xc5\x13Omc\xb6\xa9\xd0\xaa\x02\xb2\x86\x14\x8aZ})\xb7\xfc\xdc\r\
-\x9c\xbf\x0e\xfe\xea\xaf\xbf\xc5\xcc\xbe\xa7\xb8\xe7\xf3\x7f\xcb\x8a1\x97\
-\x11\xa5\x11\xda\xa0\x93\x04%$\xae\xb4\xe5\xe4^\xc5\x9d\xaf\x12/\x91\xa2|\
-\xcc\x19\x16\x87y\x14\x99Qz(\xf3kx\xa7\xe1\x9f\xf9\xb3\xd6\x8fX\x8a\xc11\x86\
-2\xa6\x16\x9e\xaa\xef{6\xda\xc6<\x1c\x0f!\x14=\\\x9e\xdb\x9fr\xcfC\xbby\xe4\
-\xc9]\xdcu\xdf\xc3,\x19\xf79\xe7\xec\x15\\{\xf99\\s\xe9\xd9L\xa8*\x18h\xcd6\
-\xa8\x8d\x8dP\xf2\xeaD\x03\xed$F\xbav\xf6\xdd\x04\xb6\xee\xea\xb2s\xc7~z\xed\
-\x0e\x81\xebp\xf1k\xce`\xed\x04\xb8\xa3\x01\x8d\x86\xc1u\x04ah\x9b\x94\xf6:\
-\x10\x84\xfc\xc4\' Zk\x94R4\x1a\r\xdb\xc3o(\xf0]\xb8\x9eZ\xad\x16\xdf\xfe\
-\xf6\xb71\xc6P\xab\xd5\xd8\xb3g\x0fccc(\xa5\xa8\xd7\xeb\xfd\xed\xbf\xf0\x85/\
-p\xe8\xd0!\x1a\x8d\x06\xb7\xdcr\x0b\xc6\x18\x92$a\xd7\xae]|\xf6\xb3\x9f%\xcb\
-2\xf6\xee\xdd\xcb\x05\x17\\@\xb3\xd9\xa4^\xaf\xbf\xec\xb59z\xc8\x02Y\x98"\t\
-\xd8L\xd48A\x84.\x1aI\x0c\xec\x98\x83\xdf\xfe\xfd\xbfb\xcf\xc1.\xbd\xcc\x03\
-\xe1!\xa4\x83\x91\n-\x15\x86\x80\xc4HR#\xf1e\x8d\xc4@\xa2\x05:\x05R\'\xf7\
-\xe1+p5x=F\xc7\xaat;\x92\x8a\xe3\xf2\xfd\xa7_\xe0\xee\xfb\xb7\xf2\x9eKO\xc31\
-)J8\xac\xf4\xe0\xaa\rg\xf0\xd9\xaf?NV\r\xe9D)\xc4\x11\xdd\xa8\x83q\xbc|\xb6\
-\xaa\xed\x84\xd7h\xdb\x9a\xdd\x08Df\xd0\xbd\xd4\xb6O\x9727\x95d\xde\xbb]\x90\
-\xa5\x06\xa1\r2MQ\x99\xa215\x83\xe2x\x14\x02#\xc0w=\x82 \xe0\xe43\xcf\xe5\
-\x92\xd7o`\xc3\xc5\x0e\xcb+\xd0\x05\xee\xbfw\x9aO\xfc\xfd7xz\xfb>\xba\tH\xe1\
-\x13\xf8\xe38#\x82V\xa3\x8dJ\xa7\x18\t}\xae\xbex\x03?\xb3\t^x2\xe3\xfdo\xdd\
-\xc8ik.\xa3\xae\xa0\xd7:\x80_\xab\xd8\xeb\xf1\xf3\x0f!\xe9Y\x11t}\x8e\x08\
-\xcd\xe5S\xee\x9f\xba\xc9r!\xccG\x18\xf3E,\xc3\x0cb\x13\x80]0\xabXJx\xc8eU\
-\xa4\xd3\x1e\xf1\x06\xe7\xbb\xbc\x0c\xc5j\xf6\xb9\xa5\x93eV@\\\x9f\x08\x97-\
-\xfb{|\xee\xcb\x0f\xf3\xe5{\xb7\xb2\xfd`\x97%+\xd6\xb1\xaf7\xcb\xae\x87\xb6\
-\xf2\xe4\xf3\xcf\xb1u\xeb\x8b\xfc\xec\rWr\xfa\x8a\x8a\x15\x8f\x9f\xba\x1bZ\
-\xf2\xef\x89\xebzD\xc0\xe1\x0e\xdcv\xf7\xf7\xf9\xca\xdd\x0f\xf1\xe2\xaeC\xa4\
-\t\xb8B\xe3\x8b\x84\xff\xf2\xfe\x9b\xf9\xcf?s6\xc1\xa8\xc0D\xf6\x91S\x12\x82\
-\x7f\xa7\xd5<}\xdf\xc7u]\x1a\x8d\x06\xbe\xef\xe3y^?\xb8\x1e\x86!\xbd^\x8fZ\
-\xad\xc6\'>\xf1\t\xa4\x94|\xf3\x9b\xdf\xe4\x93\x9f\xfc$\xef\x7f\xff\xfb\xb9\
-\xf4\xd2K\xd9\xbbw/\xb5Z\x8d\xc3\x87\x0f399\xc9\x19g\x9c\xc1\x0b/\xbc\xd0\
-\x8fqx\x9e\xc7c\x8f=\xc6\xd2\xa5K\x99\x9a\x9a\xa2\xd5j\x01\xf4\x83\xf2/\x873\
-\x98\xd5\x15\xc1\xf2\xbc\xf2n\x08\xa5\xecJv\x1d\x9d\xd2\x96\x0e\x07\xa7#v\
-\x1d\x98DU\xd7"E\x95D\xf8\x18\r\x99\xd1d\xc6\x0e&B:\x08\xe5\xd0JR\x90\x0e\
-\xc2u\x10B\xd9\xf8\x82)FC\x83\xe3J\xe6\x0e\x1f\x02\x93\xd1\x0c$Z\xfb|\xe9\
-\x8eo\xf1\xceKO\xc3I4i\xd4fy\xbd\xca-\xefX\xc7\xedw~\x83=\x07Z\x10,\xc5\x1f\
-\x1d#\xc9R;@eI>\x13\x05O\x1a\\a\x90&\xc3\x08\x9b\xa6\x96\xe6\x99WY\xb1~\xa0\
-\xc9\x03\xd1\xa4\xb8"\x05\xd3De\x11Q{2OIM\x118\xf8\xbe\xcb\xa7\xff\xc7\x870\
-\x0e4R\xf8\xf6\x03p\xe7\xdd\xdfb\xfb\x0b\xcf\xa1\xd2\x06\xd2\xaf0\xc5\x18$6\
-\xda\x9df\n\x11\xb5\xf1L\x93\xe3\'\xea\x9cu\xe2R\xfe\xf7\xff\xf9L\\\xe0\xa4s\
-\x15\x8e\x86P\x82\x8e\x9a\xd4\xaa5\x9b:$\xb5\xbd\x96,\xb5~@\xc7\x03\x9d\x8b\
-\x87]g\xea\x88\x82\x0e\xebl,D\xfe\xd87\x138z:}\xe1\xca\xd2\xb9\xc0C\xe1p\xd3\
-E\xf68v\xf5E!\x06\xf5=\xc3)\xbbv\x15\x16\x89\x18\xb2\xb9\xc4P`>C\xa2\\\t\x19\
-\xa4\xb8\x1cl\xc3\xd7\x1ex\x96\x7f\xba\xeb{\xec\x99q\x18;\xed|\xa6\x0f\xcdP[\
-q*\xb2[c\xdb\xde-\xdcy\xdf3\x1c\xbfr-\xcb7]\xc0\xd2J\xd9L\xb2\x04\x1a=\xb8\
-\xf3\x9b[\xf8\xdc\xad\xdfd\xf3\x8e\x19F\x96\x9f\x8c\xb7t\t\x93\xb3S\xa8x\x8e\
-\xbf\xb9\xf5.\x1aq\x8f_z\xe7\xeb\x98\xf0A\xc7\xa0R\x9d\x7f\xf5~\xf21\xb48\
-\x8eq\x1c\x07\xc7q\x08\xc3\x90n\xb7K\xaf\xd7\xc3\x18C\xa7\xd3\xa1R\xa9\x006\
-\xfb\xca\x18\xc3\xaaU\xabh\xb5Z4\x1a\r\x00\xd6\xacY\xd3\xefF^\xa9T\xd8\xb8q#\
-\xff\xf8\x8f\xff\xc8C\x0f=\xc4\xa6M\x9b\x88\xa2\x88{\xee\xb9\x87k\xae\xb9\
-\x86\x87\x1ez\xa8\x9f\xf1U\xc4E^\x0e9\x98\xdfY\xfay\xcfF\xcf\xdbP\x03\x81t\
-\x90\xc0\x0b/ng\xc9\xd2\t\xe6\xba=ZB\xd3H#\x9a:\xa2\xe3\x18"\xd7\x90\xc8\x98\
-\xd8\x89Q\x15\x03n\x02\xaa\x8d\xa1\x891\xb3 \xe6@6@\xda\xdf\xd3\xd9\x03\xd4G\
-k\xe0\x86\xf4\x12\xc9L\x12\xf2\xc2\xc1\x1e\xb7}\xf3\x192\xcf\xc3\xaf\x84\xb8\
-\t\x9cT\x83\x1b7\xaegy\x90"\x93&\xda\x08t\xe6\xc2l\x8a\xaf\x03<\xedB\xa7C\
-\x14uq\xaa\nQ\x87\xa6\x99\xa5\xa3\xe6H\xe4,B\xcc\xe1\x9b\x06\xa1\xee\x12$\
-\x1d\x9cV\x13\xbfu\x98 \xd9K\xcd?D\xbd:\xc7yg/C\x99\x14\xe8 \x81z\x1d\x1e\
-\x7f\x02~\xef\xcf\x9e\xe1\xbd?\x7f+\x1f\xfb\xdb\x7f\xe6\xd9\xad\xb3\xb4:u\
-\xe2t)\x89X\r\xe68\xa8\x9c\x02\xfer\xe2L\x91\xf6f\x08\xf5$W\x9c\xb7\x94?\xf9\
-\xcd\x1bX\x06\xac@S7\t\xa1\x88 K\x90n\x08\xa6\x06\xc2\xa6\x0b\x18\\P\xbe]\
-\x7fD8\x03-w\x17|0\xc6~\x12\x02\x8d\xc2\xa00\xf9\x80z\xac(\xe2eG\xda\x1f\xc0\
-|\x8bVht\x9a`\xf2\x9e\\\xdd\xcc\xeac\xd7\xd8~c=l\x12F\xb7\xf8\xdd\xd8:\x1f\
-\x9bC7\xff\xe8\x854\x15\x9a4\xd7M\xe8\x02^\x15>\xf5\x85o\xd0RK\xf1O8\x83\x99\
-\xc33\x10\xd4ie>\xed\xb8\x06\xa3\xa7\xb1w\xd6\xe3\xcbw?J[\xd8\xe3\x1f\xcb\
-\xbbWr\xec\x91@%\x80\x7f\xf8\xfcW94\'\xd1\xde\xf1t\xc2\x139\xd4\xac\xd1[\xb2\
-\x8et\xf9\xe9\xec\xecz|\xe9\xde\x87\x99\xc5\xc6~\x1d\x0fp\x12\xc8:pD\x0c\xef\
-\xdf\x16c\x0cR\xca~yD\x1c\xc7\x18c\x08\x82\x00!\x04\x95J\x05!\x04Y\x96\xf5\
-\xf7I\xd3\x94 \x08\x90R\x92eY\xdf\xe5\x15\x04\x81m\xc5T\xa9p\xd1E\x17q\xef\
-\xbd\xf7"\xa5d\xc7\x8e\x1d4\x9bM6n\xdc\xc8\xcc\xcc\x0c###x\x9eG\x9a\xfe\xe0\
-\xf7\xf6C%\xa1\tG\x82I@H\\`\xd5\xca\xe5\xccMO\xe1W\xd6\x10\xb9\xfe\xa0XPJk\
-\x11\xa4)\xa41\xddV\xc3V\xe4\x01vE<\x18\xfe\xcaJ\xa3\x11\x95\x80v\xcf\xa6\
-\xcd\xa2<L\xd5c\xdb\xf4\x01n\x7f\xf0y6^|&K\x8c\xa4\x12@\x00\xbc\xeb\xea\xd7s\
-\xf7\xc3O2\x17G\x08?$\xd1)#\xe3\x01q\xa7\x85\x90\x86\xd1\xf1%t\x92.\xb3\x07\
-\x0f\x81#\xf0\xc7G!\x8d1I\x0f_f\xf8:\xa5;\xb7\x8f\xb4\xd3\xe5\xe4\x95\xabY\
-\xb7\xfe\x04\xd6\x9d\xb1\x96\xab\xae_\xcf\x8azQ\xac\x97@\xd2\xa5\x95:<\xf8\
-\x9d\xdd|\xe8\x0f\xff?\xbc\x15g\xd1\xed\xa4d\x9d\x04o\xe9*F\xc6G\x89f\x0f\
-\xd2\x9e\xe9\xc0\xb2\x15\x90&\x90vp\xb2&\xe7\x9e\xbe\x96\x9f\xbf\xf1\xdd\xdc\
-\xf8\x86\xe3\x18\x05lh=\xb1\xb3p\xed\x00\xae\xad\xe10\xf6~eB\x92\rUC\x081\
-\x94\x99\xd4\xcf\\\x1a~\xa2\x8a?\x16\xf7\xf1X\xf7\xd2-\xd6V\x1cdU\xd1\xff)\
-\xd1I\x0f\xe9\x00B ]\x97\xc4\xd8"z\xa5\xec\x97\xb1\xd8;\xc5\xfe\xbb\x9f\x14 \
-\x06\xbf+$\xc2\x14\xd5\xe5\xaa\x7f|\r\xcc\xb4\x1aTG\x96\xd2\xc8\xe0\xa9\x9d\
-\xd0\xd3!\x91\n\x88\xe2\x04V\xaf\x82\xc9\x86\xad\x07QKp\xab\x01\xba\x1d\xf3\
-\xe43/\xd0\x8ca"\xb4\x9fy\xc9\xab\x9b\xe9i8\xb0\x7f\x1a5~\x06K\x96\x9c\xc2l[\
-\x81\xaaC\x9c\x10%\x1ab\xc3L/\x01\xc7&g\xd4U\x86\xc8z6Y\xe7\x18G#\x8b\xd8\
-\x86\x94\xb2?\xe0k\xadI\xd3\x14\xdf\xf7\xfb\xae\xaen\xb7K\xa7\xd3\xe9\x17\
-\x0fn\xd8\xb0\x81\xcf|\xe63\xec\xdb\xb7\x8f\xfb\xee\xbb\x8f\xb3\xce:\x8be\
-\xcb\x96\xa1\x94\xe2\xe0\xc1\x83\xfdT\xe1\x1f\x84\xd3\x1f\xa8\xe6\xcd\xc5\
-\x8a\x82;\x86\xc7\x07\xc0\xe0 8y\xed8\x8eI\xc8\x8c&\xedi\x9b\xf1Td\xd8Hi\xf3\
-%\x85\xb4>}e\x03\xd6\xd2\x08D\x9e\x1e+s\xebF\x0b\x07\xe3x\xe8\x04\x9bI\x95\
-\x82\x18]A\xa7\x9d\xf2\x95G\xf6q\xc9#Mn~c\xdd\xd6\x84i8\xfb\x14\x97K/X\xcf\
-\xee{\x9f%BA\xb7I#\x9aC\x9a.\xdaxD-\x1f\xe1\xd4P#k1B\x92vR\\RTb \x9aatD\xf0\
-\xf6+\xcf\xe7\xbaM\x97p\xc6\xa9\x15;\xae\xf8\xb0\xa3\x01w|{\x8e\xc9\x17\xbe\
-\xc7\x1f\xbc\xf7\r\x8c\xf85B\xb7\xc2\x81\xc9\x19V\xad>\x8e\x03\xa9\xa122\x8a\
-\x1a\xf7\x99kw\x98\x9dm\x13:\x19K\xdc\x8clr\x0b:i\xb3\xee\xd45l\xbc\xf8\x12\
-\xce[\xbf\x96\xd7\xac\xaf!\x80Y@\x13\xe2\xe1\xe0\xa0Q\x12[\x048(\x83\xc0HH\
-\x87j!\x046\xb1\xa8H\x80\x90G\xab\xd0&\xdf\xff\x98\xaf$8\x1c\x9f\xb0"8oFo$\
-\xd2uA\xa7\x14\xb5F\xddD\xa3<\xc9T\x03\xbe\xf5\x9d\xa7\x10\xc1\x08\xd2\xaf\
-\xd1\xd3\x828\x03\xc7\xf3\x91:\xc5\xd1\x1d\xc6}\xcd\x15\xe7\xaf\xc6a\xc8Qg\
-\x06\xf7\x06\xc0+\xba-\x0b\x98\x9e\x05)<\x84\x91\x10u`\xfa ,[i\xcd\x1dc\xf0\
-\xbc\x90\xd0\x8c\xd2\x9aLAA\xcf@P\xfa\xaf^\xb5\x14\x86\xbe\'\xc1s]\x1aQ\x8a;\
-\xe2A\xd4\x83e\x13\xd0:\x0c\xe3c\xa0\xf7\xd2\x8dg\xe9\xe5\x1d\x8aL\xe1\x96=\
-\xe6\x937\xfa\x82P\xb8\xaf\\\xd7\xed\x8b\xc6\xb0\x00\x14E\x84\x85e\xb1a\xc3\
-\x06>\xf1\x89O\xf0\xe8\xa3\x8f\xf2\xe0\x83\x0fr\xd3M7\xf5\xf7)\xfe\x1b\x0e\
-\xd6\xbf\x14\xd6\x02\xc9g\x852\xaf!\x9e\xb7K.\xb0\x8e\x80\x9eNP\xd2cb\x14^\
-\xb3\xfeT\xbe\xb5\xf9 \xd4\xc6\xb1\xf5\xd2\x06\xe2\xc8n\x1f\xb8 ]+,\xd9 \xc1\
-\x13\xa3mv\x13\xda\xc6V\xa5D\xa7\xd2\x06\x8d3\x01\xa9\xc1\xe0!\xc7V37\x19\
-\xf3\xff|\xf1\x1b\\\xb6\xf1mL\x080m\xa8\xd4\xe0\xddo\xdb\xc4W\x15\xaf\xed@\
-\x00\x00 \x00IDAT\x1f\xdc\xc2\xbe\xee\x1c\x84\x1eh\x97z\xbdb\x83a\xdd\x98,\
-\xee"\xb3\x08\x93\xc4\xc4\x9d&g\x9ez\x12\x1b/~\x0b\x1b_\xbf\x8c\x13\xd7\xc2\
-\x84g?\xf6\x03S\xf0\xf4\xf3\x87\xf9\xfaC\xcf\xf3\x9d\'\x9fg\xaa9\xc79k+x\xbf\
-\xf0&\xd2$\xa2\rl\xdb\xb9\x8fF\xa7K\xd43DNd#gI\x8c[s\x19\xa9\x08\xb2\xe6\x14\
-\xab*p\xe3\xd5\x9b\xa8W\x1dj5x\xe3\xb95F\x1c[DY\xe9\xdfBE\x96\'\xa3\x8a"P\
-\x9cO\xd7\x17\x96\xda\x15\xb6\xc5\xf0L|\x90\xb2\x9ao\xa4\xf3\xc2\xa7\x05\xb1\
-\x91c\xc3@2\x84\x19\xbc\x97\xc1eIt\x96!\x04h!\xec:+\xc0\xf6]3|\xf2s\xff\xcc\
-\xfeFJ\xea\xd6\xe8f\x82\xd4H\x94\xe7"\xb2\x88\xaa\xe8\xb1\xa2j\xd8\xf8\xc9\
-\xdf\xcb\xcf\xe0\xd8\xd8\x990\xfd\xe3K\xc0w|b\xec p\xdc*\x18\t\x15\x07\xa7\
-\xa7\t&V\xd2\x8b#hMA3\x06\xe3\x12%\t\xbdx\x8au\xa7\x1cG\xbdb\xc5\xe3XKp\xc9\
-\xb1g|\t\xbca\xc3\xf9\xdc\xf1\xc06f\xf7\xed\x00S\xc5w&\x88t\x03ff\xa8\xfa)g\
-\x9f\xb4\x86@B\xa5xf\x94\x07if\xe3\x96\xc7\x90$Il\xe7\x8f\xfc?\xb0.\xac,\xcb\
-h4\x1a\xfd@y\xe1\xe6J\xd3\x94n\xb7\x8b\xef\xfb\x9c\x7f\xfe\xf9\xdc~\xfb\xedh\
-\xad9\xe7\x9cs\xc8\xb2\x8cN\xa7\xc3\xaaU\xab\x00~8\x01\x19$M.\xb0@\n\x04\xa0\
-u\xee\x9dJp\xf1\x08\x0c\xbc\xf5\xca7\xf2\xdd\xcd\xff`\xd7\xebv\xac?\xce\xf6\
-\x8aJl\x05\x97\x04\xebx\x02\xdbG\x06$\x86l\xe8,\xfd3J\xd7.\xe0\x1d\xf8\x98\
-\xe6,\x08I\xb8\xec$\x9e|f3\xff\xef\xad{\xf9\xf5w\xaca\xbcf\x07\xfe\xd7\x9c\
-\x08\x17\xac[\xce\xbe\xc7\xf6\xa2\x96\x9f\x8e\x96k\x98\x9b:\x0c\x9d\x03\xe0\
-\xc4,\xaf\xa4\xac[\xbd\x84k/\xbb\x90+/;\x8b\xe5\xe3\x83\x1a\x95\x18\xf8\xd6\
-\x16\xf8\xc2\x97\x1f\xe4\xd1\xa7^ \xd5.\x9df\x84F\x12\xd6\x8fc\xff\xd4\x0c\
-\xb3\x11\x98\x86\xa6\xb6\x0c\xa4S%\xc9\x0cc\xabW2;s\x18\xd7\x95\x1c\xbfn-\
-\x87\xf6oc\xf2\xd0\x0e6\xac?\x99\x0f\xff\xc2/\xf0\xad;nc\xe9\xc4\t\xbc\xe3\
-\xba\xf3m\x98\xde\xc0\xa8\x80\xa9\xc9\x03\xac\x98X\xdaw\xf0\xe8\\<\x8c\xb0^\
-\x95\xfe\x87p\x94\x0f\xe6\xa5?\xb6|G\xb3\xe03:\x96\x14\xf1\xb2\x85\xd6RnN\
-\x19#\xd0\x1aP\x0eRYq\xcdd\xc0\xb6\xddS\xf4\xea\xab\x89M\x9d\x8e\x96dF\xe2\
-\xa4\x0eR;h)\x19E\x932\xf4\x9c\x0c\xd5\x93\xc8!\xf1\xed\xb4\x1b\x84\xd5\x11N\
-Z\x05\x17\x9e\xb3\x8a}\xf7>\x8a\xe9y\x8c,]\xc1t\xbbK\x1a\xc0x\xe0\x90\xcdN\
-\xa1\xa2\xfdl\xba\xe4\n\xbc\xcc\xce\x9e\x8e\xf5\xad+9\xb6\xb4\xdbm\xbcj\x95w\
-\xdcp\x19\xbb\x0f\xb5xfw\x93\x8e2\x88\xd9\xe7\td\x8b\xb9]\x8fq\xde\xc5\xeb\
-\xf8\xa5\x1b/g\x85\xb4S\xe5f\xb3\xc9HX\xcf\xbf\x8a\xc76\x89\xa5\xa8H\x07\xfa\
-q\x92,\xcbX\xbe|9\xc6\x98~E:@\xab\xd5btt\x94z\xbdN\x9a\xa6\\\x7f\xfd\xf5\xdc\
-{\xef\xbd\\}\xf5\xd5\xac\\\xb9\x924M\xa9\xd5j\xf8\xbe?\xaf\xc8\xf0\xe5\xe8w\
-\xe3\x15\xc2\x0c}?\xc5 %\xdf\xc1\xa6\x96\xa2\xf3\xfeA\xe0\x1ax\xe3\x86S\xb8\
-\xe0\xccS\xb9g\xeb\x0c:QH\xd7\xc5\xf5\\\xeb\x92IR\xdb\xb7$w_\x91\x1fK/\xccC\
-\x95\x12<\xdf\xba\xbat\x8fe~\xc0\xe1\xfd\x870I\x86\x7f\xda\x19tk\x13\xdc\xfa\
-\xf5\xfby\xf7\r\xeff,\xb7\x1c*\xc0{\xde\xf2z\x1e\xdc\xfc\x05\xba\x9d\xbdt:1\
-\xabW/\xe7\x82\xf5\x1b\xb9\xe4\xfcu\\x\xa6\xe2\xa4\t\x08\x19\x18\x98\xf7<\
-\xbc\x9f\xaf\xde\xfb\x08[\xb6\x1ff\x7fCq\xb8#\xc9L\x00~\x157\xcc\x90R\x90\
-\x06\x1e\xd27H\x1fj\xcbB"\xe0\xb1\'\xb7\xb0|\xc5\x89l{q\'\xb5\x95K\xf1=\xc1\
-\x0b\x0f\xdc\xc7\xa9\x17\x9c\xc1\x07~\xf5wY=\xe2\xf0\xe7\x7f\xf2\xbb\xfc\xf2\
-\xcf\xdd\xcc\x95\x97\x9d\x83\x87m\n\xe8\t\x9b\xde\xb6z\xe9D^\x11\x0f\xa0PB\
-\x932h\xadQ\xc4\xc9\x07\x86\xb0\xbd\xcf&\xff\x14\xfa7\xce\xde\xac\x81[q\x98c\
->\x02\x0e*\x89\xe0(\xd7\x87@yv"\x11\x03\xbd\x14\x8c\x03\xd2\r\xf1F\x96\xd1\
-\xf5\x97\x11{\xa3\xa4\xa9\x04\xa9H\x94B&-R\xd9\xc1\xa9\x0c\xd6\x91\xb7\xc7\
-\x15\xb9\x15\x92[;\xf9\xe34\x16zd\xd8g\xe3\xfd7mbzv\x92\xaf\xde\xf7$\xccL\
-\x13\x8e.\xa3\xd9h\x10\x870\xea\xf48\xfb\xcc\x95\xdct\xddF\xc6\\\x10\x89\x9d\
-\xbb\x94\xbcZ\xd1\xd4\xab\x1e1\xf0\x86\xf3\xc7\xd8w\xe0\x12\xbe\xf9\xd0V\x9e\
-{q\x1f\xcfo{\x82e\x13\x017\xbd\xfd\x8dlx\xcd\xf1\\\x7f\xfeI\xf8\x80\x8b\xa6\
-\x1b\x03E\xad\xd61f\xd8B(,\x86\xe5\xcb\x97s\xed\xb5\xd7r\xce9\xe7\xccscMLLp\
-\xc3\r7\xf0\x9a\xd7\xbc\x86N\xa7\xc3i\xa7\x9d\xc6M7\xdd\xc4%\x97\\\x82\xd6\
-\x1a\xdf\xf7\xb9\xfe\xfa\xeb\xfb\xd5\xec?\x0c\xceB7H\xdf\xa5"\x86^\xd0\xd6\
-\xb1\xe2\n\x8d&\xa5\xaa\x1c\x82:\xbc\xfb\xedW\xf3\xd4\'ncog\n\x1de8\xaa\x82r\
-=\xb2$\xb1=\xec\xdc\x904+\x8e(\x87\x9c\xd7\xc5\xd4\xcf\xc9\xcd\x83\x94\xbaL\
-\x08\xdb\x07\x183\x1d\xbaR\xd1\x9d\x9b"\xa8\xd79<\xb3\x8b\xdb\xeex\x8e5o9\
-\x8d\xd5A\x84g$W]p<\xef\xbb\xfa"\x9a1\xbc\xed\xb2\xd7p\xfa)#\x8c\xd5\x07k\
-\x93w\x80\xfb\x9f\x80{\x1f\xf8.\xdf\xfa\xcec\xe0V\x99\xebfL5\x12p]\xea\x13\
-\x13\x18\x1cZ\x8d\x06\x89c\x03\x12Qg\x8eY7#\x06k\x85x\xd0M\x12\xb6\xed\xda\
-\xc5\xf2S_\xcb\xa1\xdd\xdbP\xb5\n\xff\xf5\x8f\xfe\x80\x93\x8f\x87;o}\x80\xef\
-}\xfbv>\xf5\xb1\xdfg\xed\xb2\x00!s\x7f\xaa\xb0U\xe5\xbd\xb9\x0e\x81+!p\xf2\
-\xa2F\x032\xc3\x11Y\xff\xd6\xf6\xfb\\e\x0c\xf2\xe1DQ\xd2Y|0\xf6\xde\x99\xa1\
-\xfb6\xaf.\xefX\xba\xb1\xccQ~\x16\xff-H\x00(\xc2>\x19\x90d\x10\xa7\xa0E@\xcb\
-\xf8Dz\xd02\x12\r:U\xb4\x85\xa4\x9b\x89\xfe\x12\xbcGV\xb4\xd3\xef\xf4\xab\
-\x84A\x9a&\t\x0e\xe7\x9d\x10\xf2\xbe\xb7m\xc4w\xaa\xbc\xb0\xa7I32T\x03\xcd\
-\xb21\xc99\xebN\xe0\x86\xcb\xceg\xdd\xaa\xbcI\xe5\xb1\xcf\x80.9\xa6h\xda\xd1\
-\x0c\x8e_\xc5\xa3\xca\xbb\xaf=\x99\xb7\xbf\xe5d\x1as03\r\'\x1e\x0fd\x10\xc8\
-\x1e5\xdaDq\x17\xe5\x8d2\xb6d\x9cy\x0e\x9bcH!\x1ai\x9a\xf6\xc5b\xf9\xf2\xe5\
-\\y\xe5\x95\x84a\xd8O\xdf\x15B\xb0b\xc5\n\xae\xbb\xee\xba~\x17_\x80w\xbd\xeb\
-]x\x9eG\x92\xd8n\xec\x9b6m\x9ag\xb5\xfc \x9c\xf9\xbd0d\x1e\xce\x1dr\x8fHr?\
-\x9fD\xa2\xc8t\x82\'\x1dR\x03o\xb9t\x9c/?\xbc\x1ao\xe7a\xf6\x1eh \xc8\x10\
-\xa6\x8a!\x01\xed\x90\x89l \x1a\xc5\x00\xd0\x0f\xfc\xe6\xfdO\xe2\x0c\xa4\x8b\
-\x17V\x98=\xb4\x93\xf1\xb0\xca\xca\xfa([\x0f\xed\xc6\xafyxY\x87\xaf\xfc\xf3\
-\x97\xf8\xe05\xbf\x83\x14>Y\xd4a,\xf0\xf9\xb5\xf7\xbd\x91z\x1d\xbc\xbc\x05\
-\xc8d\x0c\xf7?\xde\xe4\xce\xfb\x1f\xe3\xd1\xe7vrh\xbaM\'\x83Dx\x18\xc7!s\x96\
-\xc0\x88\x02\x9d\xd1lE \x1a\x08_b\x92\x14g\xe98i\xaf\x8dN\x0f#\xb1\xeb\x8bw\
-\x80\xc9\xc3\x87\x98\x18]G{f?\xbf|\xcb\xfb\xb9\xe1z\xb8\xeb\xab\xf0\xdb\xbf\
-\xfe\x97\\\xb2~\r\x9f\xfd\xdb?e\xcdr{\xd8|\xf8\xa3\xd7\xd5\xd4<I0R\x19\xca:\
-\x1b\xae\x1d\xb7\xedb\xfa\xe21\xd4\xf5\xc3\x0e\xbaG\xf7\xca\x0f\xaf\xf8a$\
-\xf3\x0c\x94#bVEa\xa506h\xbf\xd02\x90`\x1dIE \xb0p\x8b-L\xa4\xe8o|\xf4Z\x0f1\
-\x94k\\\xbc\xc5\x97\xc8\x1e\xeb\xb5\xdb\xb8\xd5%T\x1c\x9b\xa6\xab\x05t\x12\
-\x8d\x08\\P\xf9\x02\\\xca\xb3\x8d\xab\x92\x18D\x86\x90}\xd9\xcc\xc9\x98\xd7z\
-$\x7f\xa6t\xa7\x8d\xacJ\xfc\xb8\x87\xf6|.\x7f\xdd\xf1\xbc\xe1\xa2\xe3yf\x07\
-\xec\xda\x1b\x11\x84\x925\xab\\N\\\x055 \x8d2\xdbF\xd1\x91\xfd\xc4\x8f\xc2U&\
-\x99_\x1b2\xb8\xcdEj\xbb}\x83\x99p\x86?\x82A\xe6\\\xfff\x14\xd7\'\x87\xd6 a\
-\xd0\xba\xc58y&\xde\xc2\xbb\xbapd:Z\x81f~\x1dF\x808b\x0e8\xef\xba\x17\x1e\
-\xb1\xa8\xc49\xf2\xd5\xa28s>\xf3R\xb1_\xf2\x9a^\xb9\xd4\xfc*\x19\x92\xe9\xc6\
-\x1cc#\xa3\xf8\x12F\x96\xc0\x84\x0f5\x07\x94C\xeeE\xc8\xf0\xa1\xff|km\xc3\
-\xbb\xeeO\xc9$Dk\xdd\x1f\xf8\x8d1\x84a\xd8\xcf\xa4*\xdcQ\xbd^\x8fJ\xa52\xcf=\
-U\xb4\x8a/\xb6+D\xa8p\x87\xfd \x9c\xc1\x97]!\xfa\xce\x94\xa1@\xaf!\xbfK\x12)\
-\x15^\xfe\xf0(ag\xfb\xff\xed\x7f\xb9\x9a\x9f\xff\xb5\xbf\xc6\x89\xa7\xf1\xc2\
-\x95$*\x1f\x90\xfc:F\xd6\xac\xf5\x92\xab\x1d\xaek\x9d\xff\x99-.\xc4\r\xb1\
-\xc1\xd1\x84)\r#\xe3kiE\r\xdaS{Y\xaeR\xaaZ\xf3\xda\xb3N\xe4\x9a\xcb.D\t\x88\
-\x90L5\x04\xcb\x03XS\x87f\x04;\xa7\x0c\x9f\xfa\xe2\xdd\xfc\xcb\x83\xdb8\x18\
-\xd7\xd1\xd5\tRV\x80;\x87tz\xb6H\xcd\x08\x8c\n\xc1\xad\xda\xfe\x03\x9d)p{T\
-\xebuZ8\xc8\xa0\x06\x87\x0e2>\xae\xf0#\x18ua\xcf\xbe\x84\n\x19\xaf]\xbf\x8a[\
->\xf4V\xf6\xcc\xc2o|\xe8\xeb\xec{\xf1)\xceXU\xe1O\x7f\xe7\x9d\x1c?BQ\x9a\xd8\
-\xd7a?\xccoz!\x08H\xb28F\xb9n.\xa6\x8a4\x8d\x10RZ\xf33\x89\xecS*\x1c\xe2N\
-\x84\xf4B\x1cWa\x04\xc4Q\x82\xef\x17\xfd\x8c5E\x91\xa7@bDQ\x01b\xc8R\x8d4>N\
-\xbe\xa9N:H_\xe7\xb9\xae\xbe\xfd\xaf\x18Q\xf2\xf9\x81\xa1\rd\x18\xed#\xa5o\
-\x07\xc7(\xca\xd7D\x90\xb6w\x8d\xeb\x83\x90\xa4\xda\xea\xbc\x91\x83/\x8c\x04\
-2-Q\xd2G\t\x10$@\xdb\xa64k\x03~\xdd~\xc6\x00FS\x91\x1aL\x84\x10>\x87\x1b\xe0\
-\x8d@&\xc111t\x9bv0w\xaa\x90\x04`\\|7@d\xcd\xbe\x17\xd5\xaeL\x9fb\x9d\x93\
-\x82$\xcd\x90\xaeK\x96fxA\x00:\xc2q\x14\x98\x94\x9a\xf4\xe8\x00\xe7\x9e\x08\
-\xaf=\xd1G\x02]m\xad\x0e\t\x04\xbe\xc2MZ\xb9\xc8*\xa0J\x17\x9b\xa2\x19\xa8<\
-\xf9\xa1\x97\xe0\xf9\xae\xed(-@\xe9\x8c\xb4=\x83Su\xc08\xa4j\x846V>\xed:-\
-\xb6\xb1\x02\x06HzdY\x84\xaa\xd6\xc1\xd8\xe8b\xa2\xc1U\x1aE/Os\xaf\xf7S\xdc\
-\x07\x9a\xa8I\xba\x1d\xdc\xc0\xa7\xdbj\x13\xd6kt\xa3\x98\xc0\x0f\xf2\xdb\x98\
-b\xd2\x08\xe5b\x075-\xd0\xaaN\x9a\x9f\xbf\xf8^\x1a1\xdf\xe2\x03\x885\xe8\xd4\
-P\xf5\x04I\xd4\xc1d=*\x95\xb0\xff@\x14\xcb\x1d\x0c\xc7(\x0b1M\x93\x08L\x86\
-\x9b\x17\x96%I\x82\x11\x12\xd7q\xf3\x10\xa9\x9e\xd7\x19v!\xb3\xb3\xb3\xf8\
-\xbe\x7f\xc4\x9a\x14I\x92`\x8c9\xa2`\xad\x18\xf8\x8aN\xb1\xc0\xbcn\xb1\xc3\
-\xaf\x03\xfd\xb50\xb4\xb6\xdf\x88\x85\x03_\x92$(\xa5\xe6]\xa3\x9d\x95Kt\xa6p\
-\x95\xc3H \x07\x13\x07\x01\xa13\x88\x8fk\xed \xb4\x03\x8eO\x96j\x1c\x07\xa4\
-\x87m\x84\xa0\xcd\xbc\xd5@\x87\xaf\xa9H\xa5-\xdcA\xc3\xb1\x8a\xe2Z2\xa3\xc9\
-\xb2\x0c)%J\xda\xe7A\x9b\xfc\xef\xd8tL?\x0c\xe8t:\xf6>I\x81\x17\xf8t\xa3\x9e\
-My\xca\x8f9|\x0f\x0bq(\xc4\xa0\xf8wQp8\x1c\xdb\x18\xbeW/\xf5\xfa\xcb1\xd4\
-\x8d\xf7%v\x98\xf7\xf7A\x86\x96\xc2\xe6\xd0/\x95\xf0\xe1\xff\xe9\x97\xf8\xad\
-\xff\xed\xff$\x8ab\xa6[\x93\x10,\x03\xe1@7\x86J\x15\x02\x1f\x99e\xe8,\xb2\
-\x8f\xaa\xab\xd0:#\xebNC\x16\xe3T=T\xafAkv?+j\x927]\xfeZ\xae\xb9\xfc\xf5\xac\
-?\xcd%P\xb0\xb4\x06ss\xb6u\xc0\x92\xe5UR \xed%l\xde\xbc\x8d_\xfe\xc8_\x12\
-\x1c\xff:vL\x03cc\xa0CH\xba\xa0%\xb5\xd11\xa2v\x03)\x15:\x8e\xecB\xe8\x95\
-\x10g\xe5*T\xf7 \xadC\x93P_F\xfc\xc8#\xc8\xe3\xc6\x19\xf7%\xe3\x1e\xd0M\xe9\
-\xc4\x82?\xf8\x93\x8fr\xd2\x99\x8a/\x7f}\x86\xff\xfe\xf7\x9f\xc5\xf5\x14c~\
-\xc6_\xfc\xd1\xaf0\xe6\xd9\x14\x81y\x06\xdc0C\xb7S\xf9A^\x81o\x1f"\xd7)\xbeH\
-\xa9\x1d\x91\xd3\x04<\x1fU\xab\x91\x02\x93-\xfb\xe5\x1f\xa9\xd9\x06\x96\x18I\
-\xbe\xbb\x9d)\x0f\x05\x90\x9b3m\xc6\x97T\xf1l\x12\x1b\x08p\xc2\x1a\x88\x16\
-\xc4-p\x14\x08\x7f0\x81\x1c\xb6\x12\xd0$I\x84\xef\xe5\x02\xd3\xf7\x97:dIL\
-\xb7\x97\xa2*\x0e\xc6\xb5]\xad5\x83\xe2>7\x7f\x8f\x196\xde\xe3\xa5\n_\x83\
-\xf0C\x10\x92L84{\t\x9erp\x85\x8b\x14>q\'#\xf1!\x1c\x814\x82T\x16\x0f}\x9cg\
-\x95\x15\xcbf\x81\xd1\x8aT\xdb\xf9z\x0cxB"\xa4\x07&\xb4\xe2\x9a\x0f\xba\x9e\
-\x17\x00\td\x11\xa4\x1a\xed\x88\xc2\x13F\x82\x15\x9f"U3?S~\x86\x0c\xd2\x1ei\
-\x0cj\xa4\xcaLl\r\xa0\x04k!\x05\x81K\x94\xdf\xef\x14\x08\xa5\x8b\xe3\x07V\
-\xec\xbc\x90H\x15\xb7\xd3\xf6\x04p\x91\x83\xf5\x0b\\\x0f\xe5\xd9\x1b4\xd7\
-\xb1\x19\xea\xc6\x81\x04\x89\xc2\xc3w\x02T>YK\xf3{\x18wc\xea\xa1\x87\xeb{\
-\x90D\x84\xb5\x100\x04~\x80\x06:\xbd\x84 p\x91\x9e\x83ActL\xac\x05\xda\xc9\
-\x1b\x16\x88A=M\x96\xd9\xd6\xf5\x89\x06/\x84^\x04\xa1\x0f\xaeg\'\x1d\xa1_\
-\x03\xe32\xbd\x7f\x0f\xe3\xabV\x02\x0cM\x1e\xe7G\xb5\xda\xed\x16\xa3\xd5 \
-\x7fc\x06\xa3m\xaa\xa8F\xd0Kl\xd7Z\x18\xccX\x8d1\xa4i\xdaO-\xedv\xbb,Y\xb2\
-\x04\xb0\xc1\xe74M\x19\x1d\x1d\xb5k\xea\x08\xd1\x1f\xe4\x8aA4\xcb\xb2\xbe\
-\x108\x8e\xd3\x17\x93\xe1\x01r\xe1\xc2IJ\xa9\xfe~\x85\xf0t:\x1d\xc20\xec\xa7\
-\xa4\x16\x14\xb5\x10\xfdcj\x85P\x0e\x15o H\xb6\x9d\xf9`&np\x90\xf9\xe0\xee\
-\xc8\x81 Ie\xbf\xfd\xc6\x98\xfe\xfb\x17B\xf4{W)5tO\x872\x9a\x86So\xb3,\xc3u\
-\xec\xb9\xd2,%M\xd3~FUq\xdc\xa2H\xb0\xd7\xeb!\x84\xa0Z\xad\xda\xe0\xf9\xb1\
-\x0f\x80\xfex)\x04\x12\xa8\x03g\xac\x0c\xf8\x9d\x0f\xfe&\x7f\xfe\xf1\xcf\xe1\
-\x8c-\xa5\xa9+\xa8\xca\x12\xe6\x1a=h\xb4@\x1a\x1cW\xe3\x12\x93E\x1dt\xd2\xc1\
-WP\x0f2\x021\xc9\n\xdf\xe5\x92\x8d\xaf\xe3\xda\xab\xde\xc3\x19y\x83\xc2\xc2\
-\xb9b\x809`\xc7t\x93\xfb\x1ey\x8e\x1b\xdf\xfc:\xd2$a4\x10\\p\xe1\xe9\x9cp\
-\xf6F\xb66B\xc2\x15\x19\x91\x8a\xd0BC\xd6C\xc4\x11\xf1t\x86\xebz6\x07\xc0M\
-\xc0\x15@\x87\xb4\x95\x90&\n\x82eH\xcf\xc3;\xe3\x04*\xf1\x0c\xdd\xd9\x83LMu\
-\x98\x18\xaf\xb0\xfcd\xf8\xc6}\xf0\x7f\xfc\xd6\x17\xd9\xb9s\'\xab\x96\x8e\
-\xd3\x9a\xda\xcbG~\xed\xfd\x8c)\x08\xc5\xcb\x88\xc7\x10\xc5\xecH\x08qDq\x8eF\
-\x10g\t\xc6\xf3\xe8\x19\xe8d\xf9\xa4\xbdf\x07\x95\x83\xc0\xf3[\xa1\xd9\x88\
-\x99\x9a\x9af\xb6\xd5%5\x0e\x95\x91\xa5\x8c,\xad0V\x83\x0b\xd7U\xe9\x01SMHcX\
-\xb9\xd4\x0e"\xb3\xb33\xac\\R\xb7wP\xa4\x03\x97\x89(R\x85\xad\xf5\xe7\xfb.i\
-\x14a4\xb8A\x05\x90$)\xe8\x9ams\xdd\x05\xe6R\xd87\x05{\xf6w9<=E\xb7\xd7\xb6\
-\xe3\xa4r\x08\xc3\n\xe7\xad_\xc5I\x13\x92\x98*I\xde\x93D)\xc8\x02;\x83o\xa5\
-\x82j`\x85\xbf\x8b\xad\x8f\xd99\t\xb2:Nj\\\xa4\xc9\x1b\xb3\x98\x04L\nF\x93jA\
-+sh\xe5\xcfY\x87\x9a\x1d$E\xbe\x12%\xfd\xe4q\xd28%P>x.\xb1pi0\x10:\xbb@\x98\
-\x15\x05\x034\x9a\xb0\xb6\x0e\x15\xb7\x0e\xca\xc1\xf1}Z\x19\xa4j\xe0\xd4K\
-\xf2\xeb\x8c\x13\xd0\xae\rO\x8d\x005o\x04\xa5$(E\x96Ym\x96\xa48\x08T\x91\x15\
-\xa7\xb1\xe9\xde\xd2#E\xe2\xd4\xe0`\x1b|\xa7\xb0#=k\xe1\x08;\xe8w\x13\xfb\
-\x9c\x8f\x84^.\x04\x12\xa3S\x84Q\x90e\xc4Y\nn\x88\n\\\xba@\xa4\xa1\x9bHB?\
-\x00\x05\x87Z\xb0\xff \xec\xdev\x98\x03\xfb\xf7a\xe2\x98\xa5\xe3\xe3\xacY\
-\xb3\x86\x89\x89\x80SO\xc9\xd7\xde\x01H\xa13\x07\x13K\x00\xe33>q\x9c\xb5d\
-\x84\xf5\x89\x16i\xfc\xc5\\C\x02#\xd5\x1a\x90\x12\xf5z\xf8\xaemOd/_\xcc\x9bQ\
-\x03\xfdY\xf5\xf0`?\xec\x12)\x1a\xf3eY\xc6\xec\xecl_X\n\xd7\x89\x10\xa2\xbfN\
-Eq\xccb\x7f!D\x7f\x91\xa4\xc2\xdf\xef\xba.Zk:\x9d\x0e\xb5Z\r\xa5\x14\xcdf\
-\x93Z\xad6o\xfd\x8b,\xcb\x10B \xa5\xec\xcf\xc2a`\xe9\x14B4\xbc\xce\x06\xd0?_\
-\xa7\xd3!MS*\x95\n\x8e\xe3\x1cQ`\x97\xa6i\x7f\xd5\xbf\xe2<\xc5\xa0\xaf\x94"I\
-\x92y\xd5\xe1\x85\xb0\x14\xe2\x91fv\xffJX\xc1Q\xf3\x87\xe4(\xb6\x8bF\x15\xe3\
-GQY\xae\xb5F\x1b\x8d:\xc6\xb5`?\x96\x80\xb8\xf9T\xe5\xc41\xa8^8\xc2\xf6m\x1b\
-\xf9\x8bO\xdd\x8a\xb7t-\x8dV\x03/\xa81\xb2\xb4B\xb71\x85L:\xd4=\x8d\x17\xf4\
-\xa8\x8d9\x9cu\xfa\xa9\\t\xeeI\\\x7f\xf9\xc9\xac\xa8\x0e\xbe\xb8\x02;\x00\
-\xced\xb0ek\xc4\x13\x9b\x9f\xe6\x9eo~\x83\xf6\xdc\x0c\x87\xf7o\xa7\xd1\xbe\
-\x85\x9f{\xdb\xe5\xc4\xd8\xca\xe5\x0f}\xf8f~\xe6\x03\x9f\xc2\x8cT\xd1\xbd.8\
-\n%$c\xf5\x1a\xddF\x9b,\x15\xc8\xc0\x03\xcf\xb3.\x8b,\x06#P\xaeC\xa8\xa0\xd5\
-\x9a\xa2Zw\x99\xde\xb3\x8d\xcb.<\x99\xb1\xa5\x15\x9a\t|\xec\xf6\xbd|\xfc\xd6\
-{\xd1q\x840\x92\xb4y\x88w]\xb5\x81w\xbfy\r5\xec,\xb6\xdd\xeaP\xabU\x8e~sr\
-\x86\x97\x9a\x1c~\xf0\xa2(B\xf9\x1e\xda\x1d\xb1\xef%\xf7\xd5\xecl\xc2]\xf7n\
-\xe5\xae{\x1e\xe4\x85\xed{\xf0\xfc:\xda8\xa4Z\x92\x1aE\x82O*<\x8c\xf2\xf1\
-\xe9\x11vvs\xf2\x8a\x11\xde\xfe\xb6\x1b\xb9r\xd3J&5T%T\x96\x1cG\x8f6\x0e\xc6\
-V\x8b*\x06n5\x83\xb5J\x8au\x1f}\xbb>{\x94A7\x05\xe9CS\xc3\x03\x8f5\xb8\xef{\
-\x9b\xd9up\x86\x17w\x1fdrn\x8e,\x9f]i\x93\xa2\x93\x84\xd0\xf10I\x8fz\xc5\xe3\
-\x9c3O\xe3\xcd\x9b6r\xe9\xc5\x13\xd4\x8b\xcf\xd2\xc0G\xff\xe2\xf3\xb4:1\xedD\
-\x10\xbb\xa3d\xe12\xf67\r\xb1\x08mk\x7f\x89M\x89"\xb5E\x87\xc6\xba\xc7\xda\
-\x89\xe2\x7f\xfd\xe8=T\x98C&=\x94V8j)q\n\xc2\x83U\xe3\x0e\xbf\xf7\x8b\x97S\
-\xf7B \xa1\xd3\xd5|\xf1\x1b\x0f\xf2\xaf\x0f=\xc5\x9c\xa9\x91\xe0P\x95\x19\
-\x95\xd0#N\x12\xa4\x82\xc0U\xbc\xf3\xea\x8dl\\7A\xcdQ\xcc5;\xfc\xf5gn\xe5\
-\x80\x1e\xe7\xb9}3\xac]{<\xddV\x13\x1du\xf0}\x9fN\x02K\xaa.\xabj\x9a\x0f\xff\
-\xca[\xf1"\x89\xe7B\x96&x\xa1;\x88i\xe0\x0e\xd2\xe94\xe08D\x06\x9e\xdc\x0e\
-\x7f\xf9\xc9\xcf\xd3\xc2\x10\x8cT0\xa2\x87\xa7Bf\xf6E\x8c\x8f\xd4\x19\t\xbb,\
-\x1bU|\xe8\x96\x1b\x88b\x18\x95\x02\xe9\x87\x98n\x0b\x11V\xf0\x1d\x9b\x11X,\
-\xe5\x9cH\xd8\x9f\xc2]w=\xc7\xd7\xeey\x88\xdd{\xda C<il\x96d\x96b\x92\xd8\
-\x0e6i\x8c \xe3\xed\xd7]\xc5\xd5Wl\xe0\xdc\xd3`l\xdc\xae9\x93\xb5\x9bT\xc6\
-\xaay\x1c\xa5(\x06\x9d\x1f\xff\x19\xc4K\xc0\x0f\x02\x8c\xd6\xc4Q\x82r=\x84\
-\x04\xd7\xb1ox\xef\xde\xbdl\xd9\xb2\x85\x1d;v077\x07XwI\xa5R!\x0cC6l\xd8\xc0\
-\t\'\x9c\x80\x94\x12\xc7q\xfa\x1db\x0b\xb7\x94R\xb6G^\x1c\xc7\xcc\xcd\xcd\
-\xb1l\xd9\xb2\xfe <\xdc\x93\xa9X\xa7"\x8a\xa2\xbe\x1b\xcbu]j\xb5Z\xbfSm\xd1\
-\xda\xa3\xd5j\xa1\x94\xe2\x91G\x1e\xe1\xe0\xc1\x83\xec\xdb\xb7\xaf/\x02g\x9f\
-}6\x17^xa\xffx\xc5\xf1\x8b\x86\x85A\x10\xf4-\x86\xa2\xf5\xc7B\xd24\xed\x8b\
-\xc2p\xf1^\xb1\xdf\xb0\xf5Qt\xd2}\xf2\xc9\'\xd9\xbcy3{\xf7\xee\xc5u]\xc6\xc6\
-\xc6hw;\x9cx\xe2\x89\x9cy\xe6\x99\xac^\xbd\x9a0\x0c\xfb\xf7I\n9\xcf*+V\x0b\
-\x04\xfab\xa2~\xc2\x0bZ\xfd ~,\x01\x11\x80i\xf7\x18\xa9\x06\x88\n\xfc\xda\
-\xfb\xcfF\xcb\x1e_\xbc\xf3>L\xa0\xe9\xc4\rh\'xY\x8be5\x87\xf3\xcf=\x857m\xbc\
-\x90\xd7\x9d{\x1c\xcb*v\x06\xe9\xa6\x905#\xbc\xaa\x8f\x94\xf0\xdc\x01\xf8\
-\x97\xaf=\xcc}\x8f=\xcbT\xc7p`\xba\x85R!\xa1Wa\xf9I\xab\xf8\x87/=\xc0uW]N\
-\xa8!\xac\xc2\t+a\xfd\xba\xb5<\xf6\xfcv\xeaKW\xd0\xeaDdi\x82\t@\x07\x86\xc4h\
-\xdb\xae9\x95\xd0\x8e\xc0s\xa8\x8fW\xf0z\xb3L\x1f\xdc\xc5\xd8X\r\x15\xb5\xf8\
-\xf4\xc7\xfe\x98+\xce\xb0\xb3\xc4\x9e\x82\xe7\x0fvh\xb5\x04+O8\x91\xc6\xce\'\
-\xd8\xf8\xda\xd3\xf9\xc3\x0f^I4\xd5!\x18\xb7\x0fT\xad\xfa\xf2\xe2\x01\xf6\
-\xe1\\\xe8\x9b\xed\xfbl\x114S\xeb\xed{v\x17\xfc\x8f\xcf\x7f\x95\xaf\x7f\xfb{\
-D\xda\xa3\xbad9\xa2v\x1c\x87\x1bm\x84\xe3#\\\x1f\x1c\x9f\x04\x87HKH\r\xedD1\
-\x1e\x1c\xcf\xde\xb6\xe6\x8f\xff\xe6\x8b\xfc\xe5\xa7\x0c\xef|\xfb\xe5\xbc\
-\xf7=\xe7\xb0\xca\x83\x99,fBY\x17\x88[\xf8\xd9\x87\xa2\xab\x06\x87\xc4@\xb7g\
-\x07\xc3X\xc1l\x06\xdf}\xb4\xc9]\x0f~\x9f{\x1e|\x8c\x96\xf6iD\x86(\x11\xe0/\
-\xa5Z\x1fAy\xb6\xd9Z\xdci\x92y.\xc6\xd1\xb4\x84`\xff\xd3s\xdc\xfb\xdc\x979\
-\xfd_W\xf3\x8ek\xaf\xe0\x9a7\xd8\xf8\xc8}\x9b\xf7\xb0\xe7\xd0,\x84\xe3\xf8c>\
-\xa9;\xc3\xa1)\xdbbD\x06^?q\xd9\xb6kN@\xb8d\xc6Z \xf7|o+Jvl\xb2\x83\tQ\xa2G\
-\x92h\x82Pp\xf2r\xc9t\x17\xfc\x00\x94p\xd1\x1e\xec\x9e\x8ex\xe4\x99\xbd\xb4\
-\xbd\x15d\xd2\xa35s\x98\x8a\xafH\x92\x08%\rK\xeb>\xaf\xdfp!\xa2\xe2`p\xf0G\
-\x02\xf0\xea\xdc\xf1\x95o1kjl=\xd0cv\xae\x85\xeb8(\xc7\xa1\xd9\x8dY>\xea3\
-\xc6\x0c?\xfb\xde\xb7r\xea\x92\n\x02\xa8\xe7s\x01\x85 \x8d;\xa0\xf2gA[\x1f\
-\xb6F\x92\nx\xe8\xa9\xed|\xfb\xfb\xdb\x98\xc9@TC\x122<\xb7J\xe7P\x8f\xf1\x91\
-\nNk+o{\xf3\x05\xfd\xc9S\xa2\r\xbe\x92\x08\xdbp\x89(\x83XY\x0bjO\x17>\xf3\
-\xe5\xa7\xf9\xec\xad\xff\xca\xdcL\x8b\x91\xb5\xa7\xd1\xf5}\xb2T\xa0{=\xc8R\
-\xa4\x11xN\x85 T\xb8\x8e \xe9\xb6\xf8\x87{\xee\xe7\x1f\xef\xb8\x9d\x8b\xce9\
-\x91\xdf\xf8\x85w\xb3\xe1\xcc:aX\xc7\xa4i>\xdb.li\xdd\x17\x91\x828\xea\xe2\
-\x15kF\xa46\xd5\xd3 \xd9\xb9g/\x8f?\xfe8\xb7}\xe9\x8b\xf3b\x19\xc5\x8c\xbb\
-\xd7\xeb\x91\xa6)+W\xae\xe4k_\xfb\x1a\xeb\xd6\xad\xe3\xaa\xab\xaeb\xfd\xfa\
-\xf5T*\x15z\xbd\x1e\x93\x93\x93|\xe4#\x1f\xe9[-Zkj\xb5\x1a\x1f\xfc\xe0\x079\
-\xe3\x8c3\xe6\xb9\x81\x8a\x81\xb4\xddn\xf3w\x7f\xf7wl\xde\xbc\x998\x8e\x91R2\
-99\xc9\xf5\xd7_\xcf\xaf\xfe\xea\xaf\x02\xb6\xb6\xe3\xbe\xfb\xee\xe3\xce;\xef\
-dnn\x0e\xad5\xcdf\xb3\x9fi477\xc7\xd9g\x9f\xdd\xb7.*\x95\n\xedv\x9bv\xbb\xcd\
-G>\xf2\x91~\xdb\x8f\xc2\xaa\xb9\xf9\xe6\x9b\xb9\xec\xb2\xcb\xfa\x96\x91\xeb\
-\xba\xfd\xe6\x86\x85\x90\x15\xdf\xed"\xbe\x01\xd6\x82\xb9\xff\xfe\xfby\xfc\
-\xf1\xc7y\xec\xb1\xc7h4\x1a\x8c\x8e\x8eR\xadV\x89\xe3\x98V\xab\x85t\x14\x9b7\
-o\xe6\xf6\xdbo\xa7^\xaf\xb3q\xe3F\xae\xbb\xee:<\xd7\xa3\xd5nQ\xa9T\xe8t:\xc4\
-qL\xadV\x9bg\xdd\x14\xae\xafc\xc9\x8f\x99C\x90\xe2\xab\x0e \xa8H\x9f\x14\xf8\
-\xe5\xf7\xbd\x8e\x17_|\x82G\x9f\xde\xca\xca\xb1q^\xf7\xba\xf3\xb9\xe2\x8d\
-\xaf\xe7\xc2\xb3j\x84\xd8\xc9Y\x11\xcc\xecb\xd7\xb1\xee)\x9fo<\xb8\x83;\xeey\
-\x88\'\xb7\x1d\xa4\xa1+\xcc$>S3\x11\xee\xd8\x1a\\\xd7ej\xf60\xb3\xa2\xc7\xea\
-\xea\x08\xb7\xdd\xf9"?\xfb\xb6Sht\xc1\x0f\xe1\xbf\xfd\xe6\x95\xfc\xe7_\xfd8\
-\xae\x11D\xc2\'u\x03\xa6\xba\x1dH\x12\x82\xf1\x11z\xad\x0e\x98\x10FF!j\xd1\
-\xdc\xf6\x1cU\xaf\xcd)+\xea\x9cx\xf2\t\xfc\xf6o]E\x08\xfc\xd3mO\xf1\xce\x8dg\
-\x93\x84\xf0\xf0\x13[\xa0V\xe3\xc0\xf6\xad,wS~\xf1\xe6\xeb\t\x81\xd1%\x1e$\
-\xad\xbc\xf1\xe1\xc2\xaf\xdbK\xdc\xa5!\xbf\xe6\xb0E\xd2\x03\x12\x07\xfe\xeaS\
-Or\xebW\xee&\x12\x1e\xd5\x15g\xd2\x9d\xed\xb2{\xa6\x8b\x1f\x06\x8c\xae8\x818\
-I\xe8$\x11q\x12\x81\xc8\xec\x9b\xaeU\xf1\xe4\x18\x9d\x999\x1a3-\xc6\x97\x9eD\
-W7\xf9\xfb/\xde\xc9do\x8a_\xff\xc0\xe5,Wc\xc4\xd8\xf5\xd4\x87\x1b/\xf4\x85D\
-\xe4\x1d\x08B\x97\x0e\xb0s\x1an\xbbg\x0b\xb7\xdd\xf5\x10\xcf\xed\x9d!V#h\xaf\
-\x8e\tk0j?\xb5\xb6\xc6.\xf3g\x14\xb8\x1e\x91\xab\xe8\xf6\xda6\x12\xecy\xd0nq\
-\xf8\x89\x1dL\xcd~\x99\xefoY\xc7\x07?p\x1e:\x18\xfb\xff\xd9{\xf3pI\xab\xfa\
-\xde\xf7\xb3\xd6;\xd7\xb8k\x0f\xbdwOt\xd3-\xf3\xd0\xcc  \x83\x08\x08\x8a\x03\
-\x12G\x8c\xc6\xf1\xe4\x98\xc4\'9\xc6L7\x9eDM\x8c1\xc6LG\x13\xa3GO\x1cbPDeP@@\
-\xe6\xa1\xa1\x81nh\xa0i\x9a\xa6\xe7\xee=V\xed\xaaz\xe7\xb5\xee\x1f\xeb}\xabw\
-\xa3\x89\xc4\xf6\x06\xee}\xeez\x9ez\xf6\xd0\xd5\xbb\xaa\xdea\xfd\xd6\xfa}\'d\
-\xab\xc1T\x1f\xf4T\n\x95\x0c\xec\x1a\xc1\xd0\x10ag\xceTP\x0cPk\xa9\xach\xa3H\
-\xa2\xdc\xc6\xf2\x86\xc8d\x8d\xdc\x02I\x80\xa5\xebd"A\xba\n\xe9[T\x83\xfd\
-\xb1\xc9q\x0e\xbd\xd4b__\x12\xe2\x91\xa5\x82\xe6\xe8* \x83$"KC:IB\'\x16\xf42\
-\xd3\xcf\x96\x0e\\t\xe9\xeb\xf8\xeb\x7f\xbd\x95eG\xafa*\x14\xf4,\x9b\xe1\xb1\
-\xc5\xcc\xcdw\x11M\x9b\x8e\x8c\xe9\xce\xceq\xe7\xba\x9d,\x7f\xe5R\xda\xed\
-\x98\xa1\x86G\x14\xf6hT\x0c>e\xecZJ<\xcb\x19x{\xddv\xff\xa3d\xc10^0D;S\x90\
-\xc6\xe8\xca0LX\xe42fi+\xe6\xf27\xbc\x11\x00\xcf5\x19\xefQ\xd8\xc3\xf7\xabt\
-\xba!v\xdd\xa1\x0b|\xef\xce=|\xee+\xdf\xe1\xe9gv\xe3\xad<\x86\xc6Qct\xf6\xcd\
-\x18g?W\x98`\n!PZ\x11\xeb\x9c(7\xac\xb1\xdaH\x934\xeaPk\xd4ylO\x9b?\xfd__\
-\xe2\xad\xaf}%\x97\xbfz\r\r\xc7.tH\x0b\xa8\x80\xcf\xcboq=\x8f,M\xc9\x15\xb8^\
-@\xa6r\xd6\xae\xbd\x8f\x1bo\xbe\x85\x8d\x1b\x1ec\xa8iDiQ\x14\x11\xc7\xf1`\
-\x87Q\xa9Tp\x1c\x87\xd9\xd9Y\xb2,c\xc3\x86\r<\xf6\xd8c\xacY\xb3\x86\xf7\xbf\
-\xff\xfd\x8c\x8d\x8d\xf1\xd8c\x8f\x1d\xa0\xa0\xeet:DQ\x84\xe7y?\x95\xd5]\x16\
-\x93F\xa3A\x9a\xa6\xf4\xfb}\xa4\x94x\x9e\xc7\xf8\xf8\xb8Y\xd0$\t\xd3\xd3\xd3\
-\xdcp\xc3\r\xdcp\xc3\rT*\x15\xba\xdd.\xd5j\x95z\xbd>\xa0\xb5\x8e\x8c\x8c\x0c\
-\xac\xcaK\xe08\x08\x02\xaa\xd5\xea\x00\xac\xb6,kP`\x86\x87\x87\x07\x00~\x89u\
-(\xa5\x06\xcc\xa7\x85\xdf\x97\xf7\xf8\xfd\xf7\xdf\xcf\x03\x0f<\xc0c\x8f=6x\
-\xff\x8dF\x83$I\x06-\xbbF\xa3\x01\xd2\xb4\xa6\x92$\xa1\xd3\xe9p\xd5UW\xb1n\
-\xdd:.\xbb\xec2\xce>\xeb\xec\xc1{{>\x1e\xf2B\xc2\x9e\xfe+\xc6\xc1\x15\x10\
-\xa1\xc1\x97\xa0\xe7\x89\xc2\x0e\x95\xca\x18\xd2\x81\x7f\xfa\xe4\xfb\xb8\xe3\
-\x91\xad\x9cq\xc2\xca\xc1S5f\xc2t0\xad\xaa\xe7\xda)\x8f=\xb6\x95\xeb\xae\x7f\
-\x80-\xcf\xcd\xb2gj\x0e\xbc&\xb2\xb2\x88\x9e\xae\x90R\x85\xf1:i7$u\x03*\x8b\
-\x86\x99\xdf\xb1\x89^ \xf9\xc2\xff\xf9\x1e\'\x1e\xf7?8\xfee\xe6\xbe=c)\x9c{\
-\xccrn|p\x1bye\t\xa2\xd92v\xae\xd5\x80H8\xa0"\x90\x8a\x96\x05\xe4!\xd2\xcb9}\
-\xcd*.8\xffL.>\x7f1;;\xf0\xb1?\xbf\x8apj\x1b\xefy\xfd\xb1l\xef`\xfa\xf1\xbd.\
-+\x97\xd4\xf8\xe4\x87\xde\xcbI\xabl\xdcTC\xde\x05\xc7\xa6?7G\xa55\xfa\x82\
-\x0eS\x9e\xe7\x83mr\xd9+\x05x\xf8\xb1\x9d\xfc\xfe?\xfc\x90m\xf3>\xb3Y\x83\
-\x08\x07=\xab\xc8e\r\xab1\x84\xb6\x04\xfbff\xc1\x16\xd8\x0exU\x87\x0cM\x9e\
-\xf7\xa0\xd7!I\x05\x96=Bmb9\xfbf\xf6\x81T\x8c\x8e\xae\xe0\xfa\x9f<J\xbb3\xc5\
-\xc7~\xfb\n\x96YF\x02z\x80\xb6\x07\x83%\xa4@;1\xed\xa0\x8d;\xe0/?\xffun}\xe0\
-I\xec\xe62\x82\xc5G\x92\xa66:\xd6 }SiRe\xd0o!\xcc\xb2\xdf\xb3\x88\x92\x10\
-\xf0\xc1\xaf\xc3\xf00\x96J\xc9g\xb6\xf1\xcc\xb6\x9d\xcc\xec\xd9\xc6\xd2E\x13\
-<\xfd\xcc6\xaa\x13\x87S\x1f\x1b\xa6\x938\xa6\xaf\x95\xc4\x84\xedySx\xa4Y\x01\
-\x0b\x95!Q\xc6\xdd^\tr%\xc9\x13a\x04\x1b\xcaA\xc9\n*w!J\xe9\xd9\x90)\xe3\x02\
-\xac\xb5\x01\x8d-\x17d\xd0\xc4\nZx\xc3\xcb\xc8"h\xc7\xfd\x82\xbcP!p]r\xd1\
-\x03\xbb\x8am\x9b\xc3\x11\xa6\xb0d\xb1\xc3\x9a5k\xd82\xdb\xa7\x9bU@\xfb\xcc$\
-\xbe\xa9J~\x95\xce\xfc$5o\x98ko\xb9\x97W\x9dv\x05K\xea\x1e.\xe0V< \xc5\x92\
-\xce\x00\xb0K\xb5\xc1\xb1\x12\xe0\x91\xcdp\xff\xa3\x1b\xe9\xf9\x13D\xca-Z\
-\x88.yl\x83\xf0\xe8&]V\xaf^\xc2\xd1\xab=tnp#\x05$\xda\xc6\x16\x12\xeaU\xda\
-\xc0\xa7\xff\xf1f\xbe\xf1\xc3{\xa0\xbe\x98%\'\x9d\xcb\xae\xc96\xf1s\xfb\x0ci\
-$+\xa0~]\xd0&\xb5D+\xcb\x1cW-\xe8j\x17\xa2\x1e=?@\xa4\t[\x9e\xd8F\xd7\xba\
-\x071<\xce\xc5\xa7M0\x06\xf8\xc8\x05\xcb\xa0\xfc@:\xb7\xd2\xd8\x8e\x87\x85d\
-\xa6\xdd\xe1\x86\x1bn\xe0\xdak\xafefj\x1f\xe3\xe3\xe3\xf4\xfb}\x94R\x04A\x80\
-m\xdb\x83VT\xaf\xd7C\x081\x083*cV\xd7\xae]\xcb\xcc\xcc\x0c\x17\\p\x01\'\x9dt\
-\xd2`WP\xadV\x07\xf7E9\xa9\x97t\xd3\x92qU.\xbe\xca\xddN\x19\xcb\xaa\x94\xa2Z\
-\xad\xb2o\xdf>\xbe\xfe\xf5\xaf\xb3q\xe3\xc6\x01\x161>>N\x9a\xa6LMM\x11\x86\
-\xe1`\x87\x04\xfb1\x8e\xf2{\xc7q\x06\xed\xa32\x13\xbc|\x8d$1m\xc1\xf2\xf9\
-\x0bYJ%i\xc0\xb6m\xe6\xe7\xe7\xb9\xef\xbe\xfb\xb8\xf1\xc6\x1bY\xbf~\xfd \xcb\
-\xa3R\xa9\x0c\xc8\x03q\x1c\x0f\x1e\xf5f\x83\xd9\xd9Y\x1c\xc7a\xd9\xb2et\xbb]\
-\x1ey\xe4\x11&\'\'y\xe2\x89\'x\xe3\x1b\xdf8\x08\x89J\xd3\x948\x8e\xf1}\xff?\
-\xa5\xd5\xf8\x7fr\x1c\xe4\xbb\x10\x05\r\xc7\xa5\x1aX\x05\x1fE\x12G)\x17\x9d\
-\xb0\x92~f\xee\xfd\x92\x84\x1a\'p\xeb\xbam\\\x7f\xdb\x9d\xac\x7fb\x0b\x9d\
-\xc4\xa5\xaf\x87\x10\xce(jl\x82$\x03\x94m\xe8\x9cv\xcd\xacrk\xc62\xa0?\xd7\
-\xa6\xb9l%s\xb3\xcf\xd1\xb4\x02\xbe\xf4\xad[\xf9\xe4G_\xc92\x17\xe6\xe6\x14\
-\xbf\xf5\xee\xd7\xb2n\xe3?\xb0\xcfI\t\xb3\x14R\x01\xc3#\xb0g;\xceh\x13?\xea1\
-\xfb\xcc\x13,\x1fk\xf0+\xbfr\to\xbc\xeceL4\xe1\xb6\x875\x7f\xf2g\x7f\x89\xe5\
-\x05,\x1b\x1e"\x01\x9e\xda<\xcb\xde\xadO0q\xc8*\xde}\xe9\x99\\t\xbc]l\x97\n\
-\xe9r\x9aSi\r\x13F1A\xf0\xf3\xe5\xfe\x0bU\x9de;+\x8a"\xee\x7fh\x1d\xcfM\xcf\
-\xb2O\x8f\x92\xd8.\xb8\x15\x84\xed\x1b\x93\xf6L\x91\xab\x1c\xaf\x1a T\x8c\
-\xce#t\xda+|x\x04H\x1b\xe1\x07d\x9d9\xe4\xf0(\xf4=\x883R\xabA\xbb\xbd\x9bG\
-\x1e\xdb\xcb\x83\xebfYzjkA\xd7*\x1d\xf0\x14\x05\xb69[.\xfcd}\x9f/\x7f\xeb\
-\x1a\x1e\xd8\xb8\x1d\x7f\xd1j\xbaT\xe9\xce&\xc6\xe7\xda\xb6L\xf1P\x1a<\xcb\
-\xb0\xeaJ\xca\xef\\\x84v\xa4\xa1\xf8\xd8>\xb4\xe7\xc9\xbbm\x90)+C\xbe=\x98\
-\x00\x00 \x00IDAT\x96-\xe1\xc8eC\xbc\xfe\xd2q~p\xfd!l\x9e\xec\x10\xc6\x12\
-\xfcQp,CE\xd6\xa5\x10\xa2\xd4\xa2\xc8\x81\xc2\\\xa3\xc9unV\xd8v\x0e\xda3\xb8\
-\x8d\x16 5\x81\xd0\xf8\x85\xfe\x06e\xdef\n\xa4\x99`\xae\x97BU@j\x817\x04I\
-\x1f-\x12r\x99\x90\xa9\x84L\r\x9afx\x8e\x99\xf4\xdf\xf9\xd6+\xf8\xf0\xc7\xff\
-\x96`\xc9\xb1Dn\xcd\xd0\xce\x9a\x13\x06d\xce$\xc1\xc8b\xee~\xe8\x11\xb6\xed\
-\xb9\x82%\xc5\xc2E\n\x03*\xc9"I\x12\xad\xd1\x96E&`\xa6\x07\xf7>\xfc82\xa8cy5\
-T\xa4\xa0\xd2\x00\xcf\x83n\x17t\x82C\xcc\xd9\'\x1eOK\x16\x0b\xab\xcc\xc8`\
-\xdc\x8a\xc7\\n,\xcf~\xf7\xcf\xbf\xc3\xc3\xcf\xec\xa1\x9d\x07\xa4\xa1\x84}s\
-\xa6\x1d\xebW\xcd\xcd\xa5\xfb\x08\xcc\x04frd,S\xc1\xa4o(\xca\xd25\x8c\x8f4\
-\xc4\x19\x1e\xc5m\x8c\xf1\xd0\x13O\x92~\xebV\x86G\xde\xce\x05\xab\xf7O\x02\
-\x96\x96\x85\xe6\xa1\xd4\xb1\x98s$\x80\x9d{\xf6\xf2\xf5\xaf\x7f\x9d{\xef\xbd\
-\xd7\x84\xac\xadZe\xc0\xe5\xa2}U^\xe3\xe5J\xb9\x04\xc3\xdb\xed6\xbe\xef\x93$\
-\t\x96e\xd1j\xb5\xd8\xb1c\x07\xd7_\x7f=\xb3\xb3\xb3T\xab\xd5A{Ik}\x00\x0b\
-\xcb\xf3\xbc\x9f\x99KQb\x89Q\x14\xd1\xef\xf7Y\xb6l\x19SSS\\\x7f\xfd\xf5\xdcw\
-\xdf}\xd4j5|\xdf\'\xcfs\xa6\xa7\xa7\xa9V\xabT\xab\xd5\x81\x06\xa2d\x7f-\x04\
-\xf8+\x95\xca\xe0=\xcc\xcf\xcf\x0f\xec\xd2K\xc1]Y\xb0\xcaQ\x16\x1f\xc3\xd82\
-\xbf\xcf\xb2\x8c\x1f\xff\xf8\xc7\\}\xf5\xd5\xcc\xcc\xcc\xb0j\xd5\xaaA+O)\xc5\
-\xdc\xdc\xdc\x00\xbb\xb0m\x1b\xdf\xf7\x99\x9c\x9c\x1c\xecx\xa6\xa7\xa7\x11B0\
-11A\x9e\xe7\xdcq\xc7\x1d,Y\xb2\x84\xbd{\xf7\xb2x\xf1\xe2\xc1\xb1)C\xa5\xe2$\
-\xc6w\xff\x8bR\xad\xfe\x9dq\x90\x05\xc4\x06\xdb0)\xcaN\xaa\x03\x8c\xfaF\xe6_\
-\xb1\x0c\xec\xf0\xf0\xfa\x9d|\xf3{7\xf3\xc0\x93;\xe8Z\xc3\xcc\xe6>=y$\xaaR\
-\x83\xb8g\x84d\x96\x052/T\xd9\x89\xa1\xa1\n\t\xbd\x1e\x0c5\xc1\xee\xd1\xee\
-\xb7\x19\x1d\xa9\xb1w\xe7$k\xb7<\xcd\x0f\xef8\x827\x9f\xb0\x98E-\t\r8\xf1\
-\xf81\xee\xd8\xd2!\xcc$\xd4F\xa1\x9b\x83]\xa1\x1a\xf7\x10\x9d\xcd\x9cvt\x93\
-\x0f\xfe\xda\x95\x9csj\x8d\xc9>\xfc\xf5\x97\x9e\xe0\xbb\xd7~\x1f\xbf\xd9\xe2\
-\xb9\xbds\x1c{\xdc\x1a\x12`j\xcfN\xaa\xc9>\xae8\xebb~\xf3\xf5\x87\xd2\x00l?3\
-K]<\xf0$ZH\xdc\x17P<\x80\x03@\xb82\xa8\xde\xf7}\xde\xf5\xae\xcb\xb8\xbbW\xe7\
-\x07\x0f>M\x1e\xc5f\x82\xd69\xd2r!Op-\x01q\x9f%\x8bZ,\x19]\x8e\xc83\xa6\'\
-\xf729=K\xa6R\xa4\'\x99\xf5\x1c:\xfdI\x101\x95\xa5\x8bi\xef\xdb\x87W_F\x98\
-\x84|\xeeo\xbe\xc9\xc5_\xfb\x105i4%v>\x8fU1\x17{\xb7\x17#\xaa#\xcc\x03_\xfc\
-\xd6u\xac\xdf\xbc\x8f\xc8n\xd1O=\x82\x91Ed3\xa1\xa1\xfc\x88\x14\xbf^%\xe9\
-\xb6Qa\x9fZ\xcd\'\x8aB\xb2~\xc8\xd0h\x0bG\xc0\xe4\xdc>\xa8hP\nQ\x13\x8c\xfa\
-\x01\x87\x8c8\xfc\xe5\x1f]\x80\x0f\x84S\xdb\x18\xa9,\xa6\xadR\xe6\xbb{\xa9\
-\x0c\x8d\x10\xf6\xa6\xb0\x83\x06\x99r!\x08 \x8b\xd0y\x8e\xb4-D\x96\xa3\xd3\
-\x1c\xdb\x81,\x0fA\xa7X\xb6\xc6Q\xc6\xfdY\xe6}Z\xb6\xa0\x92\x1aA\xa6o\x19_;\
-\x81Y\xa5V\xebMz\xb9\x02\xa7fH\x13\x96\x03Z\x91\xe71J+\x1c\xcb\x1a\x08?\x05\
-\x86\x0cr\xca1\xc3\x1cq\xc88[\xbb=\xb0\x0c\x85\xd6\x08`b\x18\x1a\xa6\x1b\xcf\
-`[\x01\xd7\xdcp+\'\xfc\xc6+\xa9H\n\x9e\xac_\\\x17\x9a,\xcf\xb0\x02\x87\xf9\
-\xdc\xcc\xefW}\xf7z\xb4\x1c\xa2\x1f% *\xa6\x08\xc7)\xb8\x12G\xa6\xd4{s\\q\
-\xc1Q\xd4\x95\xa9\x9a\x8e\r\xbd\x0c\x12\xdb\xd4\xbe\xbf\xfe\x97\x07\xb9\xfd\
-\xb1\x1d\xec\xe9d8CK\xf1\xfc\x06\xdd^DI6\x90smZ2\x81\xa4\x87\x12\x12\xc7\xad\
-\x90j\x97n\x02\xa9\xa8\x18-\x8ep0\xd93>I\x1a\x90$\x12jG\xb2u\xc6\xe7\x0f\xfe\
-\xec+\xfc\xe8\x9f\x7f\rK\x98PL\x0b\x8cf\xcb)\xb0\xba~\x17\xab\xda$\xcf5W]\
-\xf5\x1d\xd6ox\x1c\xcbv\r\xb9\xa0\xdf\xc5\xb5\x1d\xf24\xc3u]*\x95\n\x8b\x16-\
-\xe2\xf0\xc3\x0fg\xe5\xca\x95X\x96E\xbb\xddf\xef\xde\xbdl\xd8\xb0\x81\xe7\
-\x9e{\x0e0\xe0o\xb9R\xbf\xf1\xc6\x1b\x07\xbb\xf3\xb2%S\xb2\xa1J0\xba\xc4F\
-\x9e\xcf^*w\x18\x8dF\x83\x1d;v\x90e\x19\x9b6mbxx\x98~\xbf\x8f\xef\xfb\xc4q<\
-\x88{\x1d\x19\x19\x19`3\xa5\xa8n\xe1n\xa2\xc4.\xb2,\x1b\x80\xd5e!<\xf7\xbc\
-\xf3\x85\xca3#\x0b.\xdeK\t\xb4/\xdc\t\xdcz\xeb\xad\\\x7f\xfd\xf5\x84ah\x00\
-\xf2^\x0f\xdf\xf7\xe9v\xbb\x83\xac\xf2z\xbd\xcea\x87\x1d\xc6\x11G\x1ca\xdec\
-\x9a\xb0w\xef^\x1e~\xf8a\xb6m\xdb6`\x9b\xe5yN\xa3\xd1\xe0k_\xfb\x1a\xc3\xc3\
-\xc3\xf4z=\x1a\x8d\xc6\xa0-(\x840\xf4\xfb\x17y\x1cT\x01)\xb5\xd1\x1a\xd3\xd5\
-\x90\xba\xcc\xa9f\x00\xd6\xd6$\xdc~\xd3ml}f\x07I\xe2\xb1\xbb\xaf\x90#\xcbP\
-\xee\x08 \xa0\xde\x07\xdd7\xf4M\xcfP\x17IB#\xf8\x13\x02*\x1e\x96\x15\x93\xcb\
-\x0cTJ\x84O\x16\xd4\xd8<\xdd\xe5\xdfn\xb8\x85+\xcf\xfeU\xf6M\xf6\xd1\xa3\x15\
->\xfeGo\xe1\x95\xef\xf8\x14C\xf5*s;\x9e\xc5]\xb4\x1cK\x870\xb7\x87\xf7\xbe\
-\xf9"\xde\xf1+\'\xd1\xf0Ln\xc4?\x7f\xe3~\xee{h\x03\xd2k1\xdd\xcdh-Y\x8d\x0cZ\
-\xc4\xc0\xdd?\xb9\x89\xb7]\xfa\n\xde\xf3\xfa\xd3i\x02\x96\xea\x15\x1f\xd2\
-\x06i\x0f\xd2\xf3\xca\x8f\xfa\x8bv#%\xf0\xc7\xff\xfd<\xf6\xfd]\xc6\x86\x8dO3\
-;\xb7\x13r\x1b\xc7\xab\xe0\x08\xc1\x9b.\xb9\x84\xd7^p\x08K\x86`\x91\xb7_\xb4\
-\xb8e;|\xf7\xbbw\xf2\xdd[\xee\xa0V[L\'\x03\xe2\x84\xfe\xde\xd4(\xf4l\x87\xf6\
-\\\x84g\xb9\xac{\x08.<\x15<\xd71T^\x12\xd2$\xa1Zm\xd2\x01\xbe\xfa\x9d\r\xac\
-\xdf2\xc9t\xe2 \x82&(\xdfx\xfd\xb8>\x90c\x91\xc3\xfc^\x86D\x8a\xeb\xa5\xe8\
-\xb8C\xd3\x02\xea\x10wv095\xc3\xcb\x8e>\x9e\xcd\xcf=\x8b\xa8T\xa9K\x9b\x11[\
-\xf0w\x9f|\x1bu\xca\x05\x85f_<I\xddn\xa1\xb1\xb0B\x8dc\'$\xaaO\x86c\xda-\x85\
-\xd7\x97\x12`\x0b\x81-\x14\xae\xa5\x88\xb2\x0eZ\x84xy\x17\x07\x17\x9djd\x1a\
-\xe2\xf75t\xf3B\xd3\xa1\x90Zp\x80\x8ft)\xff.]\x8b\x07\xc7\xbc\x0c\xe4\xda\
-\xcf:r\x05,o\xc1\xab\xcf9\x8d\xcf~\xfd&\xec\xb1\x06\x99**\x92\xceAJ\xc2~\xc8\
-Dk\x82G\x9ez\x96N\x0cC\x0eH\xdb\x1d\\\xfcY\x9e"\\\x97\xb0`L?\xf8\x84&\xccl"\
-\xc0rlr\xe9\x15\x02\xc2>BD\xa0\xe6x\xcbkOgi\x05\xc8{\x90{\x08\xe9\x18\x18\
-\x05\xb8\xfe\xfey\xbe\xf7\x93\x87\x98\x17MT\xdd#\xb5\xab\x84\xb3\xf3\xe0H*\
-\xae\xa0?7\xc5\xf2!\x8f\x97\xb5,.>\xfb"N>\xf5h\x84\r{\xa6\xe0\xe9\x1d=\xeeZ\
-\xf7$w\xae{\x82(\xeab\xd7F\xc9m\x0f\xdd\x0b\xcd\xa7v\x1at\xfa1\xd5J\xc0w~\
-\xb0\x89\x0f\xbe\xf1pc\x89\x0fX\xaeiy\xe19X\x81Y\xf8\xfc\xe4\x8e\xdbyt\xfdz,\
-\xd7Ed)\xbd^\x8f\xb1V\x83\xdd{v\xd2\x1a\x1a\xe1\xac\xb3^\xc1\xf9\xe7\x9f\xcf\
-\xa1\x87\x1ez\x00\xfb\xa8\x1cQ\x14\xf1\xcc3\xcfp\xc3\r7\xf0\xd0C\x0f\r\x8a\
-\xc8\x0bI\xbc\xfb\xb9\xf7\x90\x94\x8c\x8c\x8c\xd0\xeb\xf5\x98\x9f\x9f\xc7\
-\xf3<\xb2,\xa3\xd5jq\xce9\xe7p\xe2\x89\'\xa2\xb5fll\x8c4M\xd9\xb5k\x17K\x97.\
-\x1d\x84+\xbdP\xc1\xdc\xbf7\x84\x10\xf4\xfb}\xa6\xa6\xa6\xb8\xfa\xea\xab\x07\
-\xe9\x81\xe5qh\xb7\xdbx\x9e\xc7q\xc7\x1d\xc7\x85\x17^\xc8\t\'\x9cp\x80\x8e\
-\xa5\x14g\xbe\xe1\ro`\xe7\xce\x9d\xac]\xbb\x96;\xee\xb8\x83]\xbbv\rh\xc5\xa5\
-Z<I\x12\x84\x10\x07\xd0\x9c_\xecq\xd0\x8d\xb4r2-\x15\x9c\xd6\x01\xf6\x1d6*\
-\x87?\xfe\xc3+\xf9\xec\x97\xef\xe6\xaa\x1f?\xc2Xm\x9c\xdd\x990\xed\x88~\x17l\
-\x05a\xd7\xf4r]\x1bO*T\x16!\x94\xc6\xb2]\xd2$\xc3\x91\x10J\x1b\x94$\xce}\x9c\
-\xc6R\xd2\xf99\x1e\xd84\xc9\xe7\xbey\x17\xbf\xf3\x9e\xb3\x99\x8d\xa1\xe5\xc1\
-%g\x9c\xc8=\x8fn\xc6\xaa\x0b\xe2\x99\xf5\x9c}\xe2\xd1|\xe0\xca\xb7p\xd4\xa1\
-\x06\xa4\xbc}m\x8f\xcf~\xf9\xdb<\xb9\x0f\xec`\x8c\x9a\x9b\xd2\x9d\x9c\xc4\
-\xc9\x04\x96\xe3B\x06\rWq\xe5\x15\x97p\xc4\x08X\xaa\x0b*4\xefW\xd8\x03aY\xd1\
-q>\xa8D\x00\x07\xa3\xa3\xf9\xc7\xdfz\x15\x1f\xfd\xe4.\x1e\x9d\xd9\x8a\x90\
-\x0eG\x1e:\xc6_}\xe2\x9d\xd41bE\x17\xb0\x94\xd1\x05V+\xb0t9\x9c\xf0\x9e\xb3\
-\xb9\xec\x82\xa3\xf9\xc0g\xbe\xc1|\xa2\xf0\x17\x8f\x12v\x14^\xad\x89\x88\x15\
-YV\xa5\xd2lr\xfb\x1d\xeb\xb8\xe0\x94\x93\xcc\x0bJI\x9e%\xe4B\xa2qxt\xcb\x14\
-\xd7\xdct\x17\x93\xfd\x1c\xed\xb5\xb0\x83!\xe8f\xd0\xed\x83\xef!\xb2\x10\xab\
-?\x85\xea\xee\xa11\xe4\xb2d\xb8\xc6P#\xe0\xc8#\x0fgxx\x98g\xb7\xee`\xd3\x96\
-\xad<\xbde\x03\xe3^\x80\xebf\x1c~\xc82>\xf5\xb17"C\xa8\x14\x00\xf7\x15\xaf>\
-\x93PT\xd1\x95Q\xba* \xcc`jv\x8e\x9b\xee~\x98p\xd02)Z \x85e\xa7c\xe5\xd4]\
-\xcd{\xdf|9"o\xe3\x03\xbep\x91\xb1D\xa415?e\xac\x96\x15\x99\xcc\n\x89@`!\n\
-\xab\x98\xc1\xf2\xa6\x8cP\xd6\x1aKgH\x9d!\xc9\x06\x8d30\x1b\xdf\x8a\r\x97_x\
-\n_\xbd\xfaFB\x99\xd0\x919d\xa19\xdb\x99\x06a\xa1,\x9b\xa7w\xec\xe2\xa1\x8d]\
-\x16\xad\xa9Q)-b\x04DI\x8ak\xbb\xf4\x8b\xfb\xfa\x86[\xee\xa5\x9f[\xa4R\x90k\
-\x81\x14\xa0\xd2\x98\xc0RX\xe9<u\xa7\xcd[.>\x1d[\xa5\x90u\xc1\x16d\x99\x8dr\
-\x04]\xe0\xea\x1b\xefb\xf3\xf6Y\x18^\x01~\x03\xa5M\xbb\xb8\xe2\t\x82<d\xe9X\
-\x8d7\x9c\xb3\x86\xff\xf6\xba\x138d\xd8|\xdc\\@\xb6\x1c\xe2\x13\xab\\|\xda\
-\xc9\\\x7f\xc78\xff\xfc\xaf\xd7\x12\xc5!Vm\x84\xe9\xb8\r\xae\x8f\x17x\xc4\
-\xd3\x1d\x12W\xf2\xed\x1f\xfc\x88\xb7\xbe\xeepZ\x96\xb9w-\x1c@\x1a\xb32\xd7\
-\xa5\xd7\xe9p\xf3M\xb7\xb0gr\x92zc\x88J\xa5J\xbf3G?\xec\xb2\xfa\xd0Cy\xd7\
-\xbb\xdf\xcb\xca\x95\xabh6\x9b\xe6\xfc\x15BB\xdb\xb6\x07\x16\xe2\x9e\xe7q\
-\xcc1\xc7\xb0|\xf9r\xee\xba\xeb.n\xbd\xf5V\x1e\x7f\xfcq\x96/_N\xbf\xdf?\x88;\
-\xc8\xbc\xde\xcc\xcc\x0c\xbe\xef3:j0\xc9\xd3O?\x9dK.\xb9\x84\xa5K\x97\xfe\
-\x94B~bbbP4~Y@t\xa5R\xe1\xfb\xdf\xff>\xdb\xb7o\xc7\xf7}\x16/^\xcc\xec\xec\
-\xec`\x17\xf5\xd6\xb7\xbe\x95K.\xb9d\x80\x11\x95\xc3u]\x92\xcc\x14S\xcf\xf5X\
-u\xe8*\xea\xf5:CCC\xdc{\xef\xbd\xac_\xbf\x9eZ\xad6(HI\x92\x0c\xf0\x8f\x85\t\
-\x84/\xe6\xf8%#1\xca\xb0\x84Df\xccbD\x8a\xe3\x05D\x1a~\xfd}ga\x0f/\xe6\x1f\
-\xaf\xb9\x93\x86\xe3\xd1\xee\xed\x80J\xbd\xc8\x101\xd2j\xd9\xef#\xc9\xf1\xa5\
-\xc0\x92\x0eB[\xccE)\x19i\xb1=\xd7\xa4\xdd\x0c\x82\x00\xbbQG:6\xfft\xcd\xcd\
-\xbc\xea\xd5g\xb3\xb80\xbe\xfd\xfd\xf7\xbf\x9a\xcb.\xff\r\x8e;\xfc\x18\x8e<\
-\xead\xdey\xe59\x0c\xd5\xa0f\xc1\xbf|\xfbI>\xf3O\xdf@\r-CU\x97\x10)I\x16\'x\
-\xcdQ\xe2N\x8ff-\xc0V\xf0\xb67\\\xcaq\xab\x1bd\xb1\x06\xbbtI:\xb0\xe2\x1f\
-\xcc\xce\xa3\x1c.\xd0P`\xa5\xf0\xf9?\xfcU>\xf2\xfb\x9fatd\x82?\xfe\xbdw\x9a\
-\xce]\x15\xf2\x10\x9aA\x11~V/\xb4\x12Z\xd1\xaaI\xce8v\x84W\x9e}\n_\xbb\xf5Q\
-\xa4\xce!\x8f\x89{]\xc3\xfb\xc4&J%\x8f?\xb1\x998;\t[@`\x0b\xa4]A\xe2\x11c\
-\xf3o\xdf\xfb\t\xbbf#\xfc\xe6\x12"*(\xe1\x9b\xa8\xce$E\x92`g\x1d\x16U2\xc6\
-\x87\x9b\xbc\xe9\xa2\xb3\xb8\xf2\x8a5\x04va\x8b\x01\xd8\xf2pv\xcd\xc0W\xbf\
-\xf6C\xee\x7f\xf0!\x1c\x99\xf0\x89\x0f\xbf\x91\x15\x01\x90\x1b\xb6\x9d\x05\\\
-y\xf9\xabp\xeb\x96q\xe3\xc5D\xd7>\xb6y\x057\xddv\'\xd8M\x03((\rZ\x9a\xc9VklK\
-Pq5\xef~\xcd"\x1c\x16\xe1a,F,m.1\xcb2m\x17\x13\x88\xa6QB\x03\x16B\xab\x05\
-\xbea\xa5\xfd\x8bB\x92\x15\xc5%7\x9em,\x90\xc4(\x03\xb3\x1c\xb1\x18.8c\r?|d\
-\x17^}\x84\xb8\xd73\xa2\xc0$\xc2\xae\xd4\x98\x99\x9f\xa2\xe14\xf8\xfe-ws\xe1\
-\xc9\x17\x9bH\xfb\xe2b\x90E-\xb1]\x98\x05\xeeZ\xbb\x81X\x06\xa4\x96K\x9e\x15\
-\xefE)\x9a\xbe\x83\x8ec^~\xd42\x0e\x9f\x00\xe2\xae\xf9\xecHRm\x0ca\xee^\x17\
-\xb2a\xf3v\xac\x91\xc5\xe4\xf8\x06\xcf\x88B\xbc\xe1atw\x1fi\xd4\xe6\xa2\x0b/\
-\xe6\xd7\xder$\xcb\x02\xb0u\n\xb9B\xa7\x1a[\xb8\xd8\x9e\xe4\xf0q\x98\xb8b\
-\x19\xdb\x9e;\x9ck\xefx\x08%c|\xcf%\x17\x1a\xcfu\x88\xad\x9cDk\xb6M\xce\xb1\
-\xfei\xcd\xe9G\x1a\xb5\xa1\'0,\xbf~\x07\\\x9f\xb5k\x1f\xe2\xd9m\xdb\x19\x1d\
-\x1bgrz\x86\xe6P\x1d2\x9f<\xeeq\xe5\xdb\xdf\xce\x9a5k(m\x17J\xe3\xbe\x85+\
-\xe6J\xa5\xc2\xde\xbd{\x19\x1f\x1f\xa7\xd1hp\xce9\xe7099\xc93\xcf<s\x90w\xcf\
-\xfeQ\x8a\xff\xb4\xd6\x9cp\xc2\t\\x\xe1\x85,_\xbe\x9c4M\x07\xad\xaer\xe2.[O\
-\xf0\xcb) Q\x14\x11E\x11w\xdey\'\xa3\xa3\xa3(\xa5\x06\x8a\xf14My\xeb[\xdf\
-\xca\xab^\xf5*l\xdb&\x8a"\x92$\x19\x88\x1c\x95R8\xb6C\x92&\x03\x1cilt\x8c\
-\x8b/\xba\x98j\xb5\xcaSO=5\xc0\x8eJvW\xa91)\x89\x00/\xf68H\x15\x8a\xc2"\xc5"\
-\xc62:Y41\x90\x82LA\xc4 z(\xdd\xa7\xdf\xcf\xf9\xd5\xcbW\xf1\x87\xbfy\x19\xf5\
-\xfci\x9a\xf6\xb3\x04\xd9s8q\x97\xba]\xa1\xe57\xa8j\x0f;wp\xa9 \x94O\xd8\x07\
-\xcf\x19"K<\xb2\xc4\x03]\x81\xd8\x82\xae&K-\x12Q\xa5\xed\r\xf3\xa9\xff\xfd}\
-\\\xd7\x98\x1a\xae\xa8\xc1o\xbd\xe55\xfc\xf6\xbb.\xe5\x8f>t\x0e\xe3M\x98\x8d\
-\xe1}\xbfw\r\x7f\xf3\xe5\xeb\xa9\x8f\x1fOf\r\x1b\xcai\xda\'\x0bs\xdc\xa0\x81\
-_\xf5\x18\xaf:T5\x9cu\xf2\xd1\x00hG\x98\xc8BY\x98\xfd\t5\x80{\x7f\x19k\x17[\
-\xc3\x08p\x88\x03\xcb\x80\xbf\xff\x83\xdf\xe5\x13\xbf\xf9N\xaa\n\xea\xb9q}\
-\x1a*V\xf1Y\xd2%\x8b\xbb\xe4YH\x92E$yD\n\xbc\xe7]g2\\k\xd0\x9b\x9b1\xbeZq\
-\x08\xbeC}\xa4I\xa7\xd7e_{\x96n\n\x91Rd\xd8$\x04\xc4x<\xb9\x13\xee\xb8\xff\
-\x19\x12\x15\x80]E\xa5\x8a<J\xc1\xf7!p\xb1UD\xa0\xfa\xe8\xf6.~\xff\x83\xef\
-\xe0\xbf\xbfu\r-\x01N\x0c\xc3\x12Z\x12\x92\x1e\xac\x1c\x86?\xfe\xf0%\\v\xf6\
-\xd1\xfc\xed\xff\xfcu\x8e\x9f0\xaa\xed\nfu\xa23\xcdh\xdd\xa2\x8e\xf9}\xf9u\
-\xa8\x0eq\xd8\xc1%1,9mn\x08%,\xb3\xc3\x13\x9a\xc0\xd2T1\xc7h\x14h\x01M\xccy\
-\xae\x88r\xf5\xa3\xd0\x08\xf4\xc0\xb1\xb8d\xa1\x96\xbb\x0f\x05\xda\x14\x8f\
-\xfd\xde\xbeja\x97\x15\xd7\x01\x92\x08\x1f\xb8\xfc\xd5\xe7\xa1\xc3i\xac\xacg\
-\x16Byd\xbc\xc3\x04dX\xe8\xca\x08\xb7\xad{\x8aY\x05\xfd\x05\x9e\x1f\x81\xef\
-\r\xca\xd6\x86\'\x14\xcf\xed\x9bC;\r2\xe9\x83\xf4\x90\x8eo\xbc\x93\xc2\x10O\
-\xc5\xbc\xf6\x95g\x18s>\xc7\x05\xb7\x0e2@9\x86\x08\xf0\x83\x1f\xdd\xcaT\xbb\
-\x87\xe37\xc0r\x90\xae\x0fQJ\xe0\xf9dQ\xc4\xd8P\x9d+^w$CAa\xbd\xa2R2Kc\x076\
-\xae\x0fin|o\x02\x01\xef\xbc\xf2\x02\x9a\x95\x8c$\xdcK\xbd\xa6\xc9\xd4<\xfd\
-\xa4\r\x01\xa4"\xc7\xa95\xb9\xed\xee\x87\x0cA\xcc2D\x17\xd3J\xb0@)\xee\xbe\
-\xf7~\xb4\x02\xd7\x0fp<o@\x9f}\xc59gq\xd2\xa9\'\x13\x85\xe1\x01:\xa7\xd2u\
-\xc1\xb6\xed\x01\xf67>>\x0e\x98\x96M\xb5Z\xe5\xc2\x0b/\xe4\xac\xb3\xcebzz\
-\xfa\xa0\xef\xa1n\xb7\xcb\xb2e\xcb\x06\x00\xf3\x9b\xdf\xfcf\x0e=\xf4P\xc0L\
-\xee%\xb5\xb6\xa4\x01\x97\xdfGQt\xd0\xaf\r\x06\xe8\xff\xde\xf7\xbe7(J\x8dF\
-\x83\x9d;wb\xdb6\x87\x1dv\xd8\xc0\xfd\xb6\xdf\xef\xef\xa7\xeer\xa0Y\xa1\xeb\
-\xb8x\xaew@\xfb\xef\xf8\xe3\x8f\xe7\x92K.\x01\x8c\xfdJyL\x17\n\x1c_\n\xe3\
-\xa0\n\x88i\xe1\x98\x9c\x10\xabp\xf2U8\xe48\xe8\xe2\x91\x03\xaee1R\xb1\xf0\
-\x80\xd7\x9e6\xcc\x97\xfe\xe2\xb78v<\xa1\xa5v\xa3\xfa\xb3$aD\x9a\xe4h\xe1`9\
-\x15\xb4\xed\x93\xe2\x10*\x89\xf4\xeah%\xd1Ij\xe89\xb5\x8aY&\xa5!y\x1c\x93W\
-\xc7\xb8g\xe3V\xbe\xf7\xa3mf\x0b\xde\x85\x0f\xff\xda%\\p\xea\nr\xe0\xee\'4\
-\x1f\xf8\xe8\xd7\xb9c\xe3N\xa6D\x83\x9d\x9d\x18\xa7\xdeDE}\x03\xdeV\x1b\xcc\
-\xcfu\xf0EN\x85\xc8xa\xe9\x98^b<\xa7\x12\x02\x90Uswi\x85 \xc6)z\xe8\xbf\x8c\
-\x91\xb4{\xe8^Ng:f\xa4\t\x95\n\xccw\xc1\xae\x18*h\x1f\xd8\x17\xc3\x1c5\xfa~\
-\x8b\x8e3\xcc\x8c3\xc2n\xd9b\x1a\xd8\xba\x0b\xf2D\x81\xb0\xf1\xc7\xc7\xc1\
-\xb3\x11\xae\xc4\xadz$2\xa5\x9ft\xe9\xc4 ]I\x82E\x17\xdbd\x9dl\x9cd>\xa9\x93\
-\x8b\x808\xd5E(y\x8c\x90\xc6\x900i\xcf\xd0p\x15\x9f\xfd\xc4\x1fr\xf6\xc9M\
-\x02\xc0Is*2%\x99\xef\x11\xf7cF\xab\xa6\xb8\xcd\xcf\xe4|\xf4\x83\x97s\xd2\
-\xaaa\xaa(|2|K\x13\xf6\xbax\xb6\xc6"CG\xf3\x88$\xc6\xc7\xe0\xb4\xfd.\x04\xbe\
-\x8d\xabc\xec\xbcHG/Dm\xb96\xad\tG\x1a\x07T\x17\xa8\xe8\x08/\x8fq\x15\xb8z\
-\xbfy\xa0\xe9\xec\xd8\xe4\xa2h\\\x15\x1e_\x86\x8a\xaa\x06\x00\xb7,\x7f\x16\
-\xfbo<\x85Y\xfc\xdb\x02<\xcf\xc2\xca\xe1\x94\xe3j\x1c\xb2\xa8E\xda\x9d\xc1\
-\xf1\x00b\x1cG\x90G1Vc\x98N.\xd9\xd7W\xdc\xb6\xb6g\n\xc8\xc0\xb1P\x93\x92\
-\xa3\x80\xbb\x1ex\x88\x04\x8f\xcc\xa9\x98\xddCP\xc3r\x03\x84\xb0\xe9\xcc\xb5\
-\x19o59\xfb\xd4\xd5\x85\x9f\x98\x0b\xd2\'\xca\rq0\x046<\xbe\t\x85M\x14\xc5P\
-\x8a\xfdTF\x1a\x87x\xb6\xc3\xd1G\x1f\xcd\xb2\x11\xc3T\x9f\x07\xbaV\x85\x19\
-\xed3\x95\xd9\xf4\x91([\xa0\x85\xd9\xe9-\x9f\x80\xe6\xc8\x1896X\x1e:\xd1da\
-\x0e^\x83X\xf8h\xb7\xc1=\x0fm +>J\x14\xa7\x80\x047\xa0\xd7\x9ec\xcb\x96-H\
-\xdbbr\xdf4CC\xc3\xb4\xdbm\xaa\xd5*\xefx\xc7;\x00\x85\x1fx\x83\x890I\x12\xfa\
-\xfd>Q\x14\r&\xb8n\xb7;8\xdeeqY\xb2d\tg\x9f}\xf6\x0b\xca\xdc\xfey\xc3\xb6m\
-\xa6\xa7\xa7\xb1m\x9b\xf3\xce;\x8f\x89\x89\x89\xc1\xbf\x95\xd6)\xb0\x7fwT~\
-\x0f\x0c2\xc4\x0ff\x08!\xb8\xe3\x8e;\x06\x8a\xf4\xdd\xbbw\xd3j\xb5\xb0,\x8b\
-\xcb/\xbf|\xc0F\xabT*\xfb\xf5_\xc5\xae\x05 \x8a#\xd2\xcc,\x9e\x1c\xdbA\x15\
-\x14\xeaF\xbd\xc1\xeb_\xffz\x96.]:\xb0/Y\xd8\xba\xfa\xff\x86\x0eDKc\x16\xa4\
-\xa5\xc1@\x05\x03\'\xd0\xf2\xd4\xcc\xf7\xba4\xaa\x0e\x1a\x8d\x87\xf9\xc7\x97\
-/\xb7\xf9\xe6g>\xcc\xef\x7f\xfa\x9b\xdc\xb3\xab\xc2sm\x88\xfb]p=*\xbeK7Sd\
-\x16\xd0\xa8\xd1\xd5\t\x04fRC\xcc\xe3\xb8\x12[\xa6\xe8\xb8K\xa43\x92\xbc\x86\
-J\\n\xfa\xf1\xb5\xbc\xeb\x82\x0f\xe1{\xf3\x90JfzU\xbe\xfc\xc3G\xf8\xf4\xbf\
-\xde\x8e\xb7\xf8e\x84\xb5\nA\xbd\x8ek)\xda\xdb\xb7\x81\xedA\xd0\xc4\xa95I\
-\xdbs\x04A\xcaQ\xcb\x87\x11*\x05R\x12\xe1\x91bn\xaa\n\x9e\xc9\xce\xd61\xa8\
-\x1c!\x14B\x04\x07oj-\xc0mU\xc9\x01\xafn1\x9d\x99\x9c\xee\xac\x01\xf7\xac\
-\xd7\xdc~\xd7Zv\xec\x99\xa4\x1b\xa5\xccwC\xe6z1\xd3\xbd\x98\xf9$GKC\xe5[>>A{\
-\xb2\x0b5\xe3\xd3C\xdcA\'9\xd3\xd2\xc6\x93\x19\xa1\x8e\xd97\x1b\xb3\xbc\xe5\
-\x91 \x89\x8b\x06\xcf\x83\xeb\xf7\xa0\xedq\x84P\xe4Yf\xda\x16Qb\x84py\ni\xc8\
-1\xabWs\xea\xf1\x0eu\x1b\\\x85\xe9\xb5\xd9\x02\xa7\xee\x92\xe30\x9f\xe6(a\
-\xb1d\xd8\xc2%\x03\x153\xbbs\x1b\xade\xcb\xb1\x85GPq\xa0\x80g\x1dO\xe0\x08E\
-\x82\xb1\xcb\xd7\x944\xcd\x18G\xdadZ\x19\x16\x860\xedL\x85B\xaa\x1c\x17\x08\
-\xc8\xb0E\xbf\x10K\x9b\xf6\x9c%\xcb\xbflv\x1e\xaap\'\xd6\x82\x05\xf6\xe9\xa6\
-`\xc8\x81\xb5=\x83\xe7,$\x7f\x98\x91A\x0eu\xd7\xe1\xf2\xcb.\xe6O\xbf\xf4\x03\
-\xbcZ\x0biK\xe2p\x1e\xec*\xb9tA\xa5h\xaf\xc9\xf7o\xbe\x8b\xf3\xd6\\\x8c\xb6\
-\xcc\xdf\x10(4\x9a\xc9\xae\xc5}k\x1f\xc6\xf2\x1b$\x14\xf4^\xcb#\x8d\x15\xd2\
-\xf1\xb1m\x973\xcf8\x95V\x11\xd6\x19+\xc7\x90\r\x85\x11\x1e>\xbd\x1d:\xfd\
-\x10\xdf\x1f#U\xa6\xe8\xe5a\x17|\x97,I\xa9\xfb>y\xa6\xb9\xe9.\xcd\xbe\xdd\
-\xcf\xd2Nb\xc6\xc6GiU<\x92\xde<qg\x0e\xcbr\x90\x8eO"\x03bQ%d\x9c\xcc\xae0\
-\x177\r3M8 \xaa\xe8l\x96\x9eh\xb3s\xdf\x1e\x93\xd3\x02\xd4k\xce\xe0\xda\xdc\
-\xf8\xf8\x93\xcc\xcf\xf7\xb0jM2\x1d\x91)cx\xb8f\xcd\x1a\xea\xf5\x1a:M\x11\
-\x85\x1f\x95\x94\xf2\xa7\xa8\xae\xa5z\x1a\x18\xc4\xa8\x96b\xc3\x15+V\xb0z\
-\xf5\xea\x01;\xeb\x17\x1dCCC\xec\xda\xb5\x8b\x89\x89\t.\xbd\xf4R\xd2\xd4\x80\
-\xfcCCC\x07\xd8\x96\x97\xd8L\xb9\x13)\x19X\x07;fgg\x07\x1a\x91\xd2\x9eebb\
-\x82V\xab\xc5)\xa7\x9c2\x98\xf0\xb5\xd6\xf4\xfb\xfd\x03^;I\xf6;-\x97C\n\x89\
-\xc6\xbc\xd7f\xa3\xc9\x9a5k\xd8\xbd{\xf7@\x03S\xb6\x05\x7f\x19\x04\x84_\xc68\
-x\x0cd\xa1\x89\\i\x97\xb1\xa086\xaa5s\x0f)\x8d%\xc1+\x9c\xc2\xfd(\xe4\xef>\
-\xf6v\xfe\xe0\xcb\xeb\xb8m\xfd\x0e\xb6<\xdb\xc5\xb1,\xb4U!\x0b\x0b`\xad^5\
-\xcb\xf1z\xcdl\x07\xba\x1d\xd2$F\xd8)\x96\xeeS\x93\x16Y\xaa9\xf9\xb0C\xf9\
-\xab\xff\xf9j|\x07T/EV\xea\xe8\x04~x\xe3M\xd4k\x8b\x99\x9e\xcb\xc1o\x12\xce\
-\xf7\x08\xf39h\xd5@U!\x83\xb4;K\xb5e\xb3jq\xc0+N\x1b*\x84r\x9a\x8acv\x00P\
-\x12\x05,\x84(\xed\x1d\xcd\xce\xeb\xa7\xf3\x13\xccA([\x19\xb0\xc0Oh\x90%a\
-\x81\x90\x030>\x05\xa6\x8c\xb6\x8d\x1b\xeez\x8eo\\}\x13[v\xcd1;\x9f34\xb6\
-\x94(\x15\xe4\xc2!J!V\x01\xc2\x1b\xc5\x1am\x90\xe5\x90\xcc\xcf\xf1\xc4\xd6}\
-\x8c/Z\xca\xde\xb0G\xaf\x9f\x98\x9e}\xe0A\xae\xf0\xdd\x1a\xd9\x9c`z\xa6\x8d\
-\\\xb5\x08A\x8a\x8fG\x08<\xb3u/a\xea\x929\n\xb2\x1c\xbb\x12\x90\x8512OqEN\
-\xa5\x19\xf0\xf2S\x8e\xa7f\x1b\x93F\x1c\xc0\xd6\xc4\xfd.\x96g\xf4!\x9ec\r\
-\xc0\xe8$\xec\xe3\xe8\x94\xd6\xb2\xe5\x90k:Q\x97J\xadE\x9a\x85\xb8vI\x0b\x8d\
-\x91\x95\x00\x17\x10iF\xd2\x9dG\xb8Fek\x12\xb9\n\xcb{a4 \xaa0\x17\x1f0\xfb\
-\xf2\xdc\xb4\xba\n\xc39\xbd\xf0\xc2;\xe0z\x94\xa6`\x08\xb3\x94Q\x80\xa5E\xc1\
-B+\xd9h\x0c\xfeF?N\xa8\xba\xa6E\x89\x86_y\xcd\xa1\xfc\xd5\x17\xe7Q\xd1,Au\
-\x88x\xef\x1c\xc1\xea\xe5\x84Ss\x10T\xd1:\xe5\xfe\r\xcf0\x9f\x19\xba\xad+\
-\x8dI\xa2F\xb0o\x066=\xb7\x17]Yi\x8a\xa2%MAn\xcf\xe3\xd7*\x8c\rU8\xf7\xaccp\
-\x01\xa9#\xa4r\xd1R\xe2Xf\xb7\xb9\xf1\xe9=\xc4\x1a\x94\x94H\xdbAY>\xf4{\xc8j\
-\x8d<K\xe9\xe5\x92\xfb\xd6?\xc3\xfd\x0f<\x82\x17\xb8\xa4^@\x94\xc4\xa8\xb0\
-\x8f\xa3\x14\x81k\xe19\x0ei\xae\t3H\x84\x8bUk\x91\xd95c{Pm\x99\xcf\xaf-Hzd\
-\xb6M\x9a[\xcc\xc5\xe6P\x0e\x95v\x11\x1a\x1e\xdf\xb8\x814O\xf0\x1c\xc9\xa2Ec\
-\xec\xda\xbd\x87E\xad!N=\xf5tz\x9d>\xd5z\r\x90?%\xaa+\xed>\\\xd7\x1d\xd0e\
-\xcb\xf6Q\xd9BZ\xbcx1\xa3\xa3\xa3\x07]@z\xbd\x1e\xa3\xa3\xa3\xb8\xae\xcb\xa2\
-E\x8b\x00STJ\xbd\xc4Bo\xaa\x85\x96\xefp\xa0E\xfc/:6m\xda\x84\xe7y\xa4i\xca\
-\xf4\xf44\xabW\xaff\xfb\xf6\xed\x9cq\xc6\x19\x03\x16U\xf9\xb5Z\xad\x0eD\x89\
-\xa5\xf6#\x8cB\x02\xdf\xbc\x87~\xd8\xa7\x12T\x0ep\xd9=\xe2\x88#\xb8\xed\xb6\
-\xdb\x06\x82\xcd\x12\xd7y\xa9\x08\t\x0f\xde\x89\xab\x04\x05\n^\xa4\x14\xc5\\\
-S<\xca\xef\x1d)\xca(\n\\\tc\xcd\x80:\xf0\xe9\xf7\x9e\xc4\x87.\\\xce\x9a\xe1\
-\x0c\xbb\xbd\x97\xb4\xd7\xc3j4a\xa8\x06I\x07j\x1a\xc2i\x08{\xf8\x8e\xc3Dc\
-\x18\xdd\xeb\xe3\x92\xd0\xa4\xcdG.=\x81\x7f\xfa\x9dW\xb3\xd8\x87\xb9>\xcc9\
-\xc3t\x84\x83_\x87\xff\xf6\xeboFM?\xc7\n\xdf\xa6\xd6\xcb\xa1\xa7\xf1F\x1a\
-\xc6\x92\xbb\xd223xw\x07\xcb\x1b1\xe7\x9fy4\x93s\x10\xdb\xc6\xac\xb0\xc6\x81\
-\xbd\xfc\x14\x9b\x9c\xaa\xe1\xf3\xe3\x80\xce\x11:\x1b\x00\xb1\x0b{\xeb)\x94H\
-P\xd1\xddP\xa6\xcf\xafB\xc8c\xf2\xcc\xb4*:\xc0n\x05W\xdd\xfe\x0co\xf8\xe0\
-\x17\xf8\x93\xcf\x7f\x97\x07\x9fK\x90\xa3\xc7\x90\x0f\xadf:\x1b\xa2\'\x9aD\
-\xb2\n^\x15;p\x11\xae&\xd7\xf3\xa0\xe6@\xf6\x11\x81\xc7L\xa2@\x04\xe8^b\x14\
-\xe2\xb6\x84\\\x93Y\x01~e\x11\xfd\xf9\x0c\x1f\xa8\xd2\xa3Blb\xeb\xd3\x1e\xa9\
-\xd6\xc4Q\x82\xd7\x1a%\x8b"\xb0$2\ti\x05.q{\x9aSN\\Z\x8a\xa7\x99\xcfS\xb4\
-\xb0q\xabM\x84\xed\x13f\xf9\xc0\xd2\xdf\x06\x9c\xa0A\x1a\x8c\x10\x8b\x1a;\
-\xbb\x02\xb7\xd6*\x80\xf6\x00\xb4\x03\x89\x85\xe5\x0f\xa1\x95\xb9TjJS\xb34\
-\xb9V\xc4\xc2\x02Q\x05Y1\xc5A*2+#C\x17&\x9b6d\x1eh\xb7\xc8Na\xb0;\x94\xe4\
-\xd8d8\xaa\xb8\x98s\xdbl1D\x86\xc9\xac\xcdA\xaab\x82\xf7\x90\xcaGh\xe7\x00\
-\x1c\xcb\xf1\\\xa28\xc7r<\xaa\x02&l8\xf7\x98%,\xb2\xfb\xb4\xa7\xf6\x10,YA\
-\xd8O\xa11\x02\x89\xc6\xb6\xaaD4\xf9\xe7o=\x82r \xd7\x8a\x14A\x02|\xe3\xdbw\
-\xe2\xd5\'H\x85B\xb8\x89q\x81\x8e;\xf8C\x15\xecp\x8a\x97-\xf69\xfb8\xc8\xfa\
-\x11\xbe\xc8p\xf2y\xdc\\Q\x1a\xd9o\xdf;I\xe6\x04\xa4n`\xb0um\x94\xe1\xaa\x1f\
-"\x83\x1aa\xe8\xd0\x0b\x961\xe3\xafb\xd2Z\xcedZa^6I\x82\xc5\xf4+\xcb\x99\x93\
-K\xd8\x9b\x8f1)\x17\xd1\xf6\x16\xd1\xd5.m\x05\xd4+\xe6\x98d!d\x11\xcc\xcd\
-\x82\xb0q\xa4G\x14+f\xe7\xa0\x1a\x98\x90$#8\xcd\x98\x9d\xdbG\xbd\xe1\x13\'}\
-\xa2\xa8O\xadZ%Oa\xf1\xa2%T\xab\xc3\x90\x88\xfd\x0b\xc8b\x94\xf4\xdc\xb2\xc5\
-\xb2\x10\xb4\x06\xa3./\x01\xe0\xd5\xabW\xff\x02\x13\xce\x81CJI\x9a\xa6\xacZ\
-\xb5\xca\xdc\x85\xcf\xf3\x9d{~\xabga\xb1;\xd8\xe2\x01&\xeb\x04\xcc\xe7\xf6<\
-\x8f0\x0cq\x1c\x87\xe5\xcb\x97\x0fZt\x0b[u\xa5\x08\x10LK\xaf\xe2\x07\x03BG5\
-\xa8@!\xdct\x8b\xac\x95U+\x0f\xa53\xd7\xa6\x1aT\x88\xfa!\xa3\xc3#\xa4qB\xd8\
-\xeb\xbf\x04\xcc\xdc\x0f\xb6\x80\x94\x9f\\\xee\xff~!\xbd\xd5Z\xf0\x94\x9f\
-\xf5pQTU\xc2\x07_{"\x9f\xfe\xe8\xfb9\xff\x84U\x04\xe9\x1cy{\x0f\xc4s\x05\x7f\
-U\x98\x9c\x8a~\x1f\xcf\x92Ln\xdf\xcaX`\xb1\xbcn\xf1\x17\x1f\xfd W^\xb8\x86\
-\x97\x8d\x98\xe8\x91-\x93\xf0?\xfe\xeckl\x9a5\x93\xf3E/_\xc9[.9\x97\xee\xaeg\
-p\x15\x08i\x13w\xfa\xb0x1\xccw\xa0Y\xa51\xe4A4\xcd\xe2\xe1*CM3\xf1\xc798\xa4\
-\xf8\xda\xe0\x1de\x910\xf9\xdc\x12\x13\x82E\xd1_/\x86V\x07\xe8\r\x06\xadq@\
-\xe7\xfb\xd9SH\x89\xb6\xcd\xeb<\xb8\x15\xfe\xf4\x7f\xdd\xc3\x97\xbe\x7f\x0f\
-\xebw\xa7$\xd5\xe5\xc4\xde"\xb6\xef\xe9\x93:-\xe2\\\x12\')J\x80ekT\x1e\xa2\
-\xba{\xd1\xdd}XVHm\xc4\xa4?j\xadq\x83\xa0\xf0\xe7\xda\xafP\xe9\')I&\xc83\xab\
-8\xe69\x92\x18\xdb\x86~\xdcGI\xc0+\xe2,\xb3\x1ciIl\x9d\x91\xf6;T\x1c\xc1h\
-\xcb|\x86\x0c\xb0lI\x86"G\xa3\xd1\x04\xb6c\xce\xafN\xc8\xc2y\xb2L\x91(\xf3\
-\xdc\xe6\x90i[\xe4\x19\x88\xe2\xb8\xe8\x01\xe4]\\:Jb)@\x08\xb4(V e\xd4\xa2\
-\x05B\xaaA8\xa3Q\xdf{\x85\xd7\xfd~\xca\xaf\xb9\xce\xb4aV\xe9\xf2b^pI\xcb\xdc\
-\xec*D\xb1K\xd1\x96)fz\xbfmny\x8e\x1c\xbfB\x1c\xa7X\x18\xf6\xd8\xeb.8\x03;nS\
-\xf7]t\xae`f\xd6\xd0\x9b\x85D\x08\x8b\xb9P\xb3\xf6\xd1\xa7\x98\x89 \xb3$\t\
-\xb0\xaf\r\xcf\xec\x98\xa3\x9f\xda\xe4B\xa0\xa2\x1et\xe7\xc1R\xb8:D\xa4s\x9c\
-w\xfa\xb1\xb8\xc0P\xc5)\xda\xb2\x1a\xd2\x88\xe2\x93\xa3\x94"\xd3\n-E\xb1k\
-\x15\xb8K\x96\x82\xef\x93\xb4\xe7\xcdq\xd5\x12\x1dkRm\x81\xed\x80\xe5\x92[\
-\x1eJ\x06dV\x95\xd4\x0e\xc8\xac\x80\xdcv\xb0\xc7\xc7\xc1\xb5`v/\x10\x83\x93\
-\x83L\tZU\xaa\xbe p,,\x01I\xb4\x1f\x132\xbdh\xc5\xd4\xd4\x94a\xfe(\x8dUL\xc4\
-B\x08\x1a\xf5!s\xf4\xad\x17\x86a,\xb4\xf2)3:\xf2<g\xe9\xd2\xa5/\xe8\xff\xbf\
-\x94G\xb7\xdb\x1d\x08\x1f\xe38\x06L\x91\x18\x1e\x1e\xfe\x85\xfe^\xc9&+\x1f\
-\xa5x\xf0\xf9\x18\xc8\xcf\xd2\xdb\xbc\x18\xe3E\xf5\x02\x16\x80\'m:\xd3mN;\
-\xca\xe1\xef?\xfeZ>\xf8\xa6\xb3h\x89i\xe8N\xe1:6\xb4#H\x04\xde\xe2e\xb4;m\
-\x86\x1b\x16\'\xbfl\x11\xd7}\xf1\xc3\\|b\x8b\xe5K`>\x87\xeb\xee\x9b\xe1]\x1f\
-\xfd\x0b\xae\x7f\xe0i>\xf5\xf7\xdf!\x00\xa2\x08\xae\xbc\xe2\x15\xb4\xaa9nU\
-\x9bi\xa7:\x02s\x11\xd8\x19V<\x8dL\xfa\x9c\xf5\xf23\x98\x99\x9a\xa4"\nPUZ\
-\x85\xe1`^\xd8\xfa\xed/z\x07~\x00\xb1\xb0f\x80\xd0\x05U\xf4g=\xdf\xa4\x0e"<"\
-`g\x07\xber\xd5\xad\\w\xcfcl\xde\xd6&S5B\xa7\x85\xb2L&G\xa3U\x07;\xc7\xf3\
-\x04\x1e}\x9c\xbcC\xdd\x8a\x18\n$M7G\xf6f\xe8\xee\xdcL\xd3\x85\xac;\x83L\xfa\
-fe\xa9\x8a\x14\x0c\xa9\x11:G\xa1\x07\xb9\x189\x1e\n\xc7\xe4P$9ZX\xd8\xb6\x85\
-JB\xc8\x13\x1c[\x80\xca\x89{]\x02\xc7\xc6w\xcd"\xc0\x07<4\x0e\x19"\xeda\xeb\
-\x14\x9b\x14\x8b\x14T\x82mk\x1c;\'\x90\n\x87\xfd\xbb\x12\xdf\xd2\x88b\x1f&\
-\xb4\xa24o\xcc\x80LZd\xd2E"M\xaa\x9964Wc\xa5!\x8c[\x0bz?]Z\x17%Yg\xa0S\xecR\
-\xb4\xfa<z\xf5\x7ffH@\xab\xbc\xd8\x19+\xa40\xab\xbf\\\xc1%\x17\x1e\xcd\xd2%\
-\x13XR\xe1X\x05\x9bK\x00\xb6m\xce\xb0\xb0x\xfa\xb9\x9d\xac\xdb\xb8\x9b\xb8\
-\xc0/\x1eyJ\xf1\xcc\xb6m\xc4Z#\xad\xc0\xa0\xe2I\x8e\xe3\xd8\xa8,d\xb8\x19p\
-\xd1\x05\xab\x8a5W\xb1z\xb7<\xd2\\P\x10\xa7p\x84\xc2N3\xc3\xd0\xca5\xec\xddK\
-\xd2\x0f\xa1o\xce\xaf\xdb\xf0\xa9\x8b\x1e\xae\x9ea\xcc\x8b\x90\xe9<"\xeb"\
-\xb3.V\xde\xd9\xff\xc8:\xd8\xd9<\xd9\xfc>\x08g@\xf5\xb0\x9d\x18\x19M\xc1\xd4\
-\x16d\x7f\x0fYg\'y8\x85o%\xd8\xc2\x9c7w\xc0m\x96\xd8\x96\x83\xce\xf5\xbe\xa5\
-\xa4=\x00\x00 \x00IDAT~\x87\xd9<G\xa9\x8c\xa0b\x15x\xd4\xcf\x07\xa1\x17\xee>\
-\x16\x1a\x89\xce\xcd\xcd\xd1j\xb5~\xe1s\xf7R\x19e\xcb\xae\x0c\xb5*?o\xbd^\
-\xff\x85A\xfa\xb2\x88\xe4y>\xc8\x10I\xd3t\xf0\x15\x18d\xa1\xbc\xd8\xe3\xc55\
-\x93G\x92\xa5)\x13#Mj\x02F\x1d\xf8\xf0;\x8f\xe2#\xefz-K\xaa9\xc9\x96\x8d`i\
-\xec\x9aO\xdc\xd9\x87\xe7\xc4\\\xf9\xe6K\xf9\xfbO\xbe\t\xd1\x85*f2\xfa\xe7\
-\xef\xac\xe3\x8f?\xf7%\xf6\xa4\r\xe4\xe8\xcb\xb8\xe9\x9e\x8d<\xf0xL\xdd\x87U\
-\x87\xc0\xeb_w\x1e\xdd\xdeN\x9c\xa61\xe5c\xb6\xc7H3 \x9f\xdf\x8bC\xc6\xdb\
-\xdfr\x06\x0f\xad]\x0b\x98\x05\xa1kI\xfe\xc3\x89\xe9y\xd5\xe1y\xbc\x9e\xc1\
-\x0e\xac<\xb8Z\x14\x0c\x03\xe1\x90\x0bC+\xbe\xea\xbaG\xb9\xee\xf6\x07\xe8[\
-\xc3\xb0\xe8e\xd0\\B\x98\x9a\nf\x8d4\xe8v\xf6"\xe2\x19\xecd/V\x7f\x07Vw;\xb5\
-d\x92\xe5\xb5\x94\x93W\x8dp\xf1)\x87\xf3\xdasO\xe5\xc2W\x9cL\xe0ht\xd4+\xf0\
-\x1bez\xee(\x13\xb5)\x05\xc2\xf2\n\x96\x8dG\x8a\t\x8a\xb2<\x1f-\npY\x99\x82#\
-\xb5B\xeb\x1c\x8d\x01K\xb7?g\nAN\x89\xec\x14\xf1\x9d\xc2Pc\x89\x0b\xacJJ\xd0\
-\x8a<\t!K\x0b\xb8\xa4h\xea\xe8\x04\x938h\x8eR^\x14\x90D\x1a\x9d;\xd2\xc2*\
-\xf7x*7\x0f\xa1q\x04E\x01d\x7f+G\x15\xaf+\xf2"n\xf4g\xa5x\xff\xe7\x86\'-\xd2\
-4C+\x85\xeb\x1a\xd3\xc9,1\x1e\xa1\x17\x9e\x7f\x0eI\x7f\x1e\x9d\x85Pu\x91\x81\
-\x03*%\x8b"\xfcj\reU\xf8\xd1\xed\xeb\xe8h\xd3\x92\xbc\xe5\xde\xfb\x99\x8d\
-\x13R!\xb1\x9c\x8a\xb1x\xf7\xeaX\xb9"\xeb\xcfp\xd6i\xc7\xb2l\xccp\x05L\xaf\
-\xd3\xb0\xe7r\xcbB\x14\xb4\xe4\x86\xe7b\xab\x04;/|\xcb\xc6\x97 \xa4\r\xbeOu\
-\xa4\xc5P \xc8\xba\xbb\xa9\xa8)D\xe7Y\x9a\xbaC\x9d\x0eu\xe6\xa9\xd2\xa6\xae\
-\xe7\xa8\xeb\x0eu\xda\xd4u\x87\x86j\x13\xe4s4\x1b\x9aa9O#\x9ba\xb4\x922,f\
-\x19\x96\x1dto7uO\x19m\rf\'B\x92@\x9c\xa1\x94Dk\x81\xd0\x12\xa1K\x07\xda\x8c\
-86\xda\x9a\\\xed?\xaf\xff\xdeX\x98\x8dQ\x02\xd9`V\xe9333\x07y\xf6^\xfcQ\xab\
-\xd5\x0e\xc0X\xb4\xd6\x84aH\x1c\xc7\x07\x14\xcf\xff\xecXH7.w7\xa5\xb6\x04\
-\xf8)Q\xe2\x8b5^\\$F\x83my\x90jl[\x10`\x04\xb0\xef\xbfl5\x87\xad\xfa\x10\x9f\
-\xfb\xd2U\xac\x7fv\x0f\x157\xc1\xad(>\xf2\xa1\xf7s\xd1\x89f\x9an\xd5\xa0\x13\
-\xc1U7o\xe4\xcb\xdf\xff1\x93\xaaFu\xd1J\xa6\xda\x1d\x86\x86W\xf2\xf1O\x7f\
-\x89\xaf\xfc\xed\x87\x18o\xc1[\xdev\x02\xffr\xcbOp\xbc\x16\xb3{\x12Ds\x14\
-\x19v\xa8\xe8>\xaf<\xe7|,\t\x9d\xb9Y\xd3V\x93\x05\xe8\x9d\xa7\xc5\xe4dv\x15\
-\x0c~*\x87\xa9 \x83\xdb\xa7`\xf9 \xf2b\x07RF}\xe6\xd8\x96e\x96\xb5\xd2\xec>f\
-b\xb8\xf6\xf6\xb5\xc4\xce\x10:\xf3\x8c\xfdH\xda+\x0c\x9d\x12|K\xd0\xdb\xba\
-\x91\xa3\x8e\\\xc1\x99\xc7\x1f\xc9\tG\xae\xe0\xb4c\x17\xb3|\xd4\xbcj\x8e\x01\
-\xf8C`{\x1b6\xac\x7f\x9c\xbd\x93]\xb4\x06iK\xa2$\x82L\x0c\xa2]\xb5e\x17\x8c%\
-\x1b]\x98w/Z4\xca\xb3\xb3s\xa84G\xb86R\x98\xf8P\x1b\xb0]\x9fT\xc7\xdcy\xefC\
-\x9cv\xf8\xc9\xc6]F\xa5xv\xc9\x922\xad\x15\xac\x92@\xa1\xc8\x92\x08\xa4\x85c\
-I\x04Y\xd1o/\x13\x06m@\x1f\xc0\xd0\xcb\x04d\xd2\x06]d\xc3k\xb3\xfbAK\xc3\x13\
-\xd39y\x9a\x19]t\xc9\xcc(c\x00K\xbc)\xcf\x8cD\xff I\xd5\xb6\xa4\xd8\xf9\x80@\
-R\xf5\r\x05\xf6\xc2\xf3\x0f\xe3K\xdf\t\xd8\xdd\xef \\\xdb0\xf4\xe2\x18\xd2\
-\x04\x19T\xd1N\x95\x9f<\xb8\x99\xb7\xb7\r4v\xdb\xbaG\xa1V#\xd5\x1e\x96\xb6AZ\
-x\xaeE\xda\xd9M\xd3\xcex\xcdE\xa7\x19\xbcH\x14\x1fA\xba -\xb4m\xca\xb3\r\x8c\
-7+\xf8dDQ\x88\x10\x0eZK\xf4\xf4\x1chE/O\xe8\xcd\xefbi]s\xe6\xc9\x87\xd1oO\
-\x92ZF9.\xb5\xb9\x04-e(\xbcJh\xf2\xa23\xd8\r\xfb\xd4\xea\x15:\xb3sx\r\x87\
-\xa5c\xe3D\xed>J\xd9dV\x9d\xaa/\xf0H\xd0\xca\xc5w0\xa0\x97v8\xea\xf0c\xd8\
-\xb2m\x92\\X\x85\xc9\xa5\xc0\xb1$\xbbv\xed`\xf5\xaa\xa5X\xce\xcf\x9f>J\x10\
-\xbbT\xa7\xf7\xfb}l\xdb\xa6V\xab\xf1\xd4SO\x1d\xd4y{)\x8cV\xab5p\xe3-\xdd|\
-\x93$a\xdf\xbe}\x1c}\xf4\xd1/\xf8\xef\xfc\xac<w!\x04{\xf7\xee\x1dX\x97\x94\
-\x11\xbf\xe5\xf8\xff\x0b\x08\x90\x84\x19\xaeo\x13v\xe7\xc0\x914}\x93\xd0w\
-\xea\n\x8bo~\xe6m|\xe1\xab\xf7\xb1\xee\xb1\r\xfc\xc9\'\xde\xcfD\xbd\xc8\x7f\
-\xc60V\xbe|\xf5\x03|\xfe\xaa\xeb\x98\xd1\r\x96\x1d}\x12[\xefz\x10\x0eY\xc1|\
-\n\xbb\xfb>\x9f\xfd\xc2]\xfc_\x7fx6\xad*\xbc\xf3\xed\x17\xf1\x85\xaf]\x87\
-\xe7\xae\xc4\x8aS\xd2\xfe$#\x8d\n\xbf\xfa\xf6S\xf9\xf6\xbf=\xc0\x91\x87\x1d\
-\xbe\x7f\xd70\xd0\x0c\x94w\xfa\x81\x13\xd4~\x15\xfa\xcfba\x99I\xa8\xdc\xc3X\
-\xd2\x022\xf2L\x83g\xb8\xfb\x1b6\xf7y|\xeb\x1e\xfcek\x08#\xdfT\xcd(\x86\x86\
-\x03"AF\x1dN\\\xb3\x82\xdf|\xd7\xe5\x9cq\x94\xc7\x98G\x11@k\x9e&0,\xe4\x1e@\
-\x13\x84N\xcd2])\x84\xd6\xa6XY6Bhr\x95\r&n\xa3\xc1\xd6h\x04G\x1f\xb1\x92\xb5\
-O\xde[\xf4\xbcm\x84e\x91%\t\xc2r\x10\x05u\xf5\xee\x07\x1f\xe5}W\x9e\xcc\x98\
-\x05X\x15r\x15a\xc9\xc2\x1a$\xc5\xf8e)\r\x8e\x8d\xe5\x18\'*\x05\xe4Y\x8c[\
-\x86\x91\xe7\x8a\x05ev\xc0P\xcb\x05\xe4\xc2\xe8\xc2\x85\xb0\n\xfe\xad\x1e\
-\x1cS\x95C?I\x07\x18\x8ckyf\x92\x97\x800g*\xd3\x07\xab\xc7Q(\x9d\xe3X\x16\
-\x02M\x1e\'d*\xc3\n|\xd2\x14\x964\xe1\xc2W\x9c\xc1\xbf\xddx\x1fi\x16\x91k\
-\xcb\x08\xec,\x9fTkre\xb3m&\xe3\xfe\x8d\xa0\x02\xd8:9Km|%:\xb2\xc82\tJb+E\
-\x12v9n\xcdrN;\xaa\xb0\x9d\xb7\x8b\xe3"]r%\x11\xd6~\xdc\xf0\xd0%c\x8cT\x1c\
-\xb6G}\xa4[\'\xb7\\#\x0er$"\x9f\xa7\xde\xac\xf0\xcas\x8e\xe7O>p\x02J\x99\xf4\
-\xc9\xe7\xc1\x90\x03\xfc-\xc7,2\x1cJ\xc2A\x11\xd9\x8e1\x80\xf0<\xb3\x10\xe9%\
-0\xe6\x9aV\xa5\x00H\x14:\x0e\xd1\xdaBJ\x07\xa9%\xe4&>\xd5um\x1e\xdf\xb8\x81\
-\xd5\x87N\x14\xf6\x08\xff\xf1(\x0b\xc8\xcf\x9a\xec6o\xde|Pg\xef\xa50\x86\x87\
-\x87\x07\x16\xf6%y\xc0u]6o\xde\xccy\xe7\x9d\xf7\x82\xff\xce\xc2\xcc\xf4\x85\
-\xe3\xa9\xa7\x9e\x1a(\xedKQdY\x90_\n\x05\xe4Ena\x81\xed\x18V\x8d_o\xe0\xfa\
-\x1e\xdd\xde\x0c2KYQ\x81\xc5)\xfc\xc1\xe5g\xf0\xa3\xcf\xbd\x9f\xc3d\xcc(f"m\
-\xe7\xf0\xc9/\xae\xe5c_\xb8\x86iw1b\xd1\xa1l}\xfa9\x9c\xa3\x8e\xc3\xad\xd6H\
-\x94GO\x8cs\xf7\xc6}|\xef\xb6\x19\xa6\x80w]v4\xa7\x1f9\xc2\xd2 GM\xef\xc1\
-\x939g\x9f\xf9r\x16\xb7\xe0\xbe{\xeea\xc5\x8a\x15@\xa9;\xd3\xc6W\xbb\x98\xee\
-J\x1c\xe4\xc0Qr\x96\x8b\xa1\x17~U\x83\x9b\xda\xfcJ\xa2\n\xean\xa2\xe1\x8e\
-\xb5\x8f\xa0\xbc\x06a\x86\x91A[\n\x1cp\xf2.\r\xd9\xa7\x92L\xf1;\xef}#\x97\
-\x9c\xe0q\x88g\x94\xd8\xd5<\xc4K\xba4\xed\xd4(\xb13\x901\xcc\x84\xb0{r\xca\
-\xb4B2Hb\x058\x08\xd7E\x93\x93\x17\x1c}\x89Y\xa1z\xc5\xde\xe8\xf4\xe3VRu\x13\
-l\xdbxpd\x08\x90\x0e\x99\x15\x90X\x15BQa\xf3\xee9\xae\xbe\xf1Y&3cA\x12I\x9f\
-\x8c\x80\\V\x08\xb5G&\x1cB\xcbe\x1e\xc9\xa6\xc9\x98>\xa6\xa8M\xcd\xa7\x803\
-\x98\xe8\x7f\xd6(\xf5\x1aJ\x83\xc2.\x8e\xb7A#4\x92D\t\xfa\x99fO\xdf,\x16\x12\
-\x018\xc6nE\x0b\xcfP\xac-\xffg\x9e\x99\x17:\x04FDX\xc6\xb6Z\xb6Dhcs\xe2\x16\
-\x98\xc0\xe5\xaf9\x89\x91\x9aK\xc52\xdeX\xd2\x16\xb8\x81G\x92\xa4\xa4\xc2Cy\
-\x8b\xb8\xee\x8e\xf5\\s\xf3CP\x1f\xa2\xa7\x058E~\x8a\x12\xe88\xa6\xee\x08.\
-\xbb\xf0\xe5\x04@\xd56\x01_\x86\x92l\xd6oR\xec/ \x87\xaf\xa8\xb1|l\x18\x9f\
-\x1cO\x08\xc3\x0e\xc9\x81X\xa1{1\x9dN\x8f\xc7\x9f|\x82]s\xd0\x90P\xc3(\xf4\
-\x87(T\xfa\xecW\xfc\xd7\x8a\xdfU\x80\x99}\x1a\x9d\x99\xfbG\xe60\xec\x99\xdf{\
-`p\xb4\x18\x92\xa8(\xf4\xb6\x8d\xa849\xff\xbc\x0bp-\x0f[\x1a,\xc4*4\xff\x0f<\
-p\x1f\xbd\xfe<\xfb\xedb\xfe\x83c\\L\x8a%\x13\xa9\x04\xd37m\xda\xc4\xce\x9d;\
-\x7f\xe1s\xf7R\x19K\x96,\x19d\x9e\xe4yN\x9e\xe7T*\x15\x1ey\xe4\x11\xf6\xec\
-\xd9\xf3\x82\xfeFY<\x9eO\x87\x0e\xc3\x90\x07\x1f|p`\xa2\xb8\xd0\x82\xa5\xb4\
-\x84\x7f\xb1\xc7\x8b^@J\xf7\xd1~\x9a\x12\xab\x84z5\xc0\xb7\x15"\xcd\xf1$\x0c\
-\xf91V\x16\xb2\xa8\x12R#Dh\xf8\xb3\xbf\xf8*_\xf8\x97o\xb3\xe2\xf83\xc9\x82!\
-\xe20\x83f\x8bTi\x92\xed\xbb\xa9\rO\xd0\xcd\x03v\xcc)>\xf7\xc5\xff\xc3T\xc7\
-\xac\xde?\xf0\xce7\x11\xee\xdb\xce\xb0\'\x18\x0el\xde\xf8\x9a\x93yn7XN\x80\
-\xd6\x82T\x1b\xc3T\xa3:gP\x14\xc4O5\xae\x8aq\x00\x85Q\x0c\x8a\x07P\x18\xfaA\
-\x96\x1a5\x89\x90\xb6iSH\xd8\xba}\'\x13\xcbWA\x94\xc2\xdc\x1cR\x19\xb0\\\xc4\
-}\\\x9d`%\xf3\xbc\xe2X\xbfXJj\x84\xea\r\xc0c#\xca0}d\xdf\x85m;a>\xce\xa86G\
-\xb0\xdd:yV\x90\xa5\xa5 \r{\x08\xa9\xcd\xaa\x05p\x84\xc4%\xa5\x06\x1c\xbb\
-\x12Znf\xdaRJ\x99\xb7-l\xb4\x1d\x10\xe2\x11\xd9U\xda\x99\xcf\xdf|\xe5*\xee{2\
-a\x1e\x98\xca\x8c\xf2\xb9\x07\x84\x9e\xc5<\xd0\x06\xb6\xf6\xe1\xaa\x9b\xd7\
-\xf2\xe8.\xf3o^\xabF\x8cM?\xca\rsJ\x98\xfd\xd8B\xd2\x9ea\xe8e\xe4\x85\r\xc9\
-\x01\\pa\x91h\x8b~n\xb1}\n&#\xb3\x92\xee\x03\xf3Z\xd2\xc3\x144%\x0e\x1e\x05\
-\x11\x08\xc2~\x1f\x95\xa6 -\xdc\xc0#\x8f\x15~qo\x1e\xb5\x0c\x1a\x9e\xa6\xe6(\
-,\x15A\x16\x93\xe7)\xc4\t\xda\xa9"\xeb\xe3\xdc\xf5\xd0&\xee^\xfb(Ak1:\xca\
-\xc0\xf5\xc0rp\xa4\x80\xb8\xc7H\xc5\xe2\xbc3\x16\x17\x84\x04c\xa9\xa2\n,`0g\
-\xe4\xa6`\x8dVa\xc9H\x83\x8a\x05\xae\xd4\xa6\xba\xd8\x8e\xb9QF\xc6\xb1[\xa3\
-\xac{\xec\tn\xb9{3\xf3\x05n\xe1.x8\xfb\x8f\xe2\xe0Z\xdd=\x03\x7f\xf2\xf1?\
-\xe3\xaa\xabo\'\x07\xdaaa<P\xcc\xfd\x01\xd0\xf0 (l\xdc\xd3\xae\xc1\xb6\x96\
-\xacX\x89\xeb\xfa8\x96\r*G\x17\x89xO>\xb9\x91N\xa7C\x9e\xff|\x90x\xe1\xaa\
-\xbat\xe1\x8d\xa2\x88\x87\x1f~x\x90\x9f\xfe\xff\xe6\xd1h4\x18\x1e\x1e\x1e\
-\xb8\xfb\x96\x9a\x8f\xa7\x9f~\xfa\x05\xfb}\xfd\xac\xddG\xa9\xea\x7f\xe2\x89\
-\'\xe8\xf5z\xa4iz\x80\xcd\xfd\xbf\xb7c\xf9\xaf\x1e/j\x01\xd1\xc2\xb42\x94\
-\x04\xc7\xf1p\xa5[L\xbc\x19He&LRH\xfb\xa0S\xb4\x8a\xb9\xe5\xc6\x9bx\xf2\xc9\
-\x8d\xd8\xb6M\xa7\xd3)\xda\xf0\xcaP\xae\xd2\x0c\xc6\xc6\xe9v#\xf0j\xe0\xd7\
-\xc0\xab\xf2\xf9\x7f\xfaW\xa6\x15\x9c|\xd8\x10\x17\x9ew\x16\x9e\n9\xf5\xd8\
-\xd5\x1c\xb7\x12\x1eyd\x9a\xdd{&Y\xba|%\n\xb3!\xc8\xe2\xd8L\xaa\xff\x91\xd5\
-\xf3\x0b<w\x8e\xe3\x90\xe5&\xd2\xb6\\\xab\xf9\xbeon\x1e)!\xf0\tlA\xdc\xebb\
-\x0bp\x1c\x0ba\xd9\xcc\xc6\xa6C\x10iA.\xab`\x05\xe4\xca\x07\xa7\n\xd2&\xca!\
-\x14\xf0\xe5o\xfe\x10\x194\xd85\xdd#U\x8e\xd1A\xb8UtlZ1\xa0H\xe3h@\x9b\x8ezS\
-\x04(\x16\xd7\xe0M\xaf>\xc3`/:\xc3\xf2+f\x92\x8a2r\xb7Nf5\x88\xbcafU\x9dO\
-\xfd\xe3\xb7\xf8\xcb\xaf?\xc2\x93\x93\xa6`\xb4\x81\xb6\x80\x1d9<2\x05\x9f\
-\xfa\xf2}|\xe2\x8b\xdf\xe5w\xfe\xfc\x8b<\xbc\x0b\xa6\xb5)$V\xd0`\x10ld\x19\n\
-n\xa9\r\xb2\xb2\x14\x91\x9a\x14\xb8$\xc9L\xb1\xf4+f\'\x92C.lb\x19\xf0\xd5\
-\xab\xefc\xdb\x9c)\\s@\xaf\x10\xdc\xf5\x8b\xf7\x91=\xef\x12\xfe\xcf\xdfT\x92\
-\xa0RA:\xa5j^\xe3\xba\x12\x87\xfdN\xc8\xef~\xcb\xeb\xb0\xd2y|\x91\xe2;\x90\
-\xf7\xe6\xa9,^\x8c\xca\x15\xddT\x18M\x91\x08\x08\xfb\x19\xf6\xe88\xf4C\x98\
-\x9f\xc3\xd2\x11\xbeN8\xef\xf4\x13YR1\x97\xb4M\n*F\x06\xc1\x80\xf6\xde\x9b\
-\xef\xe0Y\xe6\xb8H\x05\xef~\xdb\x9bH\xe7g\xa9y\x96\x896\xa8\x04\x06\x1f\xeb\
-\xc7\xf8\xad\t\x08F\xf8\xe2\xb7\xbe\xcf\xf7o\xddD\xbf\xe8&&\x14\x14tL\xb1\
-\x8d\x8a\xe3\xb3y\x06\xfe\xe83_e\xd3T\xc6?|\xed:>\xfa\xd9\xef\xd1\xb1a\n\x93\
-KU\x1aBZ\x14\xf0R\x9e\xe2\xd4k  \x89b^\xf7\xba\xd7\xb2w\xdfn@Q\x0b|\x84\xca\
-\xa9\xd7\x9b|\xe63\x9f\xc5\xb2\x1c\xe2\xf8\xa7M\xfdJf\x120\x08dZxn6m\xda\xc4\
-\xcd7\xdf\xfcKYA\x97\xb9\x1d\xa5hpaf\xf8\x7f\x95c\xed\xb9\xe7\x9e;\xb0&\x19\
-\x1b\x1bcff\x86\xe5\xcb\x97\xf3\xf9\xcf\x7f\x9e-[\xb6\x0c\x9e\xb7\x905\xb5\
-\xf0\xbd\x95\xe6\x8b\xe5\xf7`l\xe0\xbf\xf2\x95\xaf\x10\x86\xe1@y^\xd2y\xc30|\
-I\xec>\xe0%\x80\x81\xa8\xe2~/\x15\xdb\xa2\xe0\xfc\x98_\n\x10\x85\x99\xa1L\
-\xd1\xd8\x9c\x7f\xfe\xf9\x04\xa3\x87s\xd5\xb5\x0fr\xc3\xdd\xebQ\xd5:vc1\xda\
-\xf3\xc9\xa3\xc2\xab"\xa8\xe2)\x9b\xb4\x13\xd3\xed\xf6\xd8\xf0\xd8n\xee\xbc\
-\xf7\t\xdep\xd6Q\xbc\xef\xfdg\xb1\xfe\xa1Gy\xc7\xe5\xaf"O\xe1\xbe\xfb\xeeC\t\
-\x8f\xf1\xa5-\xac\x02+p\xbd*\xe8\x10\x15v\x91\x95\x1a\x14\xda\xd0\x9f*\'\x07\
-nG\x8a\x9f\x8b\x1e~\xf15\xc92<\xdb&\x0eC\xf0\xab&\xbc\xc7\x96\xa4\xfd\xb6iBg\
-)\xbd^\x17\xe9\xbb\xa4*\xa5\x13*jN\x83\xbb\xd6u8\xf7\xd4\x06\xe36L\x03\x81\
-\xb0\x91\x81m2\x9e$<\xb5\x13\xfe\xe6k\xd7\xf0\xd0\x13\xdb\xc9T\x9dj}\x04\xcb\
-\xaa\xd1\t\xe7\xa1\xdf\x03W!-\xb0m\x89.\xdcg\xd1P\xb3%\xd0g\xd8\xaf\xf1\xeaW\
-\x1c\xc3\xd7n\xb9\x1f\xc7\xab1\xf7\xe4FXq\x04\x95\xe1\t\xfa\x9b\x9e\x81f\x80\
-\xf6[\xc4\xbd\x94\xa7v\xcf\xb3\xed\x9a[\xb9\xfa\x86\xdbX\xd4j0:<B=h\xa2\xdd\
-\x80uOmc\xef\\\x9b\x91\x97\x9d\xc6\xb3s\x1d\xde\xff\x91\xcf\xf1/\x9f\xffm*Cf\
-\x1e\x9d\x08\\C\xd3\xc5L4Il\xf4\x80\xc3U\x1b\xb2\x1ei\xdc\xc7m\x8c\x90[\x1ey\
-\xbf_\xd8\x14\xb8\xd8\xfe\x10y*\xb9\xe6G\xb7\x13E}N?\xee0\x16\rU\xa8\xfa\x1e\
-\xd3\xd3\xd3l\xda\xfc4\xbd\xe9\xad|\xfec\xefc\xbf\xe2\xe6\x17\x1d\x12\x16^w\
-\x85\xb7\x9b\x8b\x99\x90_~\xc28\xa3U\x9b\xb8\x9b\xd1M{\xe0U\xe9w\xe7\x01\x8d\
-\xd6\x92\x04a\xcc\xcb\xb4&\x8b\x0b\xab`\x17|b|\x1dr\xdei\xc7\xe1\x02\xbeP\
-\x86\xc2 -\xc3\xc0\xb2$Z\xe74k>\xe8\xcc\xa4\x1cJ\x9bU\xcb\x03.\xbb\xe4<\xfe\
-\xf7u\xf7\xe3L\x1cK:\xbd\xdbh|\xb2\x8c\xee\x8eY\xa8\x8d\x90x)\xff\xf0\xf5\
-\x1f\xd0\xde}\x1a\x97\xbd\xf2LV.\xb3\x8d\xe7\x99cv\xb9\xd39\xfc\xe8\xb6\xdd\
-\\}\xc3m\xac\x7fb;\x9e\xdf\xa0\xd2\x1c\xe7\xab?\xb8\x9bM\x93!\xbf\xf3\x1boc\
-\xf5\x18\xac\xf2\xcc\xaeH\xe7f7h\xd9\x05\xe1\x03\x89[\xf7x\xf9Ygr\xd3m\xb7\
-\xb0e\xeb\xb38\x9eE\x1c\xf5\xa9\xd7\x03z\x8e\xe4w?\xf2{|\xfc\x13\x7f>02\xcc\
-\xb2\xec\x80\x08\xda2\x9c\xa9\xdb\xed\x0e\xa2]\x1f}\xf4Q\xbe\xfb\xdd\xef\xd2\
-\xef\xf7\xd1Z\xbfd\xf4\x0c\xbf\xe8\x98\x9b\x9b\xe3\xd2K/\xe5\xdb\xdf\xfe\xf6\
- \x93\xbd\xcc\xf0\xf0}\x9fk\xae\xb9\x867\xbd\xe9M\xac\\\xb9\x12\xa5\xd4 \xe4\
-j\xe1\xe7\xaeT*\x83\xdd\x8b\xef\xfbDQ\xc4\xcd7\xdf\xcc\xc3\x0f?|@\x8e:0\xf0\
-\xd6*\xdbe/\xf6\xf1{\xd1\x0bHy\xcb\xda\x85L\xaf0B*\xa87&\xbc)\xb3 \xc3\xf4\
-\xbd\x1b\x1e\\t\xcaJ\x96\x04U\x8e\x1c\xf7\xf9\xc6Mw\xa0\xdc&\xdb\xc39Pu\x18\
-\x9a\x80\xf9\x0e\xf1\xec\x14\x8b\xc6}\xba\x93\x11\xb1\x05\x9f\xff\xca\xb5\
-\x1c}\xfcQ\xac\x1e\x85\xf7|\xe0]\x9cz8\xeci\xc3#\xeb\xd6\x11*\x9b\xdd{s\x8eX\
-bQ\x1b\xec\xfde\xd1\xa8\x97/l\xb71\xe0\xcf\x9b\xff[\x82\xc5J)\x04\x02\xdfu\
-\x083\x85\xedHN9\xe6p\xae\xbd\xeb1\xdc\xe6\x04Xu\xfaS\x19~s\x94(t\xe9\xf541\
-\x0e\x9f\xfe\xd25\xdc\xfd\xf01\xbc\xe3\xf2S8d\xc2P\x96\xdb1<\xb9\x19\xee\x7f\
-\xf01\xfe\xef\xf6\xde=^\xaf\xaa>\xf0\xfe\xee\xb5o\xcf\xf5\xdcON\x12B\x12!\
-\x01\x02\x89\x04\x10\n\xcc\x0b\xa8\xa5(W\xc1)h\xed\x14\xd1\xd6\xa9\xb5\xce\
-\x0c\xf3\xfavF{\x1bk-\xe3\xdbw\xea\xa5/N;~\xc6Z[\xdb*/\xbdX\x10\xc4(UD\x054\
-\x02\x12/\x90\x90\x0b\xc4\x84\xe4$\xe7\xf2\xdc\xf7u\xbd\x7f\xac\xbd\xf6s\xc9\
-\xc9\x85\x13\xe7\x93dX\xdf\xcf\xe7|\xcem?{\xaf\xbd\x9eg\xff~k\xfd\xae\xdf\
-\xdd\xbc\x85\xad{\xa7i\xb9\x05\x1c\xbfB\xab\x15b\x8bPI\x10\xdb\x05/!\x0e"\
-\x84+\xb2]P66aA\xd4\xc4sJlX%\xb8\xfd\x96k\xf8\xf8\xdf>\xc8\xd0\xea\xa5\xb4\
-\x92\x0e\xad\xad?\x86\xa9\xd3 \xe8d\xed\x8a+H\xbfH\x9c\xb6\x99\xee4\xa8\x1d\
-\x88\xd8S\xab\x11\x87s\xcc6:\xc8\x10\xac\xa5K\x99Ml\x82F\x83\xd1\xea(w\xfe\
-\xee_q\xf7\x1f\xdd\xce\xd9\xc3j5\xec\xc7\x10\xb5\xda\x94\xab\x1e\x0e\x12\xd7\
-\xb2Y\xb9\xd4b\xbc\xec\x91\x14|\xa6;M\xd5\x13\xc3\xf6\x95]\x0eI\x1c\xc4\xc4\
-\xa9`hj5\x8f\xff\xf0\x05\x1e}\xfc\xfbxV\xccp\xb9\xacJ\\{.\xe7\x9d^>N\xd5\xa1\
-Mg\xa8wKG\xd2\x91bI\x81c\xa9v5\xab&\xe05\x1b\xce\xe4\xa5G\x9f\xa6P\xa8\xd0\
-\x89C\xb5\xb0\xb1\x1de\xf3L\x048EUm\xa0\x15\x82m\xe3;\x11vPc\xe5\x92\x02\xd7\
-\\^ nA\xa1$\xba\xd7\xb5$R\xa6$I\xa8\xfc\x80Rb\xdb\x02a\xa92\xfe\xff\xe6\xd6_\
-\xe0\x1bO>\xcb\xdex\x9ezQ\xa8\x90g\xcf\x85\xf2\x18\xd4\xa690\xd3!\x19\x9a\
-\xe0O\xefy\x84\xbf\xfc\xe27X\xb5j%k\xcf^\x03\x8e\xc7s;v\xb3c\xcf\x0c\x8d\xc8\
-\xa1\x169H\x963z\xc6\xab\xd9?\xbd\x87\xd2\x19\x93ly\xa9\xc5/\xfe\xda\x87\xf8\
-O\xbfq+o\xbdp\x92\xb3&<\x8a\x85\x02\xc2\xca\x84\x91-\x88;\x11\x8e\xef"\x85\
-\xe4\xda\xeb\xae\xe1\x0b_\xf8\x02a\x1c051\xca\xbe\xe9\x97h5m\xe28\xe1\xbf\
-\xfc\x97?\xe0\xc6\x1bo\xe4\x8a+\xae\xc0u\xdd<\xd3\xbcT*\xe5\x8a\xc4q\x1c\\\
-\xd7\xe5\x9e{\xee\xe1\xc1\x07\x1f\xc4\xb2,\xea\xf5z_\x81\xc1S\x15\xdd\x07\
-\xe5\x97\x7f\xf9\x97\xf9\xe8G?\xca\xf2\xe5\xcb\x01\x95q?77\xc7\x03\x0f<\x00\
-\xc0u\xd7]\xc7Yg\x9dE\xb1X\xa4\x9dU0.\x97\xcb4\x1a\r\xca\xe5r^\xa2\xe4\xa5\
-\x97^\xe2\xef\xff\xfe\xef\xd9\xb4iS^[L\xfb;\xe28\xce[\xed\xc2\xc9\x91Lx\xc2\
-\x15Hwe/\xbb\x02\x1b\x1b\x84 \xb1P\xdd\xf6\xe86q\xd2\x99\xc2\xff\xc7y\x93\
-\xfc\xdcy7p\xfa\xd2a>\xf6\xf9\xafA\xa3\x89\x7f\xe6%\x04\xf5:\x04-\xdc\xf1\
-\x02\xcd\xc6~\x8a\xc52al\xd3n\x16\xf9\xc0\x07\xff\x89\xbf\xf9\x93\x9by\xc35e\
-<\xe0\x91\xaf|\x13i\xd9X^\x85\xaf|\xfdQ.{\xf5U$\x0e\xb4CI\xd1\xb5\x11\xa52\
-\x0b\xec;z\x18\xa8\xc34\x10\xf8+\x01\xdf\xf3\x89\xc2\x16\xaek#\xc2\x10\xc7-p\
-\xd5%k\x99\xfck\xc1\xc1\xfaA\xd2\x92\x0f\x96E\xab\x1d(\xa7\xaa7\x8cW-\xb2{\
-\xdb\x8f\xf8r\xfc<\xff\xf8\xe5\xef\xb0t|\x08\x0b\x15\xc6\xe7\x95\xaa\xbc\xf8\
-\xd3}\xd4\xe7\x9b\x8c\xad\\\x81\x8c\x1bXB"[-b\xdbA\x94<R\x0b\x84m\x91\x92\
-\xa8\xe2u\x9e\x9b\x85\xc2\n\xb5:n7\x91I\r\xbf0\xc2\xaf\xdd\xb4\x82g~|&\xf7m\
-\xfa6KWo`o\xd9A\xbe\xf4\x02\xfe\xea3\t\x1a\xf3`\xfb\xa4VJd[\xe0\xdbD\xc2\xa6\
-\xe3\xf8\xa4\x08d)\xa2\xbcb\x8af\xbdA\xd0\xa8#\xaaS\xcc\x07\xb3\x04{\xe6\xf8\
-\xfd\x0f\x7f\x8e\x8f\xfe\xee\xbfa\xed0\x08\xc7U\xe1\xda@\xd9\xb7\tPmVN\x9b\
-\xa8\xb0g\xba\x8e\x10.\xa9\xeb(\xefn\x1a\xd2\xad{eQ\xab\x85X\x0ex\xee(\x85\
-\x92OG\x08\xf6\x1d\xdc\x83\xe3\xc0\xea\xe5\xfeq\xa4\x11v#\xc2\xd4\xeeW\xc7\
-\xcdi\x7fW\xb6\x0b\xc9~\xbd\xfe\xe7\xaf\xe4_\x1e{\x12\xe1\xc0\\\xad\x81X2N\
-\x1aHesJS\x15\x91\xd6Qy,\x96\r\x04\rdp\x90+/\xbdB%\x05\xca\xac\x82\xb0\x95=r\
-\x8eM\x9c\xa4\xb8\xae\xa3\xa2\xcb\x12\xd4{c\xa9\\\x8c\xb3O\x87w\xbf\xfdf~\
-\xffc\x9fatRPK\x03\xc2\xf9\x04\xfc\xb22\xcf\n\x9bzlQ\x1c9\x93\x83a\x8b\xb9\
-\xbd\x01?\x9e}\x8e\x18\x8bz+ I]p*X\xd5%P\xb0xiO\x1dB\x9b\x96\')\x95\xca\x14&\
-O\xe3\xbf\x7f\xea\xd3\xac\xbe\xe3\xf5\xac\xfe\x85\x8b)\x17K\xc4i\x82-\\\xe5\
-\xces\x04\x08\x18\x1d\xafr\xd5UW\xf0\xedo?\xc2\xd3O?M\xb9X\xa0\xe0\x15ISh\
-\xd4;\x1c<\xf0\x1c\x9f\xfe\xf4\xa7y\xf0\xc1\x07Y\xbbv-\x17\\p\x01g\x9ey&\xb5\
-Z\x8d}\xfb\xf6Q\xab\xd5x\xf6\xd9g\xb9\xf7\xde{)\x97\xcb,[\xb6\x8c\xe7\x9e{\
-\x8eB\xa1\xc0\xe4\xe4d^\n\xe4TEGD]t\xd1E\\\x7f\xfd\xf5<\xf8\xe0\x83\xacX\xb1\
-\x82\x83\x07\x0f\xe6m~\xbf\xf9\xcdo\xf2\xdd\xef~\x97\xd7\xbe\xf6\xb5\\{\xed\
-\xb5y\xc0\x0e\xa8|\x18}\x8e/~\xf1\x8b<\xfc\xf0\xc3\x84a\xc8\xf8\xf88sss\x04A\
-@\xab\xd5\xca\x9be\t!\x08\x82\xe0\xa4H"\x84\x13\xac@\xba\xe1\x87i\x16\x92\
-\xe3\x91\x97\x9d\xb0t\t\re\xcf\x055X\x1fpc\xb0\xec6\x1ep\xfb\xf5W\x80]\xe1O\
-\xbe\xf8\x04\xdbv\xfd\x08\x96\xaeQ\xe59\xe6_\xc0\xb1c\x82\xc8\xc1q&\xf1\n\
-\x13\xfc\xe4\xa9\xad|\xe1\x81\x03\xfc\xfau\x13\xcc\x1c\x88x\xf8\xab\x9b\x10\
-\xde\x18\x95\xa1I\x9e\xfa\xc1OhEW\x91:\xca\x95Rt\xac,s\x1c\x16V"\x83E\xfc2\
-\x83vV\xe0^\xfb\xe0Ue\x08\x0bd\x8c\xef;\x04\xcd\x98\x95\xe3\x0e\xaf\xbbh\x1d\
-\x7f\xf7\xd5\xefc\xdbe\x9c\xa1Q\xe2N\x0b\xbc\xa22L;C0\xb6\x8a\xa6,P\x1c\xaf\
-\xb0\xeb\xe0\xb4j\xcf ;\xc8N\x8d\xf2\xd4RF\'W3\xb3\xf39\xecI\x1f\xd9\xa9\xe1\
-\x15\x96Q\xf4\xcat\x92\x80 \x0eH\x9d6\x8e\x0b\xadz[\xe5\x81\xe8\x1d\x12.\x14\
-\xcbX\x96\x8b\x83\x8a\xde\xf9\x9d_}=\xb2v\x80\x87\x9fx\x9a\xf1\xc9\xb54\xc7\
-\xca\xb4\x0f\xeeQa\xcc\x9e\r\xad\x0eI\xdc\x01G\x90X\x92\xa0\x19\x82]@x\xc34\
-\x0f\xcc*\xe3ye\x14dH\x1aAix\x8c\x9d/N\xf3{\x7f\xf8)~\xef7\xde\xca\x85g\x0e)\
-\x93^\xaa\xdc!\x0e0T\x84[o\xbe\x9eG\xff\xe4\x0b\x0cM\x8d\xe1\x14}f\xeb\xed\
-\xac\'I\x05J>\x84\x02\xbbP\xc4\xb1%q\xa7\xc9LG\xd5\xdeM\xec*\xa5\x91q\x86\
-\xc6\'\x8fK\x81@7\xe4\xd5F7\xc4\xcd\x94\x88L\xb1\x10\xf8\x02\xa2\x04.{u\x81\
-\x8d\xe7\x9d\xcd#?\xdc\r\xb6\xa7\x94\x86\xeeD\x15\xc6\x08J\xa4\x96\x03\x96\
-\x85\x88\x03\xd2`\x8e\xb1\n\\\xff\xf3\xafQ\xe5\xe8\x0b\xfa\x03a\x83P\xbe\x9b\
-T\xa8m\xa1L$\x16\x02)SRK\x90$1.\x0e\xb7]\xbd\x82\xf9\xdaM\xfc\xf9_\xff#\xe1l\
-\xc8\x923\xd63\xd3\xaa\x13S\xc0\xabN\x10\xee?H\xdd/\xe1W\xc6\x89\xd2\x0e\xb5\
-\xf9\x19\xb0R\xec\xd1)\x84(\x936"dG\xa8\x0e`A\x02\xc3U\xbct\x9e\xd6\xfe\xdd\
-\x8c\x8d\xda\x9c\xbf\xe1\\\xce:\xf3\x0cFG\xc6\x91\x08\x9a\xed\x16\xb6+\xf1=\
-\x8fTX\xd9g7\xc5/:\xbc\xe5\xd6\x7f\x8d \xe5\x89\'\xbeG\xb9:\xcc\xd2e+\xd8\
-\xb3g\x0fCC#\x84a\xc8\xb6m\xdb\xd8\xbau+\xf7\xddw\x1f\x96eQ(\x14(\x95JLOOS(\
-\x14X\xb9r%\xfb\xf6\xedc\xc7\x8e\x1d\x0c\x0f\x0fS,\x16\xb9\xfa\xea\xab\xb9\
-\xf7\xde{\x8f\xf3\x1d<\xb1\xe8\xf0\xddj\xb5\xcaM7\xdd\xc4\xbe}\xfb\xd8\xbcy3\
-cccT*\x15\x9a\xcd&ccc$I\xc2\xa6M\x9b\xf8\xf2\x97\xbf\xcc\xc4\xc4\x04SSS\xf8\
-\xbe\xcf\xd0\xd0\x10?\xfa\xd1\x8f\x98\x9e\x9e\xce+\x07\xeb\x9d\xc6\xe4\xe4$\
-\xcb\x97/g\xf3\xe6\xcd\xb9\x89K7\x93:\x19Bx\xe1\x84Ga\xa9\xfe\x1a\x99\xad\
-\x04\xe5F\xf4U\xc66J\xb18(\xf3M\x19eN\xf0$\xb86`\xa5\xc4\xed:%\x91r\xc7\x9b.\
-\xe0\xce\xdboa\xf9\xb8\x80\xb9\x17\xa0u\x00hA\xd9\xa7-*Db\x8c\xd9Y\xc9\x92\
-\x15gr\xdf\x17\xff\x8e\x14\x18\x9bp9\xeb\xdcW3_o\xd1\x8e`\xba\xd6\xe4\x07?\
-\xec\x90\x00n\xd1\xca"\xb1\xb2]\xd1\x11\xc6\xdfk\x04\xe9\x86\xa1\xe6\xc68\
-\x92T\x85*\xb7\xa7\xa7AF\x0c\x95\x1c*\x02\xde\xf9\xd6\x1b\xb8\xfc\xfc\xb3\
-\x90\xad\x03xI\x0b\x926\xbe# Ih\xd5Z`\x97\x89:\x92f\xc7\xc2-\x8eQ\x19^\xc2\
-\xd8\xe4\n\xbc\xb1I\x9a\xf5&\xb3ss\x14\x96Nr\xeb\xcd\xd71V\xf5\xf1d\x8c\x1d\
-\x07\x888\xc2s]\x88\x02\xd28\xc6\xf5=\x84\xed\x92\xb5M\'\x0f\xaf\xb5\x04\x0e\
-)i\xad\xcdy\x13p\xf7\x1f\xdc\xc6\xcdWn\xc4\xefL3b\x87\xb0\xffE\x90\x01\xae#\
-\xc0s\xa0Z\xa52\xbe\x84\xca\xd8R(V\xb3$8\x01\xa9dl|\x1c\xa2\x90\xb4\xd5b\xf5\
-\xda\xb39\xb0m\x17\x89\x14l\xdf\xf1"[w\xbcH,\xc1\xf5J\xc4Q\xa4\\E\xa9\n\x93}\
-\xd3/\x9c\xc3\xeb\xaf\xf89\x9c\xa4\xc9\x81\xed?\xc1IZ\x0c\x8f\r\xab\xf2\'\
-\xcd:\x96\xeb\x92\xb4Z\x04\x11$\x89Gb\x97\xf1+\x13\xd8CKiE\x0e;\x7f\xba\x9f\
-\xe3}\x8c\xd2\x9e\xaf\xfc\x9d\xd4\xa1\xdc2VM\xb1B\xf5\xe9\xbc\xfe\x9a\xd7c\
-\xcb\x88R\xd1\'m\xd6U\xa9\x1b\x11\x02\x91:>u\xb0l\x1f+\x8a\xf0E\xc8\xc5\x17\
-\x9c\xc5\xba\xd5\xca\x0fn\xe9\x0cP\x84\xb2z\x01\xa9\xae/e\xbb\xa4\x96\xa0\
-\xd1\xee \x81j\xd9!\xc9\x1a\x8a\xbd\xfb\xcd\xe7\xf3oo\xfdy6\xae\x1e\xc1oO\
-\xe3\xb4\xe7\xa1Q\'j\x8502\x05\xc51\x82\x83-\xc2\xf9\x00ob9\xde\xf8R\x92\xd9\
-\x1a\xe9\xfe\x03\xaaD\x7f\x18\x80\'\x18\x9e\x1a\x87\xb9\xfd\x0c\xc9\x0e\xa7\
-\r\xbb\xac(\xa5|\xe8}\xef\xe4\xb2\x0b\xcf\x01\x04i\n\xaeW\xc0\xf3<R \x94\xaa\
-\xbb\xc9\\m\x16HX\xb7a\x1d\xef|\xc7\xdb\xb9\xee\xba\xeb(\x16\xcb\xfc\xf4\xc5\
-\x97\x18\x1d\x1d\xcfk6\xe9\x96\xb2K\x96,\xa1X,\xe6\x1d\tW\xacX\x91\xe7E\x8c\
-\x8d\x8dQ,\x16\x19\x1a\x1a\xe2\x9d\xef|\'\xa7\x9f~\xfaq\xbe{\'\x9e\xde$\xc9\
-\xd1\xd1Q\xde\xf3\x9e\xf7p\xfe\xf9\xe7S\xab\xd5\xd8\xbbw/a\x18\xe6%\xdfGFF\
-\x18\x19\x19!\x8ecv\xef\xde\xcd\x96-[\xf8\xfa\xd7\xbf\x8em\xdby\xe9\x93\x91\
-\x91\x11\x86\x86\x86\xe8t:\xc4q\xcc-\xb7\xdc\xc2\xf0\xf00i\x16\x01gY\x16\xae\
-\xebr\xedu\xd7[\'\x83\x129\xe1\nD9W\x95\x9d*\x11Y\x86\xb2\xa5\xfe\xe7\xd1\
-\xa2\x94NS\xa6F9I\xa9\x84 ;\xea\xf9\x0e)Ci\x02\x84 \x9c\x87\xdb^\xbb\x84O\
-\xfc\xee\xafr\xda(\xd0>\xc0\xd8\xea\xd3h7\x9a\xa4\xe5e4\xe7m\x86\xcbKhN\x1f\
-\xe0\xdc3&9p\xb0I\x02\xdcx\xdb/r\xd6\xfa\x8b\x98\xad\xb5I\xb1\xb9\xffK\x0f\
-\xd1\x8a\xd5\xc3\x9e\xa4Y\xd6\xf5\xe1\xf4\xc7B\xef\x9dT!\xa9\xda\x10\xa2\x8a\
-\xe3\xa9\x03mK\xd7q\n(\tX\xbf\n~\xfdW~\x91\x8b\xcf]\x85\x17\xce`\xb5gq\xe2\
-\x1a\xd8\x12WH\x1c\xd7\xc5\x16\x0ev\n\xb6L\x99\xdf\xbb\x97\xc6\xccA\xc6\xca>\
-$m\x8aV\x87k\xae\xbc\x84w\xbcy\x05\xe3%\x17\xd9\xae\x13\xb5\xea\x10u\x18*\
-\xf9J\xa0\xa7)\x85B\x81 \x91D)$6\x80\xea-/\xb1\x89\xa3\x0e\xa3\x15(E\x11c\
-\xc0\xc7~\xef&\xfe\xc3;n\xc5\x0b\xe7X\xbba\r\x15_`\xc5MH\x03h\xb7hLO\xd3\xd8\
-\xbf_E\xbc\t\x81m\t\xc6\xc6F\x98\xdf\xb7\x07\x9au\xbc\xa2\xcf\xcem[Y\xb1\xee\
-\\\xe28\xe6\xdd\xefy\x0f\xe7o<\x0f\xcbRn\x19\xc7\xf5I\x13I\x18&4\x1a*\t\xf0\
-\xdf\xbe\xe3\x8d\\r\xc1:\\/E$m\nv\xacjlE\x1dd\x1c)!h\xb9*\xda"\x94\x04\xb1E"\
-\x1d\xa4\xf0\x95c\xf9\xb8>}\xa2o\xa7\xa8\xde\xa9\xec\x91\xb0Rt\xb1\xcc\xa2\
-\xabL\xa7\x17_0\xc4\xba\xb3\xd6fY\xeb)\xa4\x11B\x86 #\xac8\x85X\xe2\n\x17\
-\x19\x85L\x0c\x97\xb9\xe9\xba\xd7\xa9]\xb3H\xbb\xe9\x12\x12\x924[\xdd#\x88\
-\x92\x14p\x88S\x81S(\xe6\x87\xf9B\xcd\x8f\x9d\xc0\x9do\xbb\x82\xdf\xffw\xbf\
-\xc2\xda\xc9\x02\xa3n\xcc\x92\xb1*v\x92\xc0|\r\x0b\x1bkt\x0c\x86\x86\x88\xda\
--\xc2f\x1d\xab\xe8a\x97\x1d\x9cN\r\xea\xd3,-@\xfb\xc5\x1fSjOS\xac\xbd\xc0\
-\xdb^w>\x0f\xfd\xf9or\xce\xb8\xda\xd1\'QJ\x98(\xff\x9c\x9e\x07\xdbq\x08\t\
-\x19\x1e\x1a\x02R\xa2N\x8b\x15\xabW\xf1\xaew\xbd\x8b\xeb\xaf\xbb\x81\xa1\xea\
-\x08\xb33\xf3\xaax\x80\x94t:\x1d\xe6\xe6\xe6\xa8\xd5jy\xd64\xc0\xee\xdd\xbbI\
-\x92\x84\xd5\xabW3==\x8d\x10\x82\xdbo\xbf\x9dK/\xbd47\xcb\x9c\xca\xe8\xfc\
-\x968\x8e\xa9T*LNN\xf2[\xbf\xf5[\xac[\xb7\x8ee\xcb\x96\xe5\xcd\xa5z\xab\xf5\
-\xee\xdb\xb7\x8f \x08\xf2\xf0\xdfZ\xadF\x18\x86\xb8\xae\xcb\xdc\xdc\x1c\x8dF\
-\x83\x8b/\xbe\x98\xdf\xfe\xed\xdff\xc3\x86\ry\xd8\xae6w\x01|\xfb[\x8f\xca\
-\x93\xc1\x8cu\xc2} \x9a\\\xe0f\xbf\xab\xb7%U\xcfs\x1a\x81\x0c\xb0\x9c"\xae\
-\x0e\xfdE\xe5\x008\xc4T\xca6RZ\xfc\xab3\xe13\x7f\xf4v~\xef\xa3\xf7\xf2\xf8\
-\xa3\x0fS]\xf7\xaf\xa8\xcf\x80=\xbc\x9c0h\xe3\xda\xb0\xe6\x8c%\xac\x18/\xf3\
-\xec\x9e6S\xcb\x8b\xbc\xf5\x97\xde\xc0\xb3\xff\xf5\x7fR\xf0\x1c\xbe\xf3\xf8c\
-\x04\xf1\x9bH\x1ch\xd4C\xc6G\xfc\xbe1vMnq&\\,U\xb8\x14\xf2\\\x87\xc1c\x1d\
-\xc7"j\x07x\xe3S\xca\xb8m\xc78\xaeO\xd0\x82\xab\xcfwx\xd5\xea7\xf1\xc7\x7fz?\
-On\xd9J\xa3\xb1\x0bd\x91\x12\t\xad@u\xa2\xb3\x92\x08a\xc5,[V%\xe8\xcc\xb1o\
-\xebOXw\xd6j\xee\xb8\xe3\x97x\xe3\xe5*)K\xce\xbc\xc0\xa8]\xa0P\x10\xcc5\xea\
-\x94:E\x9c\xc6n\xc6&\x8a\x14\xa2\x18\xd9\x9cF\xc8%8\xae\x9aY)c@\xe0\xb86\xa4\
-m\xa2\xd6\x1c\xe5\xe1e\x00\xbc\xfd\xc6e\\y\xd5\xaf\xf1\x99{~\xc8\xe7\xbf\xf8\
- \x8ep\xa8\x94+\x88\x82O\x10\xa6\xc4\xa9\x85\xe3\xda\xa4I\x8bpn\x1f\x91\x88p\
-Z\xf3\xac:}\x05I\xd2\xe0\xe0\xec^6\x9c\xbe\x91?\xfc\xb3\xf71\xe2\xc0\x18\xaa\
-\xfaG\xc1S\x01\x05\xb6\xe3P\xb4\xed<\x93~\xe3r\xf8\xcd\xb7]\xc6\xd2\x92\xe4\
-\x81\xaf<\xcc\xf4s/2\xb6t\x05\xce\xd8\x08\xb3\xf5}D\x89\xc0\xf7\x8b\xc4B\x85\
-B{I@\xda\xaeQ\xf2\x0b\x8c\x17\xaa\x99~\xb7s\x0b\xa2/\x1bT\x939\xd2$%\x89\\\
-\xac4\xc6MSD\xea\xe0&\x11\x05\xd9\xa2\x98\xd6\x10\x8c\xd1\xff\x8e\xf5\xbcq\
-\xba\xd0a\xb6xp\x1d\x9531\xe5\xc3\x15\x1bV\xf3\xfd\xef}\x97\xa9\x89\x154\xc2\
-\x18/\t\x88A\x9e\xd0\xfa\x00\x00\x1fYIDAT\x13\x89\x1bC\'\x92T<\x9f \xda\xc7\
-\xf2\xaa\xcfU\x1bJ\x08\xa0\xe8\x0b\x15g\x9b\xfb\xebS\xac<\x87^\xfd1\x8ec\xbc\
-\xa2O\x94$8\xb6\xc0\xb7 \x95\x11\x05\xdb\xa5\x19J\xae\xbeh\x19\x97^\xf4\xeb\
-\xfc\xed?\xef\xe0\xf3\xf7?BZ\x9f&\xb0\x0b\x04\xad&RH,\x19b\xc9\x0e\x8e\x15\
-\xe3\xd9J\xb9\xdb\x08\nc\x05\xea\xbb\xbf\xc7R_\xf0\xda+\xce\xe7\xedo\xb9\x92\
-\x8dg\xa8\x1b/\x0b\x15)\xef8\x82Bf2nuB\x8a\x05\x0f\x1b\x1b\x1bI\x9cF\xd8H\\\
-\xcf\x03\xd4\xea\xf7\xd6\xdbn\xe1\x17\xae\xb9\x8e\xbf\xfc\xec_\xf0\xc4\x13\
-\xdf\xc1\xf3<\xa4\x94\xb9#X\x87\xd4\xb6\xdbm\xca\xe52B\x08\xa6\xa7\xa7\xb9\
-\xe1\x86\x1b\xb8\xf9\xe6\x9b\x19\x19\x19!I\x12j\xb5\xda\xb1\t\x87\x93\x1c\
-\xed\xe0\x06\xe5\xa3(\x95J|\xe4#\x1f\xe1K_\xfa\x12\xff\xf0\x0f\xff\x90\x87\
-\xdf\xea\xbc\x97\x95+WbY\x16/\xbe\xf8"SSS\xcc\xcd\xcdQ\xadVs3\xd5\x8d7\xde\
-\xc8m\xb7\xdd\x96\xcf\xe3\xcc\xcc\x0c\xc3\xc3\xc3Y\xc8\xbb\xca\x0f\xe9-\xe2x\
-"\xb1\xe4\t\xdd\x07\xf5f\xb2:}\x8bz++\xbe\x01i&\xa1U\': /\xcd!\x88\xb0h\x12\
-\x84!\x1d\xa7\x8a%T}\xffo~o\x86\xbf\xfe\xc7\x07y\xe8;;a\xfc*\xeaa\x81R!\xa4\
-\xecm\xe7}\xef9\x8f7_v\x01\x7f\xf9w\x9bX\xbd\xe626^\\\xe1?~\xe8A~\xb2\xf9q*V\
-\xc8]\xff\xf9?r\xf1\xfaI\xa6\xaa\xdd\x82\x88\xbaL\x84\xad\x15\x87\x8c\xb3zP\
-\x8eZZ[\xb9d\xa07\x02\x0bz}<z_\xd2\xdfP*\x04j\x11l\xfe\xc1O\xf9\xca7\x1e\xe7\
-;\xdf\xff\t\xfbf\x9b\x08\xb7B\xa1X\xa6\xd9\xa8\x11Gm*\x1e\x9c\xbbv\x15W\xbf\
-\xf6\xe7\xb8\xea\xf2\xf3Y1\xae\xae1\xd7\x84o=\xba\x85g\x7f\xb4\x83R\xa9B\xb5\
-Z\xa5\xd9\xae\xd1\t\xea\x14\x8a6\x95\x92\xc7\xa5\xe7\xbf\x9a\x0b\xceY\x8aC7\
-\x81\x0f N\x02\x1c\xdd\x1b\x16\x9f\x107\xcf)h\xa3\x84\xe6C_\xdd\xc9S\xcf<\
-\xcb\xe6\xa7~\xc8\xccl\x03\xdb)\x81p\t\xc2\x94\xa0S\xa3ZL(\x17%\xabV\x9c\xc6\
-\xc5\xaf\xb9\x80+.\x7f\r\xebV\xdb\xb8\x90\x7f\xe9\xeb\xf6\x95\xbb\xb7\xba}S\
-\xd2\xec\xfb\xd3?\x9ee\xd37\xbe\xc5c\x9b\x7f\xc0\xde\x03s\xc4\xd2\xa1\x13\'8\
-\x8e\xa7\xec\xc3iL\xd8\t(\x97\x8b\xbcz\xfdz.Y\xbf\x9aw\xdf|!z\x1f\xb2\x7f6\
-\xe4\xa9g_\xe0\x99m/2\xd3\x0c\xb0=\x9f4Q~\x934\x8c\xb0\x92\x88\xe5\x93\xc3l\
-\\\x7f&\xeb\xd7,\xa5Zp\xf3\xf7\x08z7\x9bi_\x92h\x9cU\xb3\x89$<\xbb}\x8e\'\
-\x9e\xdc\xc2\x9e}\x07\x10\x85\x12\x89c\x13%\x96*<\x98\x82L\x13F+.\x1b\xd6\
-\xbd\x8a\x8d\xebNg\xb2\x94\xdd\xff\xe0Sf\xa5\xf9.$\x9f\x13\x0e%\x95*n\xbb\
-\xb7<\xc9\xc1\x06<\xbde\'\xdf\xfb\xf1v\xee{d\x0b\xf3QB\x1a\x85\x08\xa1\xea\
-\x8f\xa5a\x07\x8b\x94\xa2\xe3p\xce\xda3x\xf5y\xe7p\xd5e\x97p\xf6\x1a//\x89\
-\xd3[\xd6\xc4\x1a\xb8~\xf7\xb3\xabvaz\xd5\xdbj6)\x95\xaa\xa4Y~c\x10\xaa\xee\
-\x7f\xcf?\xbf\x95g\x9ey\x86\xed\xdb\xb7333\x93\x87\xf3j\xa7\xf9\xe5\x97_\xce\
-\xd4\xd4\x14+W\xae\x04\xba~\x83\'\x9f|\x92\xbb\xef\xbe\x9bF\xa3\x91\x97\x00\
-\x91Rr\xd7]wq\xfa\xe9\xa7\xe7\xa6\xa1$I\xf2\x12\x1e\xf3\xf3\xf3<\xf3\xcc3\
-\xec\xda\xb5+WX\xae\xeb\xb2j\xd5*6l\xd8\xb0`\xcf\xf1#\xa1\xaf\x01\xb0o\xdf>\
-\x9ez\xea)v\xed\xda\x85\x94\x92j\xb5\x8a\xe7y\xac_\xbf\x9e5k\xd6\xe4\x15w\
-\xf5\xf1\xc7\x12F\xdbj\xb5\xd8\xb2e\x0b\xdf\xfa\xd6\xb7\xd8\xb2e\x0b\xb3\xb3\
-\xb3\xf9\x98\xf3\x9e\xe8\x9e\xc7\xf2\xe5\xcb\xd9\xb8q#\x97\\r\t\xabW\xaf\xce\
-\xef\xa1^\xaf\xb3y\xf3f\x9e\x7f\xfey\x1c\xc7\xc9\xbf\xd6\xad[\xc7\xc6\x8d\
-\x1b\x8fz\x7f\xff\xab9\xc1\n\xe4x\x89 \x99\x05\xdb!\xa4\xcc|;e\xacPDJx\xe4\
-\xbb{\xf9\xd4\xbd\x8f\xf1\x95\x1f\xa48c\xafbzn\x07\xc4?\xe4\x91/\xff>\xcbm\
-\xf8\xe7\x87\xb7\xf1\xd1O|\x8e\x0f}\xf4\x83x\x1e\xfc\xb7\x0f\x7f\x92`f\x9a\
-\xcb6\x9e\xcb]\xbfs\x1b\x05\xa0\xd3\x82\x91\x92V\x1e)6\xaa\xb9\x8f*=.\x94\
-\xe2\x10v\x8f\x02yyH Lb,\xdb\xc9\xbb\x13\xd6R\xd8?\x03\xd3s)\xb5\x86j\x03\
-\xbat\x89\xc3\xd2\xf1n=,\x1f\xbdC#\xefe\x1dD\xe0\xbb]a\xa0\x15\xdf\xc1\xd9\
-\x1a\x93\xa3CY\x99\xf2D\xf5\xd5\xf6}\x1c\xa1\xbd\xeaa\xfe\n\x89C\x9a)\x918U_\
-\x96\xa3\x9c\xc8\x9d\x10\xe6\xea0}\x00\x1a\xcd\x00\xb7\xe03<\xac\x9a\x10\x95\
-|(\x97t\x99\x8e^\xc5\xab\xcb_\xf4\x06\x1c\xf4\xf8\x19\xe8.\x06\xda\x11yK\x90\
-\x008P\x87\xd9ZB\x18\'\xcc\xcc\xd5\x88\xc3\x0ec#\xc3LMV)\x97\xa1\xe0\xaaD?;\
-\x82\xa2\x93f\xad@\xd5\x1c\xb6\xda\xca\xcd\xe3{\xfd\xf3\xa1\xa3\xf8@gj\xcbL\
-\xdd\xf7\xd2\xff^\xc6\x91\x12\x14\xbe\xdf\x15\x14:7N\xf8\xd0H\x95\xe9U\xbf\
-\x1fj\x9eU5_}\xbd\xee\xce\x15r\xf1\xac\xcb\xc3K\xa7Ws\x1d\x96$I\x88\xa2\x08\
-\xcf\xf3\xf2d\xb9}\xb5\x08g\xb4\xc0\xbe6\xec\xdd\x9bR\xaf\xcda%\x11\x95r\x91\
-\xa5\x13CL\x8dC\x12B\xc5\xef\x8e\xc3\x06\xc2D\xe5\xef{\xb6*ks\xa4\xcbk!\xd9+\
-\x90\xf5*xdd$\xff]g`k\x93\x8eV:\x8dF#ok\xab\x8f\xf5<\xd5\x83\xe6\xa9\xa7\x9e\
-\xe2\x13\x9f\xf8D\xde\xaf\xbcP(\xd0l6\xf9\xb3?\xfb3FFF\xf2\xeb\x86a\x98\x0b\
-\xce\xc1q\x01y\xabZ}\xcd(\x8a\xf2\x1c\x94\xa3\t\xf80\x0c\xf3J\xba\xfa\\:?E\
-\x08\xc1\xfe\xfd\xfb\x99\x9c\x9c\xec;\xb7\xbe\xc7cURz\xbcz\x87Q\xaf\xd7\x99\
-\x9d\x9d\xa5^\xaf\xb3t\xe9R|\xdf\xa7T*Q(\x14\xf2*\xbbzNt\x01\xca$I(\x16\x8bX\
-\x96\x95\xb7\x05>\x19\xda\xda\x9e4&\xac\xc5a\xa1\xdc\xeb\x02\xf0\xa9\x14\xb5\
-9\t.\xbch\x19w.\xbb\x85\xe7?|\x1f\xcf\xedy\x963\xa6J$q\x85e6\xcc\xc6)\xdb\
-\xb7\x1f I+|\xfa/\xbe\xc8\x87?\xfc&\xae\xbb\xeez>\xf3\xc9\xff\x97\xcd\xdf\
-\xdd\x8c\xcdm\xc4I\xd6\xc4\x8dnj\xa0\xd4\x85\xff,w\xd1Jcp\xf4\xaa\x8a\xad\
-\x83\xb4}\x10\x16U\x01\xe5\t8}B\x10R\xa6\x13B\xc5\xcbzkec\x91\xb1$NC\xa4%\
-\x98o\xa6T\x87}\n.\xdd\x02\x8e\xd9\xf9SI\xae<\x00\x1c!p\x0b\xc5\xeca\xd0\x82\
-L\x97\x0f\x11X\xd8\xe8\n`\xc2R_i\xaa\x82\xac\xfc\xa2\x8a\x9cZ\xb1\x04\x9a\
-\x1d\x1f\x84\xea\xf3\x95&Pt\xba\xa53\xe2\x14\xc20\xc1w$\xbe\xe3\xb0\xf0\xba:\
-\x0bZ\x93@\x92\x92\xa6\t\xae\xb4\xd4<d\xff_V\x85\x91\x8a\x8dm\xd9\xb4\x97O %\
-T\xbd~al\xa3\x95f\xf7\xbd\xb0QJ\x8d\xec\x0e;m\xd5\xa4\x11K\xa5l\xa4\xa8\x98\
-\x00dJ\'hS*\x1c\xb9+\x9d\xe3\x90\xad<U\x94-\x80~n\x13T\xf5\xe60\xbbK-\x8c\
-\x93\x18\xda\xa9\xc4s,\xdd}w\xd1\xf4\xb6d\x05r\x81e\xdb6\x13\xa36M`\xaa\x08S\
-g\x08,\xc6\xf2\xf7A\xcf\x8f\xe3\xf7+2$\x14mm@K\xfb\xe6n!\xb4\xe0\xd4\x02Y\
-\xb7\xa8\xed\x15\x9c:\xcf\xa3\xb7\n\x80*\xfd\x9e\xe6\xcaC\x0b[!D\x1eA\xb4}\
-\xfb\xf6>\xa5\xa8\x8f\x19\x1e\x1e\xce\x15\x84\x10\x82B\xa1\x90\'\xce\xe99\
-\xe9U&\xb6m\x13\xc7q~}\xcb\xb2\x8e\xb9\xdb\xa0\x16\xc2Z\t\xf5\x9eWJ\x99\xb7\
-\xc9\xd5\xf7\xd0[F\xe4X\x94\x87\xde%\xe9\xb1ig\xfb\xe4\xe4d>\x17\xbd\xf36\
-\xd8\xbb=MSJ\xa5R\xdf9\xf5\xef\xbd=\xdfO\x14\'\xd8\x89~\x9cH\x07("\x03\'w\\\
-\xa7@\xbd\x15\xe3\xd8p\xd6J\xf8\x9d\xff\xf3F6\xae)3\xbf\xe7)\xd6.\xab\xe2\
-\x02\x93\x8e`\xee`\xca\xd0\xc8*\x9e|z+\x1f\xbf\xfb\t\xde\xfc\xa6\xd5\xacz\
-\xd5Z\xb0l\x1e\xfb\xee4i\xd2\x15\xd8:\xabC\x19\xd5\x1c\x12\x04q\xe6\x8b9b\
-\x90\xd6QI)\x17\x0b\x94}\x8f\xa2cQ\x14\xbay\x93\xfa^\x01\x96x\xaa\xe8\x9dH\
-\xc1\x8a\xd5\xff\x8a\x8eE\xc9s)\xb9.\xe3#>\xae\xd5/T\xb5\x00I\xa2\x948\x96\
-\x84\x9d\x908\n\x11t?\xc8H\x8b4\xcc\x92\xe0\x12\x07\xd2l\xf9/\xc1\x91Ja\x15\
-\x84\xfa\xb2\xa5\xb2\x95\xebfQ#\x05\x18\xf1\xd4q\xa5\x9e\xe6\x8cV\xf6\x9ar\
-\xc1\xc6w\x1c\x04i^\xa8pA,\xb0d\x82\xebX\xf8\x9e\xc8\xfa\x84\xabT\x10KB\xd5R\
-\xf30\xe2\xc2\xa8\xd7\xbd~\xd2\x01+\xe9\x9a_\x04)2MT\xea\x88\xde fy\x81\xe5\
-\xa2*\x98\xa8wd\xb6\xc8~\xb6\xc8{Q\x1f\t\xbd?\xcf\xfa)\xe5\xbf\'\t\xb4ZIn\
-\x06\xca:\xcf\xaa9\xf0P%\xd2\x9d\xc1\xddG/\xd9\x88\x8e\xf2\xf9\xe9-y\xa1\x05\
-\x8a^\xc9v\xda\x91\x8e[\xcc?7\xbd?;R\xcd\x93\x9dv\xcdU\x9e\x95\xe2\x10c\x11a\
-\xe9`\x80# \x84\xa0\xddn\xe7\x82V\x97&\xd1+c}\xcc`\'=\xad\xf4\xb4\xdd_7Hr\
-\x1c\x87F\xa3\x81\xeb\xba\xec\xda\xb5+/U\xee\xba.\xadV\x8b\xa9\xa9\xa9Cv\x1b\
-\xfa\xde\xf5\xca\\\x0b^\xbd\xaa\xd7&!-\xa8_N\x99\x0f\xad\xccz\xcdRq\x1c\xe7>\
-\x06=\xd7\xbd\xf7\xfdr\xca\xe5\xe8\xact\xdb\xb6\xf3\x1dZ\xaf\xf9J\xfb\x8et\
-\xaft=\x17\x83\xcaIJI\xab\xd5\xca{\xa3\xeb99\xd1\x9c\xe2\n\x04H\x04\x96P=\
-\xae;\x89\xaa\x10Q.9xV\x80 \xe1\xd2s\xe0\x03\xef\xbd\x89u\xcb,.:kI\xde-oll%;\
-w\xcf\xe1\x95&\xd9\xf4\xc8\x13<\xf4(\xfc\xc1]\xef&L\x05\x9b\xbf\xff\x03U\x06\
-Kj\x93L\x92u\xd1P\xdd\xfd\xb4\x9f@\xb5m:>\xc2\xa0C\x14\xb6U\r"2\x9fA\n^\xac\
-\xf2]\xbc\x18\n)T\x842\x119H\xd2( \x0cZDQ\x0b\x1b\xb5\xd3\x08\xa3\xac\x10$]a\
-Y\xf0\x04\xae\xa3l\xcb\x02K\xb5f\x95\x02\x99*\xbf\x92p3c\x98\xcc\x94Go\xf8Xv\
-\x0e\xe2\x18GF\x14\xec\x04+\t\x90Q\x80H\x02\x1c\x19Q\x16J\xa0\xfb(\xe5F\xa4\
-\x84\xb6\x8d*\xe9\xdej\xd5\x8fz\xffi\xd8!i7\x88\xdbMd\xd8\xc6\x91)\x15\x0fJV\
-\xd7\x87b\xc5*\x10\x8cP\xa5]\x0c{P\xb5Um/\x19\x87 %\x8e\xb0\xf1lU\xc6\xc3\
-\x15jg`g;(\xbd\x10\xf0\x1c\xa5Ld\x9a\x12G\x11\x9dN\xb3g$\xfd\x01\xd9\x9a(\
-\x8e\x95\xa52\xcb\xc1\xd4\xb2\xc3\xb6\xa1RR\rWlIV\xfc03e%j\x17\xb2p)&\x1d\
-\xe5u\xd4\xa9\x01\xba\x82M\x97\xc1\xd09\x00\x8e\xe3P\xf6\xdd|\xfe\xed\xcc\
-\x91$\x03\x15\xb9\xe5K(Xj\\\xbe\xe8*\r\x920k8\x16s\xb4fP\x9a^A544\x94+\x8eR\
-\xa9\x94\x8fI+:-\xc4\xb5B\xd1\x99\xdaZ\xf9\x81\xea\xd6\xf7\xfc\xf3\xcf\xb3s\
-\xe7N<\xcf\xcb\xcbtt:\x1d\xce9\xe7\x1c5K\x99\x00\xd5Y\xdbz.\xb4p\xd5\n\xaaW\
-\xd0\xf6\x9a\xa2z[\xcc\x1e\x89^\x05\xad\xcf\xa9\x15\x98>\x97\xf6\xcf\xe8k\
-\xe9\xb2-\xc7B\x18\x86}\xb5\xc1\xf4\xdc\xe8s\x08!r%\xe3\xban\xdf\\\xeb\xda^\
-\xfau\xa5R\x89R\xa9\x94\xff\xedd\xa8\x87u\xea+\x90&\xb9\x14\xb7mH\xa4\xda\
-\x87\xd8\x04\xd8\xe9<%\xe05k\xe0#\x1fx\x177\xbf\xee5\xd8$\xcc7a\xff\xbe\x19\
-\xaa#KiK\x8f\xea\xf8i|\xe4c\x7f\xce\\\x1b\xde\xfc\xd6\xdb\xf9\xce\xf7\x9e\
-\xa2\xd5\xee\xae\xaa\xc9\n<\xda=\xc5\xc3\xb5C\xf3x\x1dH\x9e_\xc0\xf5<U\x142\
-\r\xb1\x92\x08WF\x14l(\xdb`G\x1d\xdc$\xc6!\xcd\xae\x9f\xe0:\x02\xcf\xf7\xf1\
-\\\xb5*\xb4%\x94\\\xf03\x1fD\x9a\xca|\xe5\xabW\xdd\xae\xe3b\t\x01R"u\x012\
-\x99\xad\x8d\xb5;\xa4Gy(\xa7\xbf\n\xa9uD\x8a\'b\nvJ\xc9\x8d(\xda1\xbe\x15\
-\xe0\x11`\xa5Jh\x96]\x15\xee\xaawC\x9ecS.\x95\x07Nz\xe8\xfb\'\x8a\x1ev\xc1\
-\xc7)x\x08\xd7Q\x82\x9al\'%\xd5\xb9\x0b6\x94DB\xc5\x95\xf8v\x8ame\x95\x89e\
-\x82\xb0R,K\xbd\xe7\x16\x90f}\xac\xa2P\x95(\'V\xc2\x1c\xd9\xddy\x08\xa1\x8aV\
-\x1e\xcb\x0e\xc4\xf3\xba\x0fi\x9aB\x10$\x84aJ\x925H\xf4\x84\xbag=f\x1b\xf57\
-\xdfV9\x98\x0b?`/\xff\xb1\xd3\x117\xbe\xef\xe7\xf6~[tw\xa5%\x01U_\x95\xfa)d\
-\xc9\x9a\xc4!Q\xbbA\x1auT\x15\xe7$V\x01 :0\xe5\x18>\xbc\xba\x9f\xf9\xce\x9d;\
-\xf9\xfc\xe7?O\x10\x04\xb9\tE\x87\x96j\xc17\xb82\xd7B\xb3\xddn\x03j5\xae#\
-\xaf\xee\xbf\xff~\x0e\x1c8\x90\x0b\xd3(\x8a\xa8T*l\xd8\xb0!\x7f]\x1c\xc7\x14\
-\x8b\xc5>\xc1\xad\xfd\x1bQ\x14\xd1\xe9th\xb7\xdb\xb9\x0f&\x0c\xc3>Ev,\xe6\
-\x9d\xde\x9d\x87nI\xab\xfb{\xb4Z-\x84\x10\x87\x08\xea^\xc1~4<\xcf\xcb\xfd\
-\x1a\xbd\t\x80\xfa\xbcz\xfcz\xee\xf4\xf5\xf5=\xe8\xb1\r\x16b\xec\xbd\xd7\x13\
-\xc9\x89Wa\xc7\x8b@\xb5\x00\'\xb3A\xdb\x16\xed\xb0E\xc5K\xa8\nAHL\xbb\xde\
-\xe1\xe7\xceYF\x94E\xe48e\xd8\xfd\xd3\x17\xf0\x8b%\x0e\xb4[\x1ch\xa6\xd8v\
-\x99\x7f\xff\x9f\xff\x8a/|\xeav\xbe\xfe\x90\xcd\xce\x9f\xb6\x99<G\x0b\x18]\
-\xa7Kb+\x11\xfe3\xd2\xbc\x99\xdd\xd7\x12\xa8~\xea\x96\x12\x86\x12\x08\xea`Y\
-\xb8\xbe\xab\xae\x1dFJ\xfa\xd9\xea\xc3(\xd3L\xf0\x0b\xa9\x04I\xcf\x92V&\x11q\
-\x02\xbe\xabl\xd6\xbe\xeb)\xe5\x01*SZ\xa5\xb5g\xa5X\x07\xb6\xc1\xda\xfe\xa5\
-\x7f\xb5\xad\xcc>\x13#e\x8a\xa5\xbb\x10\x92\x92d\x19q\x96\xedc;\xd9\x03\x1e\
-\x87$i\x84#lU\xdb\xe9(\xdb\xec\xb8\xd9\xc1q-p=\x90)I\x1c\x11K\xb0\x1d\x0f7\
-\x8b\xc0qm[Ii\x99\xa8e}\x12\xa1\xb6\x87B\xe5\x87\xd8j<RJ\\\xc7^\xf0C-%$q\x8a\
-\x94\x11\x16J\x18\xe7sr\x94wSf!\xdb\xc2\x06\x7f\x81\xfb\xb1\xe9\n\xa0t\x81\
-\x95\xf1\xc2\x1c\xdb\'H\xafR\x07\x85\x98\x16*\xae\xe3fv;I\x94\xad\xb8]\xcf\
-\xcb\xaa\xd6\x08l[\x0b\xd1\xde\xb8@ U\xbe\'\xe1\xba\x1c\t!\x04\xcdf\x93M\x9b\
-6\xf1\xf5\xaf\x7f\x1d)%\xb7\xdcrK\x9e\xbfP\xa9Tr\xff\x856\xf3\xe8zMZp\xf6\n\
-\xbar\xb9\xcc\x8e\x1d;\xd8\xbau+\xbe\xef\xe7}\xbf\x93$a\xed\xda\xb5\x9c}\xf6\
-\xd9\xf9\xdc\r\xce\xa1\xf6\xa1h\xdc\xc3\x8c\xfd\xe5\x96:\xd7\x0ek\xbd\xb3\
-\x01\xf2:T\xda\x1f\xa1\xcf\x0b/\xcft\xa4\xdf\xbf\xde\xdd\x91\xfe{\x14E\x87\
-\xf8j\xf4\xe7\xa8w\x87\xa5_\xd7\xdb\xb5\xf0d0_\xc1\xa9\xae@,\xd4\xf2KB;\x08H\
-|\x07\x0f\x9b\xb2WV2%\t\xb1\xd2&S\xd5\x12Ac\x8eb\xa5H\xa33\x8fSX\xc2p\xc5\
-\xa2\xbe\xe7\x00v\xa9D\xd2h\xe2\x0e\x8d\x92\x88\x88\x8f\xff\xf93\xbc\xeb\xdf\
-\xdf\xc9\x03\xff\xf256\x9e\xf3\xf3y\x7f\x05\x9d\xecha\xe1`\xe7}(\x8e\xcb\x05\
-\x02X\xc2!\x8c\x94`\xf4\xdc\xccs-\x13\x95|`\xa9d5\x12\xa9j\xba\xe8\x0f2\x8e\
-\x12~\x16\x99i-%Ie.P\xfc\xac\xd5h\x14\x05\x14\xfcn\xb2\x9d\xcc"L\x84\xeb*[\
-\x8c8\xec\x12\xb9\xe7\xc6\xb4\x93\xddB\xc6\x01i\x94`\xbb\xaa\x8d\xaa\xe3\xd8\
-\xaa]\xaf\x1a\x14B\xe8\x15{\xe6<\xcf\x03\xfc\x0e3K\x168\xc5"\x99\xdb\x1e\x84\
-\x85\xed\xbb\xd9|w\x9d\xc5\xe80\xe8\xac_\xba\xaa;\xae^/\xec\xcc\xd6\x88E\x92\
-\x99\x9b\xf4\xc3\x15E\t\x02\x1bi\xa5\xd8\xb6P\xcd\xb3\xe8\x96m?Vz\x1fh\xd0\
-\xf6|\xd5\x1f\xde\xca\xe6\xdf\xb6\x04v\xcfn\x05\x99d\x11G\xc5\xe3\xfa\x90\
-\xf4\n5\xe8\n;\xdb\xb6\xb1\x85\x8d\x8cC,G}\x16\xdcB\x7fTN\x12\x86\xd8\x9e\
-\x07R\x92f\xabk\xdb\xb6\xd5\xe7\xc8\x16\x88c\xe8(hY\x16\xf7\xdf\x7f?\x8f=\
-\xf6\x18\x96eq\xcf=\xf7\x10\x04\x017\xdcp\x03\x13\x13\x13\xb9\xf3\xda\xb6\
-\xedC\x84\xa1\x8e\xb8\xaaT*\xb9r\xe9t:\xdcu\xd7]4\x9b\xcd\xae)\xae\\\xa6\xdd\
-ns\xc6\x19g099\xa9\xa6/\x13\xe8\xda\xa9\xdc\xeb\xdb\xd0&!\xed\x8f\xe8\x15\
-\xd2\xbdst,&\x1e\x1dU\xa5\x15\x93\x16\xe0\xba\xfb_\xef\xcejP)\x1d\x8b\x13\
-\xbbw\x0c\xda\xa7\xa2\x17\x04\xbd\xe6I\x1d\xaa<\xa8h\xf4\x1c\xea9\xe9u\xc8\
-\x9bj\xbc?\x0b,\xc0N\xf1]\x082\xb1n\x01\xa4>\xe0\xa8\xa6>\x12\xfcb\x11\xa2\
-\x80J\xc1c\xd7\xec\x1cg\x9c^\xe5K_{\x0c\xeb\xac\x8d`9t"\x89\xb0\x05\xf7}\xf5\
-Q\xce?w-Vq\x8c\x00\x1d\xfd\xe4\x00\x01\xb2\xdd\xc2*\xaa\x04\xad\xf9\xb9\x0e\
-\xc3#\xa3\xc7\xb5\x13\xd1N\x7f\xe1\xda\xd8\xae\x16\xc4\xb1\x12\xecY\xb2\x1f\
-\x16\x99# \x8b\xf1\xb1\x1cUs2;\x87\xba_\xa9\xc2rE&l3\\\xb7\xe7w)\xb0\x1c\xa7\
-_\x96\x89n\x18m\xcf\x9f\xb2i\xed\xbd3u\x1e\xe1\xb8\xdd\x81\xe77\xa1c\xbf\xe8\
-~\xb7z<\xcf\x87\x91\x9e\x96\xcc\xfe%z\xea\x9f\xf5\xccK\xdf\xb1z\x1eD\xef\x11\
-\x03+jP\x89\x91t\'\xc7u\xecL\xb7twM\x8b\xf1Zu\x85\x80\x1a\xa7e\xc9L\x19\xa5=\
-v\xce^\x85\xa9\xf0|\xad\xac\xfa\xc7\xa9\xef@\xdd\xdb\x91Yh\x15\xde\x8b\xe58Z\
-\x7f\x1e\x82\xad\x17\x0f\x16\x08\xa1\x17\x1f\xf9\x99\x8ex\xfd8\x8e\xb3\xe6Q?\
-\xe1\x1b\xdf\xf8\x06\xf5z\x1d\xd7u)\x97\xcb|\xedk_\xe3\x89\'\x9e\xe0\xdak\
-\xaf\xe5\x9ak\xae\xe9\xb3\xeb\xf7\nL\xcb\xb2r\x01\x1d\x04\x01\x0f=\xf4\x10\
-\x0f?\xfc0333\x14\n\x85<,u\xc7\x8e\x1d\xbc\xe1\ro\xe0\xado}+\xa0\x04\xb3\x16\
-\x9a\xdaA\xde\xcb\xa0b\x18\xfc\xff\xcb\x11\xaa\x0b\xbd\xb6\xf7\xf5G\xda\xc9\
-\xbc\xdc\x08\xa8\xc1\x1d\xd4\xd1\xfe\x0e\xf4\x85\xea\x0e\xde\xd7\x89V\x1e\
-\xc0)\x9e\x07\x92\xa6Y\xc5\xc5\x88\xc0\x8e\x88\xb1q(\xe2e\xd1\'\xba4\xb7zV\
-\x12\x90\x1dpB\x1ai\x91\x7f\xfa\xd6\x01>\xff/\xdb\xf8\xf6\x8e\x19f\x9b`y\x05\
-J\x8e\x83\'\x03\xc2\x83/\xf2\xc9\xbb\xde\xcb\xaa!8\x7f\x15Te\x84#\xda\x10\
-\xb5\x01\x01N\x11\x19;XN\xe1\xb8V\x97:9L\x8b\xcfn\xa8\xa5\xce\xee\xe8\x15v\
-\xb6R\x1e\x87\xbcF\xf7P\xd1\x0c\x0e(\xfb`\xca\x81\x0fh\xb6\xe8OH\xfb:a\x80\
-\xc8\xcf\xd0U&=\xaf\xe9\xfd\x0ej$\x83\xceXk!\x896\xe0\xa4\xee9\xa47\x81\xadW\
-\x1d\x1d:\x86\x9e\x1c\x8a\xfc:}#\xe4\xb0\xf7\xdb7\xc6\xde\x9f\x8fe\ru8\xa5\
-\xa3\x93\\\xb5\xc2\xa4?,\xcf\xea\x19\xcf"\x15\xc8\x11\xc9\xdf\x87~\x05\xdc\
-\x7f\xfd\xfe\xf9\x1d\xbc\xf6\xc2\x11b\xdd\x95\xf8\x9dw\xde\xc9\x0b/\xbc\xc0\
-\xc4\xc4Dnw\xafV\xab4\x1a\rFGG\x89\xa2\x88s\xcf=\x97\xff\xeb\xb7\xfe\x93\xb5\
-c\xfb\xf3\xb2\\.\x03\xe4\x1d\xf4\x9e\x7f\xfey\xb6l\xd9\xc2\xb6m\xdb\xf2(\xa3\
-z\xbd\x9e\x17\x0c\x9c\x9f\x9fg\xc3\x86\r\xbc\xf9\xcdo\xe6\x82\x0b.\xc8\x0b\
-\x06\xea\xd0\xdc\x93\xc1Ql8<\xa7\xb6\x02\x91iVJ5 \xb0Z\xc4\xd8\xf8\x8c\xe0h\
-\x0f7tc[% \xdb\xe0\xb4\x80\x02;\x1ae\x9e\xd9\x07\xef\xff\xd8\x17\xf8\xf1\x0b\
-\xb3\x14\xab\x13\xb4k-H\x12\xd6\xacY\x01\xf5\x9f\xf2W\x7fz\x07k\xaa\xaa\xbft\
-\x81\x8eR@I\xac\x92\x08\x9d2\xba(\xe1bc\x11\x06\x95A\xf7\x81\xd6+\xe5\xdeG\
-\xdd\xc9U\x8a\xecyM\xb6\xa9\xef9\xeb\xa0\xa28\xc2\xd8,\x88\x89\xd1\xadB\xb4\
-\x90\x1fT\x1cB\x0f\x96\x1e\x99\xdd\x87\x16\xe8\xfa\x85\xdd\x8c\xfc\xc1q\xf5)\
-#\xab_Mj\x9d\xd2\xfb\xba\xc3*\xb3\xde\xeb\xf6r\xc4\xfb]H\x11\x1c\xee\xf8\x85\
-\x8e]\xe8z\x0b\x9c\xafw\x90\x87\xe9\'\xf33Q \x83\xd7?\x8a\xc2`\xe0\xef}\x8b\
-\x96\x01\xb4\x8f\xe5S\x9f\xfa\x14\x8f?\xfexn\xfe\xd2\xe6\x96\xb9\xb99\xc6\
-\xc6\xc6r\xf3\x9265\x01\xb9\xd9G;\xfe\x8b\xc5"A\x10033\x83eY\x8c\x8d\x8da\
-\xdb6\x8dF\x83e\xcb\x96q\xdbm\xb7q\xc5\x15W\x00\xfd\x89\x87\'C\x9e\x83\xe1\
-\xc8\xd8\x1f\xfc\xe0\x07?x\xa2\x07\xb1x2\x13\x89\x80\x18\x15\xe9\xe1Q\xc0J3\
-\xbb\x8c\x92\xbb$\xd93\xac,*\x01`\xe1{>\x13c\xb0\xeaU\xeb\xd9\xb6\xf59\xe2N@\
-;\xe8\xe0\x14\xcb\x1c88\x8beIv\xbd0\xcb\xe5\x97\xbd\x8a\x82\x804\x92xv\xf6\
-\xc8uB\x95\xa1\x858\xa2\x99\xe6e\xdeE\xfes\xff\xf9\xba\x99\x1d\xe9\xc0\xf1}V\
-\x9dA\xef\xb7\xecY[\xf6\x9f\xbc+h,\xb2\xec\x96\xee9\xc4\x02#\xb0\x16R\x1e\
-\xbd\x12\xd0\x92J\x91Z\xd9\xb6\xc6"+*)3SX\xf7l}35`>\xeb\x1d\xde\xe0\xac\xea\
-\xa0\xa1\xfe\x99\xd6G\xa9\xebZ:\xa2\xecpd\xef\x95\xd4\xdb\xaf\xbe\xd0\x83Azo\
-\xf6\x08>\x13\x8b\xec\xde\xad\xecK\xbf\\\xf4\xff~\xb8!\x1d\xf9\xdf\xc7N~\xdd\
-\xee\xcf\x0b)\x8e^\x05}\xa4\x1d\x88\xe6\xd2K/e\xef\xde\xbd\xbc\xf0\xc2\x0b\
-\x00\x8c\x8e\x8eR(\x14\xf2\xfe\xe6\x9e\xe7\xe5!\xa9\xb6mS*\x95\xf2\xc8)\xed\
-\xc7\xd0\x91W\xcb\x96-c||<\x0f\xfd\xadT*\xbc\xedmo\xe3\xc2\x0b/\xccM5\xfa\
-\xbb\xce\x870\x9c\xdc\x9c\xe2;\x10 UUf\x03\x0e"\x88)0\x02\xb1\x9fw(\r]\x95\
-\xafa\x93\xe5+H\xf5a\x96\xd6P\xde;\xfa[?\x8e\xf8\xd0\xc7?\xcblX`\xd7\\\x04\
-\xc2gb|\x88\x97\xb6=\xc9\x07~\xf3-\xbc\xe3\xe6\xb3Xj\xab\x84>[\xc6\xa4\xed6\
-\xc2-fN\xe8\xa3\x0b\x89\xa3\xde\x03\xfd\x96\x8f\xb4\xef\xa7\x01\x1bx\xf6}A\
-\xeb\xcd\x11.a\x1d\xe6{J\xdag\x17\x1f\\\xf1\xf7]kP\x81,\xa0\x98\x16\xdaQ\xf4\
-\x8d{\xe0<\x8bM\xc4<\xdc^b\xf0\xfc}\x0c\x8c\xaf\xef5\x87\xbdB\xef\xd1\x0b\
-\x9dXg\x99\xf4\x1fu\xb8\x9d\xd4\xcf\x9c#\\d\xa1\x9d\xc8\xe1\x14\xc8B\x91KZ1x\
-\x9e\xc7\xc1\x83\x07\xb9\xfb\xee\xbb\xd9\xb4i\x13K\x96,all\x8cF\xa3\xd1\x97\
-\x1f\xa1\x13\xe2\xa4\x94\x14\x8bE\xca\xe52\xb5Z-O\xa2\x8b\xa2\x88\xb9\xb99\
-\xca\xe52\xaf\x7f\xfd\xeby\xe3\x1b\xdf\xc8\x8a\x15+\xf2\x1aS\xbd\xd9\xdd\xad\
-V\xeb\x90\x0cl\xc3\xc9\xc7)\xad@\xa4Tn\x90\xc4\x86\x989l\xda\xf8T!.@\xea\x80\
-\x80\x96\xa3j+\xd9\xa8\x0c]O6U\x94S\xaaLP\x9d\x14B\x07\x9e\xde\rw\xfe\xe1g\
-\xd8\xdd*PK]:\xf5:K\xa6\xaa\x88\xda.\xfe\xdb\xef\xfc\x06\xd7\x9c_\xa2\x0c\
-\x14$\x08=c\xba\x8d\xc9b\xa5\xc3\xa1\xde\xe2>3\xd5\xc0\xbf\x0e/ \x17\xd2\x0e\
-\x0b\x1cv,\x1c\xe2\xef8\xdc\xef\xbd/\xe8\xb9\xde\xe1\xd6\xeaG\x1d\xff\x11\
-\x9d\xdbb\xc1!\x0c\x1a\xf9\xf4\x91\x87\xbb\xc6\xe0\xf8\x8e\xbc\x02\x1fT \x0b\
-]] q\xfb|7G\rj\xfbY\xd3\xab\xdc{\x15\xfa\xc0v\xedHo\x1f,\xac@\xf4\xdffgg)\
-\x97\xcbx\x9e\xc7\xcc\xccL\x1e\x95533C\x10\x04\xd8\xb6M\xa1P\xa0P(\xe4Ux;\
-\x9d\x0eI\x92044\x84\x10\x820\x0c\xf1}\x9f\x8d\x1b7r\xf5\xd5W\xb3n\xdd\xba\
-\xbe\x1a[\xda\xe7\xa2w \xc6|ujp\xca+\x90(UU8\x12\x1a8\xcc\xe3ST;\x10\xe9\x81\
-\xed2/T\xd6\xb8V %\x19d\tUEu\x02\xd9\x04\xb7BM\x08~8\x07w\xbc\xff^\xb6\xcfD\
-\xc4\xd2\xc6\xb1c\xe2\xd9\x1d\xdct\xe5z\xdew\xc7\x9b8\xff4pS\xf0E\x96\xf9\
-\x0b\x87\xdaZ^\x16Y\xcd\r)\xbb\xe6\x0eKW\xf3\x15\x03\x82.\xcd\x04\xa3N\x02\
-\x93\xe8\xd6\xbfp\xe4\x95\xfc\xe1D\xb3 \xdb]\x1cI\xba\x0c:\xcc\x07\xcf\xd0c\
-\x0e\xeb\xf5\xcf\x1cr\x1d\x06\x85{v\x1f\xc7\x98\r\xdd\xebk\xea]Y\xf7\xfa\x83\
-\x8e\xa6\xa4\x16Rp\x87\xf3\x01\x1c^\x81t\xc7+{\xbaO. \xb3\x81\x81\x9d\xd7\
-\xcf\x9a^\'\xba\x14\xdd\xb9<\xdc`\xf4\xb1}d\x15\xae\x0f\x93;\xd1\x1b*\xaa[\
-\xa9\x16\x8bE\xe28\xe6\xd9g\x9f\xcd+\xe3n\xdf\xbe\x9d\xf9\xf9\xf9<jJgrOMM144\
-\xc4\xfa\xf5\xeb\xb9\xf4\xd2K\x19\x1b\x1b\x03\xba\xe1\xb3\xba\xb6\x16\xf4W\
-\xc6}9\x85\n\r\'\x8eS^\x81$\xa9\xf2qH+\xc0\xa1\x81\x83\xab\xb6$\xd2\x03\xdb\
-\xa6i\x89|\x07bK(Em\xf5\xc1\x94:\xc42 \xa87\xb1\xc7\x96\xb0;\x849\x07\xde\
-\xf6\xde{\xd8=\x17\x13a3Tv\xd8\xbf\xed)\xde\xf7\x1b\xbf\xc4\xbf\xbb\xed\\\
-\xaa@1\x82b\x1e\\\x93.\xf0\xa0\x8a\xc3>\xc0\xfd\x16\x87#+\x90\xfe3.\xa0@,\
-\x0b\xddc\xfbh\nD\x0c|\xcfFyx\x05\x92/M{\x04\xce!\xc2\xbeG\xa8[\xfd\xc2y0xuA\
-\x05\xd2w\xe4Q\xc8Cq\x17V"/g\x07B\xcfk\x8e\xbe\x03\x19\xfcY\xf6\xfc\xa4{f.L\
-\x9f\x19\xf0\xb0G\x1d\x07}\xf3\xd8{\xb1\x1e\x852\xf8}\xc1Qv\x0b\x1c\x1en\x17\
-\xd2\xfb{\x1c\xc7\xb8\xae\xdb\'\xf0\xf5\xeb\xb5\x19K\x97\xff\x88\xe387E\xe9,\
-r\x9d/\xd2\xbb\xcb0\n\xe3\xd4\xe4\x94V \xc8L(d&\x10\xd5\x1f$Kn\xc8\x1e\x8c\
-\xb8\xc7Q\xabJM\xe8\xd0\xcbL\xc8\xe7!H\t\xb1c\x13\x00?\xdc\x07\xff\xfd\x9e\
-\xef\xf1\xd9\xff\xef_`\xeaUx\xd5"\xe1\xdcv\xfe\xf8w\xdf\xcd/]\xe82\x12K*\x8d\
-iU\x86\xd6\xf5I-\x81%EV*D%\xb0\xb9\xc2V\to=Q8\xbd+\xe0tp<\xf93\xba\xb0\xb9\
-\xa6\xfb\x08\xebPV\xfd\xc7\xa3?t\x0b\xf9>\xfa\xcey\xac\x9f\x80A\x014\x10at\
-\xb4\xd3\xf4\x89\xa6|\x10\xc7\x9a\x97\xb1\xf0}\x1e~\x9e\x16\xe6\xe5\x1e\xaf8\
-\xfc\x18\xe5\x11\xe6\xff\x7f\x99\xd9\xaa\x7f\x00\x0b\\\xf8\xe5*\x10\x83aq\
-\x9c\xda\n\xe4x\x91\xd0\xee@\xd1\x07\x88\x89\xdbu\x9cB\x95\x8e\xed\xf0\xcd\
-\xe7\xe1o6=\xc3g\x1fx\x02\x86\'(\x14$\xc3r\x86\xbf\xfc\xd0;\xb9b9\x94\xa3&4g\
-`x,\xdb\x05\xf4\xac\xb5\xe3\xac"\xa9\xd3\x93\x19lu\xf5\xd5\xb1\x84Q\x1a\x0c\
-\x06\xc3\xc9\xce+z\xf9!-p\x8bd\xc9\xd4\x0e\x8e;\n\xd2\xc1\x95p\xe1\x99\xf0\
-\xde;6p\xcb\xd5ka\xf6Y\x9cV\x9d\xb9}5>\xf9?\xfe\x99:\x10\xb8e\xd2\xea\x12\
-\xa4\xe5\x13#2\x93S\x16\x91c\xbbH\xcb\xee\xb3\xfeh\xba{#\x83\xc1`8\xb51r\x8c\
-\x94N\xdc!\x89\xb3\x8cu\t\x04)~\n\xab\x0bp\xe7\xaf\\\xc9\xad\xaf[\x8f\xd7\
-\x9af\xacT\xe2\xa9\xa7\x9f\xe7\xde\x87g\xd8\x0b\xcc\xd9>M\x1c\xe2\xd4&\x8c!\
-\x92B\x994,\x10\x8e\xcd\xa0O\xb2\xd7\xe6~\\\xbew\x83\xc1`8\tx\x85+\x90\x94\
-\x84\x08\xd7q\xb0\xfd\xcc\'\x12\x05\xd8nBE4)\xc6\r6\x8c\xc2\'\xdew\x1dW\xad_\
-A4\xf7\x12\x13SK\xf9\xc4g\xee\xe1\x99\x19\xd8\x8f\xca1\xb1\xb2f\x11I\xaa:\
-\xf2I8\xd4\x89\x9e\x19\n{w GK\xe22\x18\x0c\x86\x93\x99W\xb4\x0fD\x92\x92d\
-\x1e\t\x07\xa1\xaa\xbd\xca\x14\x88@\xc4`9$\x94hHA\xdb\x82\x0f|\xe4>\xbe\xfa\
-\xd8\x16di\x88\xc9\xd3W\xf2?\xff\xef\x1b9\x1d\x18\xca\xce\x97\xf9\xe2\xb1\
-\x85jf\xb4p\xd9\x0f\x8e\x12fi0\x18\x0c\xa7\x06\xaf\xf0\x1d\x88\xc0\xc2\xa1\
-\x13\x044;\xf3 \x02\xb0\x03H\x03\x88,H|\x92\xf9\x06C\x168\x01\xfc\xf1\xfbo\
-\xe4\xda\xd7\xbf\x9a\xe9};i5S\xfe\xf6\x1f\xa7\xa9\x87\xaa\x12U\x1e]eAz\xa4\
-\xdc\nz\xfe\xf7\x8aU\xdd\x06\x83\xe1\x7f\x07^\xd1;\x10\x80 \x8c\xf1<AJ\x9b\
-\x98\x00+\x95x\xa2\x00\xd2\'\xaeE8\xe5"\xcd\xfa<\xa5\xd1a\x1a\xc0\xde\x08\
-\xfe\x9fOm\xe2\x9e\x07\x9ed\xbcZ\xe1\x0b\x1f\x7f\x0f+\x86aH\xb7}HUu\x93\xbcO\
-\xf9\xb1\xcc\xae\xd9\x89\x18\x0c\x86S\x90W\xbc\x02\xd1="b"\x12R$\x0e\x16.\
-\x0e\x02;\x05\x19\x82\xe5\x02v@\x8cK\x0b\xc1\xee\x06\xfc\xc5\xe77\xf3\xb9\
-\xcf~\x8e\xcb6L\xf1\xc9?y?\xd5\xa2\xeaI^t\x94>\xb0\xe5Q\xccX\xbd\x18\x05b0\
-\x18NA^\xe1&\xac\xcc\xdf\x91\x15\xb5\x92\x14IPa\xb9\x11\x10\n\x95\xd4\xae\
-\xd2\xb7-D\x12Q\x02VU\xe0-Wo\xe4\xfd\xef}\x0b?\xdd\xb9\x95\xcf\xfd\xcd?\x91H\
-\xd5D\xb0\xd9V\xfa \x05\xa2H\x1e]9\x18\xe5a0\x18NQ^\xe1\xddZ\x12T\xa9E\x81E%\
-\x97\xe5\xba\x1b\x87\rx\xba\xa2t\xe2!\xc3\x04\xc7\x07G\xc0\x85\xabm\xce\x9c\
-\xba\x94\xb8\xbe\x9b\xfb\x1e\xb8\x8f\r\xe7\x9d\xcd\x95\x97\xad\xa3X\x84z+a\
-\xb8d\xd3\xea\xb4\xf0\xdcr\x7f\x06\xf0\x91\xfaU\x18\x0c\x06\xc3)\xc4+\xdc\
-\x84\x15\x01Y\x97AY!\x86\xbc\xf4\x89\x0e\x92rH\xb1\xb59+\x02+FURt;\xaaXc\xea\
-\xf2\x17\x7f\xf5\xcf\xfc\xe0\xe9\xef\xf3_\xff\xe8\x83\x0c\x952\xdfG\xaa\x14M\
-^\xc3J\xa3\xcb\x7f\x1cRO\xc4`0\x18N-^\xe1\xcba\x0b\xb5\xcfpA\x82#\xc1O\xc1\
-\x97\xaaw\x88CJB\xa2r;t\xddB\x1fU\xc40\x89\x80\x10_\xc0\xaf\xdeq\x13\xeb\xd7\
-\x9f\xcb\xc7>\xf6Q\x820\xb3xI]\xb4$\xa5\xafi\x93e\x82\xaf\x0c\x06\xc3\xff\
-\x1e\xbc\xc2\x15\x88\x03\x14\xb3\xca\xbc\x80T;\x07[\x82#S<\xc0\xc5\xc5\xb2T\
-\xa8n\xa2\xb3\xff\x1c\x0b\x1c\x07\xa4C\'Pj\xe8W\xdfq\x1b#\xc3C<\xf3\xcc\xd3\
-\xb4:!\xaem\xd3\xdd\xcb\xa8\xf2\x89\xbd\xd1\xbd\xd2:r\x05]\x83\xc1`8\xd9ye+\
-\x10\tR\x8a\xcc/\x11\x03M\xa0\x06i\x03\x92\x04\x12\x81\x93\x85\xe5JK\xa5\x86\
-\xc4\xba\xe4UZ\x82\xc4\xa7\xe0C,\x95\xb9\xea?\xbc\xf7\xd7\xd8\xb5k\x07\xb6c\
-\xd1h\xd5\x06/\x95\x93\xf6|\x99\xdd\x88\xc1`8Uye\xfb@d\xd6V\x03\xc8\xfd!2\
-\x06\xe9\xa8\x86S\x96\xab\xdau\xb8\x90d\xa6\'A\x82\x83\xad\xfc\xe2\x12\x02[)\
-\x10a\xa90^\xdf\x81m\xdb\x9e\xe3\xec5k\xb0Hz\\\x1c\xdd"&\xc7\xd6R\xd5`0\x18N\
-n^\xd9\n\x04\x06\xfaR$=6\xa6,~w\x01SS\xde\xb0h\xa0I\x11\x0c6\x11Z\xa8\x01\
-\xd3`S)\x83\xc1`851\n\xc4`0\x18\x0c\x8b\xe2\x95\xed\x031\x18\x0c\x06\xc3\xa2\
-1\n\xc4`0\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\x0c\x06\x83\xc1\xb0(\x8c\
-\x021\x18\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\
-\x0c\x06\x83\xc1\xb0(\x8c\x021\x18\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xc2(\
-\x10\x83\xc1`0,\n\xa3@\x0c\x06\x83\xc1\xb0(\x8c\x021\x18\x0c\x06\xc3\xa20\n\
-\xc4`0\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\x0c\x06\x83\xc1\xb0(\x8c\x021\
-\x18\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\x0c\x06\
-\x83\xc1\xb0(\x8c\x021\x18\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xc2(\x10\x83\
-\xc1`0,\n\xa3@\x0c\x06\x83\xc1\xb0(\x8c\x021\x18\x0c\x06\xc3\xa20\n\xc4`0\
-\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\x0c\x06\x83\xc1\xb0(\x8c\x021\x18\
-\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xc2(\x10\x83\xc1`0,\n\xa3@\x0c\x06\x83\
-\xc1\xb0(\x8c\x021\x18\x0c\x06\xc3\xa20\n\xc4`0\x18\x0c\x8b\xe2\xff\x07\xc1\
-\x94N90\x82\xbf\xc4\x00\x00\x00\x00IEND\xaeB`\x82' 
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\xf4\x00\x00\x01\\\x08\x02\
+\x00\x00\x00\xb1\xfb\xdb^\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\
+\x00 \x00IDATx\x9c\xec\xbdg{\x1cIv4\x1a\'\xcb\xb4G7\x00Z\x90\x1c\xb3\xb3\xab\
+u\x92V\xaf\xfc\xfd\xff_\xde+w\x1f\xadV\xd2:ifg\xe8\t\xd3\xbel\xe6\xb9\x1f\
+\xd2TVu7\x087C\x80\xac\x18\x0e\xba\xcbg5\x1a\x91QqN\x9e$fF\x8b\x16?8\x98\xd5\
+\xeb\xff\xfdgU$\x00\x18`\x06\x11\x88\x00\x80\xf4\x0e\x00\x01Df\x93 \xbd\x03\
+\t\x02\x01B \x0c\x83N\'\x8ez\x03t{\x10\x02y\xaaV\x8b"O\x95Tl\xcf\xc9\x0c\xc5\
+\x90\nJ1\xdb3_\x1f\x04*\x14\xa79\x1f>\xfd\xf3\xd1\xf8\xfe\r\x9d\xb5E\x8b\x9b\
+D\xf8\xa1\x1b\xd0\xe2\x13E\xb2<\x91E\xa2\xd9\x96\x00\x06\x13H\xbf\xd7\xcb\
+\xfa\x8d\x95\x1ed\xa8\x99\xa1\x00AP\x8c\xb2\x94\xe0\x9c\x15G\xb2\xa4N\x17"\
+\x10\xddA\x04\x94y&\x95\x04\x83\x08\x0c\x10\x81\x00E\xa4\x14\xd4\xcdI\x19\
+\x02\x02\x81\xf9\xc9\xcb\x96\xdc[\xdcN\xb4\xe4\xde\xe2\xc3`q\xf2\x9d\xe5r\
+\x80A\x9a\x83a\x165\xc8*z\xbdR\xd3\xba~C\xccL\xc4,%\xab\xb2,\xc3,\r\xa3X\x88\
+@\x880\x08\x99\xcbB)\xc9\xcc\xfaX!@\xac\xbb\x04RF\xce3\xae*\xe4\x89\x88\xcd\
+\xe1\x94\xae\xce\xf2t\x1dw\xfbW\xfe\x1cZ\xb4\xf8\x9e\xd0\x92{\x8b\x0f\x80,\
+\x99\xe7\xc9\\Xr%\xf7\xc6\xee\xc0\xd6\x901\xdb\xb5\xb6g(f"\'\xf7\xa1\x00\x96\
+\xacTYJ\x15\x16e\x18\x04$\xc8\x1c@\x02P`\x08\x02\x13X1\xeb\x07\x02\x063\x84a\
+\xf9+y5\x0c\xae: ^/\xa7-\xb9\xb7\xb8\x85h\xc9\xbd\xc5\x07\xc0j\xfa\x1a@\x18 \
+\x0c\x90\x16\x96(\x19\x10\x865\xc9x3\x15\xef3X\xef\x02M\xc8d\xdf\x00\xcc\xcc\
+\xac\x94RR)m\xca\x9bC\xd8\x9e\x83H\x04`fR\xac\x8c\x15\xaf;\x0f\xd2\x0bl\xfb\
+\x91\x8b\x10=\x83\xddQ\x00\xb2dqc\x9fK\x8b\x167\x87\x96\xdc[\xfc\xd0P\xaaL\
+\x16\xef\x08P\x8c8$\x02\xa7\x85g\xbf\xd8Pj\xe5\x8e[\x0b\x9e\xedV03 \x88\x98\
+\x8dS/\x98\x15\x11C\x911\xd9\xf5\x7fL\x04f\x16B\x08\x11\x88\x80\x02\x86b%\
+\xa5RJ)f\x023\x81A\x9a\xe5\xf5\x897]y\x9f\xf1u\x0f\xc3\xde\xbf<O\xbf\x9f\xcf\
+\xa9E\x8bk\xa1%\xf7\x16?4\xd6\xf3c%\x0bAP\nE\xc9\x9d\x88\x88x\x9dU;\x98$\x19\
+#\xdb\xa9F\xf4\x004\xfb3\x14X\xebv\x10\x14\x00\xb0P\xc6\xc0!\xb0\x16\xf76\
+\xdfF1#@\x18\x86A("\xa5X\xca\xb2\x94RI\xa54C\x1b\xc3\x9f\x98\xc8\x08r\xd8\
+\x87\x05\xef\xe2\x8c\xca\x93Q\x0c\xa57+\xf5}}R-Z\\\x03-\xb9\xb7\xf8\xa1\xb1\
+\x9e\xbdr)1\x85D\x1c"\x0e\t\xc4If\xa8\xf3b\xde\x08\x1c\xf5\x92\xfd\xa9\x00\
+\xe1\x8c\x1b\xd7=0\x88\xa0X).\x14s\x14\x86a\x14\x86Q\x1c)%eY\x16E\xa9\x95\
+\xbc9\x0eV\xf4\xbbv\x98\xf0)[\xd2W\x0c\x9dx\xa3\x14\xb6\xe8\xfc\x16-n\x07Zro\
+\xf1\x83"O\x16\xd9\xda\x86R\t\x92Q(\x8e\x03\xd2\xfe\xcc:\x03\x18$\x1c\xb5\
+\x92\xd5\xed\xdbI\x94\xeb\xfc\xaeC\xa8l-{\x97l\xc3\x0c"V\nJ\x16R\xcaP\xca(\
+\x8a\x830\x8c\xc2^\x14\xc5eY\x96eQ\x96R\xbb\xf6\xda\xc2\xaf\xba\x18\xc7\xecl\
+r\xe7\xa5&wE|N\xcbZ\xb4\xf8\xd0h\xc9\xbd\xc5\x0f\x8a\xd5\xec5Y\x07]\x13w^ \n\
+@\x8c8$\x06\'\x99\xa5L\xcf\x82\xdf\x0eg\x9ap\xb5B[$\x04\x90\x97CI\x04\xd2\
+\x14M\x90\xacJY\x14\x85\x0c\xc2 \n\xa3 \x0cE\x10\x84$\x84\x90\xa5\x94(K\xa5\
+\x14\xab*!^\x814\xdbkrW\xca\x182J\xb1^\x13\x84\xd1\xcd\x7fL-Z\\\x1b-\xb9\xb7\
+\xf8\xe1\xa0d\xb1\x9e\xbfu\xb1Q"bp\xa9\x90\x15\xdc\x8b\x89\x19\x9d\x90\x989\
+\xcd\xf5\xee6\xe9\xf1\x02\xe2\xd8\xd82\\\xd9:~\xf6\x0b\xd9\xfc\x1a\xed\xd6\
+\x13XIU\x96\xb2\x08J!\x02!\x88HX\x81\xaf\xf3u\x04\xb32\xf1[\x86M\x8d7\xfa]*\
+\xd6\x14\xaf\x17\xbb\xbd\xd1\x8d~H-Z\xdc\x0cZro\xf1\xc3!Y\x9c\xb0*\x9c\x0f\
+\xae-v\x02\xb2\x02a\x80(\x00\x03\xdd\x88\x94\xe2\xbc4\x878\x05\xedj\x12\xf8\
+\xf0\x17m\x86\xa3If\x07\x81X\x87\\-\xc5\xdbc\xaaG\x02%\x89t\x82\r\x99\x9e\
+\x84H)\xe5\xa4:\x00\xc5\xec3\xbb-f`\xae\xae\x18\xbd\xc1\xde\r~D-Z\xdc\x14Zro\
+\xf1\xc3a9}\xe5\xdek\xd9\xae\xdf3\x90\xe6\x1ctM\x8az/&\xc5,\x95\xdb\xb8\r\
+\x1b\xab\xab\x14\x17\x9b\xceH\x80fw\x9bBSY=\xde#\x81~\x88`7@\xd6\x1d\xee\xfb\
+\xec\xfag\x15G\x85\x89\xfd\x8a0\xea\xf6\x86\x97\xfe Z\xb4\xf8\xfe\xd1\x92{\
+\x8b\x1f\x08y\xb2(\xd29\xb9\xd4\x16T\x04-\x08\xa5B\x92\xf3\xa0c\xb8\xb8\xdf\
+\xa1u\x06\xcb\xef\xdbe{\x13\x0cP\x15bu\x89\x8c\xdeh\'\xed\xbc\xefH\xc6!\xa3\
+\xf2\xad`\x07\x0c\xd1\xeb|KR\xccRV\xbd\x86\x023c4<h=\xf7\x16\xb7\x13-\xb9\
+\xb7\xf8\x81\xb0\x9a\xbdv\xfcL\x1b\xc9\xeb\x04\x14%\x12B/\x06\x83\x05\xa1\
+\x1f\xd3*c\xa5j\xc5\t*\xa9\x7f~\x02\r\xe0hZ[?\xc4\xe7\x1fG\xfe\xa9\x19`[eL\
+\x0by]\xf9\x80Y\x17\x961;*\xc6\xe4\xf0\xf1%?\x86\x16-~ \xb4\xe4\xde\xe2\x87\
+\x80\x19\x95je;md1\x02 B^B\x08tB\x00\x10\x02\x83.\xadRV\xbcEl7\xcd\xf7j\xf4\
+\xaa\xf5Y\xcc\n\xf6^\xb6\xa1\xb1\xdd\x9e\xa12d\xb4\xd5\xae\xfb\x08\xaa\xad\
+\xef\r&\xc3\xbd\xfd+}\x1e-Z|\xefh\xc9\xbd\xc5\x0f\x81dq\xa2dnc\x96\x15\x99\
+\xfa\x15\xdb5\xeb\xa7\x05\x08\xd4\t\xc1@@\x18t\xb5?S\xed\x7f\xce\xb8!\xf6I\
+\xdc\xcb\x91\xb4\xa5\x05v\x1e\xd58\xa8\xa2\xf5\xc69QU)P\x8c\xfb\x8f>\xbf\xc4\
+G\xd0\xa2\xc5\x0f\x8b\x96\xdc[\xfc\x10XM_\xdaLD\x93\xc6\xb2u7\xcd\xddI\xce\
+\xf0\xf8\xbd\xdf\xc1*\xb5&\xf8\xb6\xa3\xb8\xce\xe8N\xb6\xd7\xd6\xd5\xf9\xbd\
+\x91f\xe3\xbfq\x8f\x14\xca&\xccx\x16\x123\x13L\x92\xccx4>x\xff\x9d\xb7h\xf1\
+\x81\xd0\x92{\x8b\xef\x1dE\xb6\xca\x93y\x95\xb2\x82\x8a,\x1b\xb2\xdd!\xc9\
+\x99A\xdd\x9a~w\xf93\xdb\xc1h\xcav\xde\xb6\xd5e\xc2\xc0\xe3q\xf7(\xe1\xd6{\
+\x8b\xcc\xa6\xfa\xb0\xb5z\x98\x15\xf3\x83\xc7_\\\xeaCh\xd1\xe2\x07FK\xee-\
+\xbew,\xcf^\x19\xfa\xa4Z\x06d\x03\xfe\x88T\x02e\x05\x98\xd1\x8d\x00\xcd\xef\
+\x1dJ\x0b\xce\n4B\xb1\x1e\xa1o\x93\xed\xf5!\xac\xfe1>\x8f3W\x14oK\xf9\xda<|x\
+\xdd\x84N\xbda\x0c\x86\x93V\xb6\xb7\xb8\xe5\x10\x1f\xba\x01->r\xb0\x92\xc9\
+\xe2mc\x18\x91\x86_\xfa\xd1l\xb16\x88^\x91\x15Xgf\xa8(\x11z1\xf5b\x7f\xee={6\
+\xaa\xcbv\xff"\xdc|\x8f\xba\x8aw\xff`\xb3b\xec\xbf\xc6b\xd5@F+\xdb[\xdc\x01\
+\xb4\xe4\xde\xe2\xfbE\x91\'\xaa\xac\xea\t4e\xbbG\xf4\xd5\xb27CS!\xb1\xca\xaa\
+\x84\x99nD\xc3.E\xc2*nw\xd0fT\xb4vz\xcf\x93\xe1\xc6\xb2\xf3pH\x13\xb7}\x00hd\
+\xe8\x90+k\xd0\xca\xf6\x16w\x02-\xb9\xb7\xf8~\x91,\xde\xd9\x02\x8f\x00j\x02\
+\x9b\x1b\xf3`T\xc4^\x9bKI*\xacR.\xa5\x99W)\x10\x18t\xa9\x17Ws1y\xb2\x9d|\xd2\
+\xde\xc2\xe3u\xba\xf7d\xbb\xd7\x82m\xd0\x8d\xd7\xb3/=8\xfa\xe2\xc2w\xdf\xa2\
+\xc5\x07CK\xee-\xbeG0\xab\xd5\xec\x8dY\xa8\x0f\\\xf2\x86\xaa\xda\xb2.fC\xfd\
+\x0c\x80\xe6\xf7e\x86\xb4`wl7\xa6a\x97\xe2\xc0X(\xe4\x1f\xb0\xc1\xed\r\xd9\
+\xceM\xd2w\xb2\x1df@\xaa.|\xe3\x8d\x87\x82\xcd\xf0\t\x88B\xd1\xfe\xd5\xb4\
+\xb8\x03h\xbf\xa6-\xbeG\xa4\xcbSY\xa4.\x17\xc6\xc6)\x81\xcd\xa4F\x06je\xbe6\
+\xc0X\xe7Xe,\x95\x89u\x86\x01\x06=\x1at\x10\x08=\xdb\xf5Ud\xbb\xb7\xcf{d\xbb\
+\x8e\xb4\x86\x01\x92\xd5\xf4\xfc\xbbn\xd1\xe26\xa0\xcd\x96i\xf1=b5{\xedB\xa9\
+\xb5I\xeb\xaa\xc2\x90\xd4\x0c\xb3z\xe0Z\x8e9\x88\x90\x17(%w#\x8a#s\\\'\xa2(D\
+V \xc9\xab\xb1Nh\xb2\xba\xf7\xa6N\xfa\xec\xc9vx\xb2}\x83\xeb\x8dl\x17\x84<[_\
+\xf2ch\xd1\xe2\x03\xa0%\xf7\x167\x06f\xc5\xb2T\xaa\x94\xb2`Y\x14y\x9a,O\x88@\
+\xb4e&T\xf2\xdf\xb82\xec~\x18\xb3>\xe2\x88\xadq\xaf\x18\xeb\x8c\xf3\x12\xbd\
+\x98\xc2\xc0\xac\xec\xc5\x14\x87H\x0bd9JU?\xd0\xbe\xbf\xa0l\'\x7f\xab\xf5\
+\x8ct\xac5\x08\x08\x80,\x8b\xab}>-Z\xfc\x90h\xc9\xbd\xc5\x15\xc1\xacd\x91\
+\x95\xf9\xaa\xc8\xd6e\xbe.\xf3\xa4,2\xa5J%%\xa0*\x0b}S\x98Wy\x91n\xdb\xfbe\
+\xbb;\x87^YH\x94\t\xc7!\xba1\x05\x02\x00\x84@\xbfC\xdd\x08YAi\xc1E\xc9\xb5\
+\xdeA?;4e;|\xd9\xee7w\xb35\x82\x10\x98\x0e\xa653[\xdc\x01\xb4\xe4\xde\xe2\
+\xa2P\xb2(\xd2E\x9e-e\x91\x95ERf\xeb\xb2\xccX\xd5\x86\x8dz\xe1L\x10Y\x02\xb7\
+Vz5\xf3\x86M\x94q\x82\x9e\xea#T\xb7\xcav\x1fz\xd0h\x9asVp\x1cR\x1cQd\xca\x8d\
+Q\xaf\x83nLy\xc9E\xc9y\t\xc7\xf2~|u\x8b/\xef\xdd\x82\xeb\x16\x8clg\x10!\x0eI\
+_4\xee\xf6/\xfe\xa1\xb5h\xf1\xa1\xd0\x92{\x8b\xf7\xa0\xcc\x93lu\x9a\xaeN\xf3\
+d.e^\x97\xd9d\xd9\xdc/\xd3\x0e\xd8\x05\xf2\x18\xdb\x99\xed\r\x98\xe9\x92\xb6\
+%\xc9\xf8\xd9*z$\x11\xf9\xa5y\x99u\x01\xf7\xb4@Zp\x14\xa2\x1bQ\x14B\x1bA\x9d\
+\x88:\x91P\xccE\xc9\xba\x0f(\xa5\xab\xd2nO`\xfd\x16\'\xdb\tP\x9eE\xa3\xefN\
+\x08\xc4\x01\x84\x1dr5\x9a<\xb8\xca\xe7\xd8\xa2\xc5\x0f\x8b\x96\xdc[l\x87\
+\x92y\xba:K\xe6o\xd3\xd5)\xb3\xf28\xddIpo\xd8)\x19u\xed\xbb\xdcU\xb0\xd4\'e/\
+\x03\x12U\xb5\x99\x06\xe7\xd7\xb3[\xcc\xe0!/S\x9e\xc0\xf5\x8b0#/9/9\x14\xd4\
+\x8d)\x8eH\xd8pm\x1cR\x1cB*-\xe49/\xb8\x90(\x95.\x11CF\xa5\xb3\x97\xcf\xe3NL\
+$\x08a\x88\x80\xaa+v\x07\xfb\x9dv\xd2\xd4\x16w\x01-\xb9\xb7\xa8\x839[\x9f\
+\xad\xe7o\xd2\xe5\x89\x94\x85\xc7\xd6>\xffRC\x8f;;\x86\xbc\xa8h%\xdb=\x8a\
+\xf7\xce\xe1\x9dq\x1b\xb7\xfb<\xabG\xfd\xd7f\xd4\xf0\x03\xa45/\x9e\xf35\x07\
+\x82:\x11u"\n\x03\xe3\xa5\x08\x81NDqD\xdc\x85b\x14\xa5*%\x15\x92KI\xb59Q\x15\
+\x88 \x88\x84\x80\x10\x10\x96\xf1\xf5C\x83b:x\xf8\xe5\x85?\xca\x16->$Zroa\
+\xa0d\x9e\xcc\xdf\xae\xa6\xaf\x8al\xc5\x9eW\xb13\xf1\xdc\x89i\xa3\xbd\x9b\
+\xbb\xf9\xf90~Y\xddJ\xaa;\xcd\\;\xab\x9b\xe6\xba~\xb6\xa6l\xf7=\x9bjQ\xb7G*^\
+\xa5\xbc\xce\x10\x05\x14G\x14G\x14\nbb(\x00\x08\x04(\xa48\x04@\xca\xf6\x13\
+\x8a\xc1\x8aK\x05\xa5 \x19J\xe9\xc4y\xd3\x1a"(\x85\xa8\xbf\xdf\x1f\x8e\xcf\
+\xfb\x10[\xb4\xb85h\xc9\xbd\x05d\x91\xae\xa6/W\xb3W\xb2,\xfcq\x99h*o\xae\xaf\
+\xddE\xfa\x8d\xa3ky(u{}\x83\xd9}XO\xc6\t\xe7sd\xbb\xdb\xddKa\x043\xb2\x82\
+\xd3\x82\x05!\n)\x0e)\n\x10\x04\x04=Y\x1e\xdb\x07\x02\x00\x80   "\xe6\x80t\
+\xe1\x1a\xa5 \x15I\xc9\x92QJ\xe4\x12O\x1e\xb7\xb2\xbd\xc5\x9dAK\xee\x9f4\xca\
+<Y\x9d}\xbb\x9e\xbfe%\x01\x04\x02\x9bU\x00\x94\xad\x92\x88\xba\xeb\xf2~p\x95\
+*cVp\xa5\xf2\x9b\x95y\xeb\x07mf@\xba7M[\xdf\x9c\xd8\xdb\xd3\xef\x9d\xc8\xdcB\
+\x92s\x921\x11\x02\x810\xa00@ \x10\x08\xf2\xa3\xbel\xbb\x04\xf2,\xfe\x92\x91\
+\x15P\n\xc3\xbd\x83\xfep\xef\x82\xb7\xde\xa2\xc5\x07GK\xee\x9f(d\x99\xad\xce\
+\x9e\'\xf3\xd7,\x0b\x02t\xea6\xd9\x14\x97M\x93\x85A\xac\xfd\n~\x8f\xe0\xd6{;\
+\xf8\x9e\x8cY\xb6\xbb\xd0f0u#\x03\x92\xacl\xdfq\xfa\xdab-\x8b\xddu\x02\xce\
+\x91\'(\x86,\x91\x15\xcae\xc7\x10\x19c]\x10\x84 \x06\xa4d\x06\xa4\x82R\xac@`\
+\x021\x11=z\xf2\xa3s\xef\xb9E\x8b\xdb\x85\x96\xdc?=0\xafg/\x97\xa7\xdf\xaa23\
+kh;\xad\xbb\xb8\xa8\xc9\xf7\x0e\x10\x01\xacP*\x96\n[\xe7\xad6Wp>\x8e\x9f\xcf\
+\xee\x9fu\xc7\xb1[3 m\xab\xab\xf6\xbb\xe4\xf8\x9a\xf9\xbe-i\xdd\x8eT\xf2@6\
+\xbf\x86I)(\x9b-\xe3\xfc"\xcf}"\xb2y2\x83\xf1~o\xd0&\xc9\xb4\xb8Kh\xc9\xfd\
+\xd3B\xb6>[\x1e\x7f]\xa4s\xb7F\x9b\x12\xef\xa1u\xbbJk\xfc\x8e \x05H\xc9\x85\
+\xb4\x14_wRj!NOWo!\xf4\xdd\xb2\xddm"\xafY\xfep\xa4\x8d\xd3{?\x1b\xbb\xd5\xb6\
+i9o\xdaHdGT\xd9J\x90\xd5\xd5\xbc\x1b\x9b\x1c<\xdcl\xfbN0\x17\xab\xd7\\\xcc\
+\xa4\xa2\xb0\x7f?\xea\xb5\xc5\xdf[|\x00\xb4\xe4\xfe\xa9@\xc9bq\xf2M2}YM"gi\
+\x9d\xacr7\xb0v\x89Mi\xacgA\x02\x00\x04!\x08)\x0cPH.e\xe5\x9c\xf8J\xba\x96\
+\xdb\xee\'\xaa\xdb\xa5\xad\x03\x97\x1akL(\x95\xabew\xfa]\xb2}\x17\xf5\xf3\
+\xb6E\x1b\x06\xd8\xcc\xcf1maF\xdc\xe9O\xf6/1pi={Q.\xbea\xc5\x00\x17\xcb\xd7y\
+w\x12\x8f\x9eE\xbd\xfd\x8bG+Z\xb4\xb8>Zr\xff$\x90\xad\xcf\xe6o\xffP\xe6k4h\
+\xdd\xcfF\x07\xe0rZljKC\xcb7\xd8W\x10\xba\x11\x95\x01\xf2\x82\x95\xb2\xfb\
+\x93\xe7t{\x1c^\xd5\x80\xe4-y\x93\xb5\x89\xec\xaa\x95[d{\xed\xa0\x8d7n\xc1\
+\xb5a\xb3\x9eLM\xde{\xb7\xed\'\ny\xb2\x9d\x1f=\xf9\x92.\\\xc3\x9dY\x15\xab7\
+\x90\xb2\x94\xac\x18D\x08\xd6S\x99N\xd3\xce\xb83\xfe"\xeeM.x\x9e\x16-\xae\
+\x89\x96\xdc?v0/N\xbf]\x9e|\x03+\xd8\xa9.\xd8\xbdL\x11\x18\x1b\xa6\x1e\xe6\
+\xac\'/n\xe9\t\xa2\x00\x81 =\xf2\xd3\x9c\xc7s\xba\xdd\xfeF\x98s\xf5\xb6\xd6\
+\xcc\xc6\xb2\x16\xfb>\xb9_@\xb67\xec\xf5\xeb\xcbv\xa5T\xa7?\xee]&\xb7}\xf9\
+\xf6w\x9d\xb0`\x11\x05e)\x15K\xc9\xa5d\xa9\x10\xa8\x19g\xff\x9ew\x0f;{O\xa3\
+\x96\xe2[|\xff \xde\x94C->\x16\xb0\x92g\xaf\xfe+\xd5uw\xb1!\xd8\x1b\x94M\xf5\
+\x19\x91\xea\xb4\xbe\xc9\xe9\xd8X\x93\x17\x9c\x15Mzu3.5\xc6\xab6\xdc\xf6\xaa\
+S\xe0\x8a\xd9\xab\xf4v\xa3\xb8k\xe4\xee"\x9f\xcc\x1b?\xed!n%\xdb\x9fv=W\xe4\
+\xbeQRF\x07R\x99\x15\x89\xa87\xfeQ\xd4\xe9\x1eNz\x83\xe1\xfb\xeb\x85\x95y2{\
+\xfe\xcf\x04\xa5C\x11B\x98\x8a\x95Z\xc5\x03\x08\x04\x05\x02A\xf7 \x1a=\x89\
+\xfb\xad\x17\xdf\xe2{D\xab\xdc?Z\xc82\x9b\xbe\xfam\xbe>s\xcc\xae\xb3\xd8\xc9\
+\xbc!\xc0\x0f\x1e\xd6\xca2n\xa7\xf5F\xc1\x00\xf6v`\x00\x88#"\xc1i\xeeU\x7f\
+\xb4\x9b4\xa5\n\xf2\xc8\xdbC3\xf2\xa9\xdf:\xd9n]\x94+\xbb\xed\x8d\xc5\x8b\
+\xc8v\x06\x83h\xb4\xff\x99\xa4\xeebU\xe4y\xb9\x9fe\x93\xf1^\xa0K\xc8\xef\x80\
+,R\xa5\x94\xb0\x1f\x94RJ)\x12\x02a@\x0c\x94N\xc5\xafO\xcb\xf44\xefL:{\xcf\
+\xa2\x96\xe2[|?h\xc9\xfd\xe3D\x91-O_\xfc\xa7,\x12a\xd3`<+F\xffW\xc5=\xe9R\
+\xb4\xee\xb1\xe1f|0\x0eH\xc4\xbc\xce\xab\xa1@\xf6"(%\xb3@\xd0x:\x80u\xe7\xad\
+:7\xeb\xb6P\xf7vl\xee\xb0\xe9\xb6{\xda\xbf~v\xd8\x87\x8eM\xb7\x9d\xe5p\xf2\
+\xb8;\xdcO\xd32\x8a\x82\xbcT\xefN\xf3uzv0\xee\xf5\x07}\xda|x\xd1\xc7\x8a\x90\
+\xcc\xa3\n\x03P\x1c\x00\x0c%\x95\x12BP\x1c\x92bh\xa3\x86\x14\x94\x9a\xcal\
+\x1av\'\xd1\xe8i\xd4\xdbo\xcb\xc4\xb7\xb8Y\xb4\xe4\xfe\x11"[\x9d\x9e\xbe\xfc\
+oVE\xc5\xec\r\x9f\xddS\xdd\x8e\xd9\xdfK\xeb.\xc4\xb8E{\xdbe\x06\xc2\x90\xfa\
+\xc4\xeb\xcc&\xb9\xdb\xbd\x03\x81\xbc\x04\x85h\xc4&]\xbd]\xbf\xd6\xe4y\xb2\
+\xddo\xff\x86,?\xdfd\xf4e\xbbkx\xdd\xa97\x86L\x18\xf5\xc6\xfb\x8f( \x82\x08\
+\x02\xcar\x95\x17r\xb1,\xb3l5\x1ef\x93\xc9(\x8a\xa3\xcd\xf3\x07a\xcc\x10\x84\
+\x92\xc2\xbe\x8c\x1f\xa7\xb2W\x14e\xcc\xd3\x0e\xbfe\xa5\x94\xa2 \xa00\xa4\
+\x90\x8d\x8a\'\x05\xb9>+\xd3i\x16\r\xa3\xd1\xd3\xce\xf0~K\xf1-n\n\xad\xe7\
+\xfe\xb1!]\x1e\x9f\xbe\xfc/\xb0\xda\xc6\xec\xe4\x91p-\x8d\xdd1\xfb\x16Zw\x99\
+\xe0\xd5dx\xee\x1c\xdbc\xadD(\xa4\xe5w\xbb\x06\x003e\x05wc\x08\xaa\xaa\x0f\
+\xb8\xd4r\xb33\x113\xfbn;\xacE\xae7kO\xc6\x97\xe0\r\x9f\xbd\xe6\xb6\xfbV\xfb\
+\x0e\xb7\xdd;y\xe5\xb6G\xd1~o0\xee\xef\r\xa3NWJ\xces\x95\x15*\xcfU)\x95 t;t\
+\xb8?\x18\x0cz\xa2\xdeS1\xab\x93o\xfeo( \xf6~,\xc50\x10"\xcbr\xc9"(O\xc4\xfa\
+k\xd8\x9en\x9b\x17\x0f!HD\xc3x\xf44n)\xbe\xc5M\xa0%\xf7\x8f\n\xeb\xd9\xab\
+\xb3\xd7\xbf\'\xf0\x0e\xcd\xae\xf9\x9b\x018b\xdf"\xd8\xb7\xd1:\\tT\x837\x8e\
+\xaa\xa0{\x0e*%V\x19\xbb\x81\xac\xbak)$\x17\x12\xbd\x98\x04U1\xd2z(\xb5\xfaN\
+\xeam\x9a\x8c\x8d\xaagT\xfe\x8a\xef\xb7x$\x8e\x06\xa7\xd7\x03\xaa\xcc\xee\\ \
+\xa2\xea\xdc\xb6\x8d\xcc\xdc\x89;q\xe7 \xcbe@\xd4\x1b\r\xfb{#FP\x94\xaa\xc8U\
+VpQH\xc5*\x0ch<\x8a\xf6\xc7\xc3\xb8\x13\xfb7\x7f\xf2\xed\xbf\x04A\xcc\xbd\
+\xa7:\x0f\xd2\x0cr%!g\xbf\xa7b\xae\xeb<\xe8\xeb\xe9\xe26\xf0(^\x10\x82\x80D4\
+\x88\x86\x8f;\xc3G$\xce\xf3\xf7[\xb48\x1f-\xb9\x7f<X\xcf\xdf\x9c\xbd\xfco],\
+\xc5gv\xb7\xe8\xe7\xac4j4\xfa\xa2\xdb,s\xcd\x8e\xf6\xfb\x00\x87\xfa\n6\xc73@\
+\x0c&".%\xd6\x19\xa4a.C\xe7\xa5B\x92c\xd8E H\xe7\xa8\x903\xcau\rHu\t\xd9\xde\
+\xd0\xe9\x97\x96\xed\x1e\xb9k"V\xac&{\x87\x93\xbd\xd1*)\x97\xebRI\x15w\xe2\
+\xe1d\x1cu{e\xc9E\xa1\xf2\x82\xf3B\x95\xa5\x02T\xb7#\xf6\xc7\xdd\xd1\xb0\x1f\
+\x84\xc6\xe1<{\xf1\x1f\xc9"Y\x15C\x11\x08!\x88D\x00\xb0R\xe8\x88i7X\xfa\x9f\
+\xd9{(>\xecE\xa3\'-\xc5\xb7\xb82Z\xcf\xfd#A\xba<>{\xf5\xbbMf\xd7\xc2\xd1\xc0\
+cv\xa7\xcd\x81\xea\xfd\x96\xb0*_\x98\xd6m\xcfaL\x16b\x06\xa2\x00\x83\x0e\x96\
+\x19T5\x95\x13\x05\x02\xbd\x98\x97)z1G!\x8c\xc2\xb0\x04\x0bW\x00\xc0\xc9vl\
+\xb9\x98\x9f\x84S\xad\xe0m\xbb\xda\xfc\xf7\xedn{\xf3\x02\xcc\x8c\xac@Q\x8aa?\
+\xec\xc4b\xbe*\xb3\xac\x98\xbd;\x19\x8c\xf7\xba\xc3A\xd0\t\x82@\x05!\xe59\
+\x15\x05%\x99*N\x92$\xc9\xf7\xf7\x87\xddn\x17\x00\x828\n\xd7\x91\xe2LJ\xa1\
+\x08\x90\x00\x14\xa3\xdbQ\x8d\xbc\x1c}\x9bRA*\xd6\xb5*\x01H]\xb7\xa7d!\xd7\
+\xaa\xf8c\xb9x\x11\x8d\x9eD\x83\xfb"\x88\xd1\xa2\xc5e\xd0*\xf7\x8f\x01y2;\
+\xfe\xee\xd7`\xb9\xc5\x8d\x81emg\xafocv\xe7\xb7\xd4\xa8|\xc3UGmE\xcdP\xdf\
+\xe1\xc3C[1\xeb\x0c\xa5\xaa=\x1fH\x85U\x86n\x84^L\x8a\xf9\x1c\xd9n\xdf\xee\
+\x94\xed\xd80a\xb0\xd5\x99a\xe8\xd2\xc5\xe7\xc8v\x80\xf3\x12?\xfd\xe5\xdf\
+\xf6\xfa\xfd\xc5\xf1[.V"\xa4U"W+\xa9\xa4\x8c\xbb\x9d\xc1x\x1cu\xbaRqQp^\xa8\
+\xbcPE\xa9\x02\xc1\xa3\x9e\xe8\xf7\xe2\xc1h\x90-\xdf\xad\x8f\x7f\x8f\xf0\xfe\
+"\x8b\x94\xaeqF"\x12r\x10\xbc%.\xb7|\x9a\xde\xe7\xe6T\xbc\xa6x0\x84\xaeK\x1c\
+\xc6\xe1\xe0\xa8\xbbw$\x82-Q\xdc\x16-\xb6\xa2%\xf7;\x8f2O\xde\xfd\xe9\xdf\
+\x94*\x04m\xe1t/\xf7\xd1S\xee\xde{xVL\x8dx\xb8FD[\x8du\x9f\xd6\xcf\x01\x01\
+\x92\xb1\xce8/k\x01[\xa5\xb0\xca\x10\n\x0c\xbaNG{\x82\xbd\xe6\xb6\xa3F\xee\
+\x1e\xa7\xa3\xce\xe6\xfe\xca\xcb\xb8\xed\xa6\xefcFwx\xf8\x93\x9f\xfd\xa5^\
+\x99\xae\x96\xab\xe9q\x1c\xca\xbc\xe4\xd9\xa2,\n\x19\x10u\x87\x83\xfe\xde\
+\x88DX\x96\x9c\x17\xaa(\x94R\xaa,U\xbfK{\xc3\x18r\x99\x9d\xfeN\x84=\x15\x1ed\
+\xaa\x0b!B*\xa2\xf2\x18r}\x81\x8f\xca|\xa8\xbe\x8ag6\xa4/\xa2^\xbc\xf7Y<|\
+\xd0\x86[[\\\x04-\xb9\xdfm(U\xbe\xfb\xd3\xffW\xe6+\xd1Lv\xb4\xef\xbd\xb2\x8e\
+\x95C\xb3\xc9\xec\xe7j\xf6\x1a\'9\x89\xbe\xa5@\xccNh\xeeNrNsx1Z0#\xc9!\x15\
+\x8fz\x14\x06P\xd2\x9c\xdf\x1a\xe5\xdbe\xfb\xf6P\xea6Z\xaf\xc9v\xfb]\xa7\r\
+\xd9\xee\x1ek\xa4\xc2\x8f\x7f\xfe\xb7\x83aU\xdd\x97\x95Z\x9e\x1d\xcblA\x02\
+\x8b\x95LR\xc9R\x85q8\x18\xefuz}\xc5\xc8\x0b\x96R\x819M%\x88\x86\x9d<H\xfe@`\
+\x90\x10A\x07B@fJ\xee\xd4\xec;?1M\xf1\x84\xa2\xe4\xa2\x04\x11\xa2\x00a@\x14\
+\xf6\xa3\xd1Qg\xf8\x90D\xeb\xa9\xb68\x0f-\xb9\xdfm\x9c\xbc\xf8\xcft\xf1N\x88\
+:\xb3o\xe6>\x9e\xaf\xd9\x1b\xef=f\xf7\x85\xb6\xbf\xe9rD\xe5\x9d\xa0\x90\xbc\
+\xca e\xe5\xa7\x13!\xcd9-\xd0\x8f\xa9\x17\x1bE\xefd;\x8cWnskpi\xd9\x0e\x86\
+\xaa\xcbv\xbf\xde\x80.9id;\xd0\x1f\xde\xfb\xea\xa7\x7f\xb1\xd9\xf8t\xb5\\O\
+\xdfE!\xe7\x85\x9a\xaf\xca"W\x04\xee\xf6\xfb\xfd\xf1\x9e\x08\xa3\xb2\xe4\xb2\
+T\xa1@\x92S\x9a\xac\xf6\xe9\x8f\x82lK\xb9\xea9.\x0b\x06\x84U\xf1E\xc9\x85\
+\xd4\x8b&\xdc\x1a\x8f\x9e\xc4-\xc5\xb7\xd8\x8d\x96\xdc\xef0\x16\xa7\xdf\xcd\
+\xdf\xfe\x8fvc\xe0\xaa\x0b8Z\xf73\x1a\xcdk}q+\xb3{\xf0\xad\xf9ss\x1f/\x01"(\
+\x85$\xe7\xb4\xb0i\x90\x00X[\xf0L\x04-\xe1\x99\xa1T\x15"eP%\xb37d;\xea\xe4\
+\xee\xa4\xba[\xef\xdcv\xd4e\xbb-&l\xd8W1\xbe\xfa\xd9\xdf\x0cv\xcc\xa5\xa7\
+\xa4\x9c\x9f\xbc\xe3b%\x02Z\xae\xcbu*Y\xaa \x08\x06{\xa3\xce`\xc0\x10E\xa9\
+\xe2@\x80\xb9\x9c\xfeF \xbf\xde\xe7T\xc1\xa7\xf8\xacd\xe9Q|\x10v\xc3\xe1\x93\
+\xce\xe8q\x9bQ\xd3b\x13-\xb9\xdfUd\xc9\xec\xf8\xdb\x7f\'4\x07+\x81 \xaa\x12`\
+N72\x00\xf24\xe4\xe5\x98\xbd\xb1r\x07\xce\xdf\xea\xbeg\xba\x91y\xc9I\x06=\
+\xdd\x07\xacQ\x93\xe6\x9c\x15\xe8\xc6\xd4\x8b!\xaa$\x9a\xdd\x03\x97,\x83\xd7\
+B\xa9\x1b\xb6\x8crs\xc0\xda\xbb\xe5m\xb2}4y\xf4\xc5W??\xf7&\x90\xaeV\xeb\xd9\
+I \x8a\xb2\xc4b]\xe6\xb9\x04s\xa7\xdb\x1d\x8c\xf7\x828V\x8a"\xa1\xf2\xe9\xef\
+\xe8\xc2\x0e\xfb\x05\xe1(\x9e\x81\xa2\xe4RA\x00\x81@\x18R\x10\x8fz\xf7~\x11D\
+\xdd\x1b\xbc\\\x8b\x8f\x00-\xb9\xdfI\x94E\xfa\xee\x9b\x7feU8+\xa6\xc6\xec\
+\xd0\xc4\xc2\x1bA\xd4*a\xc6\x81v\xd1\xf7n\x9d\xbe+1\xe6\xb2\xd0<\xb5\xce\x91\
+\x97\xc6\x84!"\xa98/\x91\x97\x08\x03\xf4;\x08\x03\xf2\xedr_\xb6\xf3\x8e\xc5\
+\x0b&\xc94\x98=\x8a:?\xfe\xc5\xdf\x85\xe1\x05\xd2Q\x98\xd7\xcbe2?\t\x84,J^\
+\xae\xcb"W\x82\x10\xf7\xba\xfd\xd1(\x88\xbb\xe5\xec\x0f\xa2\x98\xe2\xc6\xc2\
+\x9eLP\x00\x18B\xdf\x80\x10D\x04\xc5(JV\x8a;\x91\xa0\xcedr\xf4\xab\x1b\xba\\\
+\x8b\x8f\x04\xadaw\'1}\xfd{\x93\x1e\x03/L\n\xcb\xec^6\xb5\x95\xf5\\%\xc5\xec\
+\xe6c;\xe1\\u\xec\x96}`d\xf6f7\xb0\x13\xdb\xf4\x83\xbeT\x1cQ\x14rV`\x9d!+\
+\x01\x06\x11u"\x84\x82\xd3\x02gK\xc4\x11\x0fb\x04\x81\xc7\xe0\xee|\xbcqF\xef\
+\xa7\xf3t\x9c!\xe3\xf6\xda"ht\x11\xc8\x0b\xf6TD\xfd\xd1\xa87\x1c\xceO\x8e\
+\x85\x9c\xef\xef\xc5\xabD\xae\xd32]\'E\x9a\xf5\xf6\xf6B\x847\xa7\xda\x15S\'\
+\xc5X\xb1\x88\xb0\x8a\xb0`\x16\xa5d\x02\x82\x80z1\x95\x8a\xd2L\xa1\\\x8c\x8a\
+,\x88:7u\xd5\x16\x1f\x01Z\xe5~\xf7\xb0\x9a\xbd\x9e\xbe\xfa\xad.j"\xb4\xfdbG\
+\xa2Za\xaa\x19\x9d\xc8\x16m\xdf\x1aAm,\xfa\xcc\xbeK\xad_\x9d\xb3v\xf0\xbb;\
+\xabb\xa4\x05\xaf3\xad\xe2\x8d\x85"\x15\xd2\x02\xa5\xd2\xe9\xf0\x08\x84/\xc6\
+\xaf)\xdbI\xff\xd4=\x153\xd6\xa9z\xf6\xec\xe9\xd1\xe7?\xbd\xd4m\xe5i\xba<{G\
+\x9c\x97\n\xcb\xb5,r\tF7Z\r\xa2\xc5M\xd82J\xc4\xe3\xb2\xf3y\xd0\x19eY\xa1d\
+\x11\x15/\x83\xe2\xady.\x03\x08\xe8\xc4A\xa9h\xb9.\xc2(\xeeO\x8e\x86\xfbO\
+\xda\xe1N-4Zr\xbfc\x90e\xfe\xf6\xeb\x7f6\x86L\xcd\x8d\xd1\xa1B\xf3\xdb$\xa1\
+\xcb\x82\x01u\x8e\xd9e\xc84b\xad>\xea\xfd\x01\xd59\xb9y~\x07g\x86o\xdd\xb0\
+\xf1\xd6\x9cGS\xfc2\xe5\xbc\x80\x8b\xb6J\x85\xac`\xa9\x10\x87\xd4\x8d\x10\
+\x05&\x97f\xcb\xc0\xa5\x1a\xbf3\x83\xd4\x8e\xdcv"b[_A*\x94\x92\xc1\x90\x8c\
+\xbf\xf8\xd5\xdf\xf4\x06\x97\x98wIcqv\x9a-\xa7A\x88u*\xd7\x89\n\xb1\xda\xeb\
+\xcc\xaeM\xeeL"\x0c\xc6?\x91\xa2\x1f\x08\x98Zj$\xe4\xf4\xb7(\xe6@\xe5\xf9\
+\x88@\x9c-d\x18 \x10\x10A\xdc\x1f?\x1c\xec?\r[\x0b\xfe\x93GK\xeew\x0c\xd37\
+\x7f\\M\x9f\xfb\x82]\xcbsAT\x99\xec\xf5Z\x8f[e\xbb\xf5\xe5\xe1\xbdn\xf3\xdf\
+\xa9\xf9\x96}\xd2\xda\xcd\xeb\xde[>wk\x13\x8e\xe2W)\xa7\x85\xce\x99!\x10\x94\
+\xe2\xb4@)\x11\x08t#\x8aC\xe8\xc2\x8a\xbe\x96\xbf\x94l\xd7w+%\xb2\x82\x15s\
+\x14\xa0(qx8\xf9\xc9\xcf\xff\xfa\n\xb9\x8beQ\xcc\x8e\xdfA%RQ\x9a\xae\xfat|\
+\xd5\x04H\x07f\xc4ky\x9f\x830\x10\x02\x00\tb\x04\xa2<\xe9\xe0\xb4\xfa\xc5\
+\x10\xd2\x02\xb35\x8f\xfbU\xbe\xbf\x10\xe1`\xf2\xb8\xa5\xf8O\x1c-\xb9\xdf%\
+\x14\xd9\xfa\xed7\xffBPU\x1c\x15\x96\xd9]\xadGQ\x91J-\xa0\xba\xc3\x90y\x1f\
+\xf5S}\xb1\xb6\xcbn4Y\x9d\xb7\x91\xfa9\xdf<"R\x8c\xac\xe0u\xcai\xc1\xa54\xd2\
+U*\xce\x0b\xe4\x92\x05Q\x14R\x14\xe8\x19\\\xed\tk\xb4\x8e\x86l\x87\x97x\xae\
+\x87}\x02\x98\xafM\xef\xe1\xcaR\xfe\xecg?\xdf\xbfwt\xee\xdd\xed\xc4j6/\xd6ge\
+\x99p\xfeF\x9cw\x7f\x17\x013G\x8bt/\x97B\x98tW\x96\x12\xfd(\x19v\x17\xba\x00\
+\x8f\x0e\xab\xbe\x9b\xb3 \xdc\xdf#\xc5(%\xa4\x9d0P\x88p0~\xd4\x9f\x1cE\x9d\
+\xc1\xf5Z\xd2\xe2N\xa2%\xf7\xbb\x84\xd3\x97\xff\x95.\xde\xfaN\xba\xae\x14\
+\xe6H\xbc9[\x9eg\xcb\xbcG\xb6o\x11\xf8N\x1bn\xc8\xf6\x8b\x12\xbbO\xf1\xde\
+\xf7\xec\x02\xe4\x0e\xab\xb6\x19\xc8\x0b^\xa5JS\xbcR\xac\x18\xa52\xe36\x15C\
+\x08\x84\x82\x82\x00\xa1 !L\x10\x02V\xa4k\xd9\xae?\x16\xa5L\x0f\x11\x08\xc4\
+\xa1\xf9\xdc\x96)\xaf3v\xd4\xcf\x8c\xd1\xa0\xf7\xcb_\xfd\xbd\x08\xae\x98k\
+\xc0J\xad\xcf\xde\xae\xa7\x7f\x10\x90W;Cu*P\xa6\x0e\xd6EL`"\x1d\xc3\xa6Qt\
+\x1aR\xa2\xef\xa9\x948[q\x9a\xf3\xfd\xb1\xe8FUb\xa8O\xf1D\xa2\xbf\xf7p\xb8\
+\xff4\xea\x0e\xaf\xd9\x9e\x16w\x0b-\xb9\xdf\x19\xe4\xe9\xe2\xdd\x9f\xfeM\x0f\
+}\xacd\xbb0\xe6+\x99\xf8)\x00\x90\xcb\x8d9W\xb6\xfb\xee\x8ag\xe3P}\xa57\xc8\
+\xd5K\xb9\xd9\xc2\xef\x15e\xfbt\xbe\x8d\xdf\xdfO\xee\x15\xb3\x9b&1r\xc9Y\xae\
+\xd2\x9c\xf3\x92\xa5b\xa5P*\xe4%\x8a\xd2T\xcau\xb7&\xec\x00\xaeM_D\x08\x8aCt\
+"\x08\xaal\xfa\xd9\x9a\x0b\xc9\x95x\x07\xbe\xfc\xea\xabGG_\xecl\xdd\x05p\xfc\
+\xa7\x7f\xa2r}\x9d3\x00\x00XQ\'\xc3\xbd\x82c\xdd\xf8.\xcdCu\xa2ok\x9d\xf1t\
+\xc5\x8aq0\xa4~\x87\x1a\x7f\xc7\x0c\x94\nR\xd6(~t\xf8Y\x18\xbf\x7f\x9a\xef\
+\x16\x1f\x07Zr\xbf3\xa8d\xbbcg_\xb6{\xb3,\x19\xad}\xae\xdb\xbe\x8d\xd9\xab\
+\xb5N\xac\x13\xd5\xd6o\x9c\xac\x06\xae\x11<7\xde\\\x98\xdc\xfdKV\xa3l]\xf0\
+\xb3(U\xa6\'\xcd\x90,%J\xc5E\x89R\x19\x9d\xee?\x1f\x90\x1e\xa7\x0b%\x04\x05\
+\x840$\xdf\xc3\xd1\r"\xa0\x90\x98\xadM\x01G\x1d\xc5\x8d\xe3\xf8W\x7f\xfd\x8f\
+\x17\xcay\xaf\xce\xa5dv6;}\xcdL"\xea\xe7\x8bW\x11e7\xf1\xb7\xc5\x10\x11\xc2\
+\x11D\x0c\x99P9\xd7\x1f\xc2l\xcd\xcb\x94\xbb\x11M\x06\x14\x87\xd8u!\xd6%\x85\
+%+\x00\xad\x17\xff\x89\xa1%\xf7\xbb\x81"[\xbd\xfd\xe6_D5\x89\x92\x91\xed\xd6\
+vo\xba1\r\xd9\xeeGAk\xb2\xbd)\xcf}Fw\xeb-\xd5\xfb\xc2\xdd\x9d\xae\xe6\xae\
+\xd7(\xbd\xb1\xe0o\xf6\x0em\xc0\x1bE\xeb]\xbc\xf1\xa4\xc0\x0c\xc5\\\x96\x9c\
+\x97*/\xb9\x94\xacK\xaf\x94\xb2:\xa5\x96\xf0\x0c\x10X\x93\xbb\xae\xc0\xc3\
+\xf5\xf30 \x08\xeb\x0c\xcbT\x19\xf1\x0e\x00\xf8\xfc\x8b\xaf\x8e\x9e~\xb1\xa5\
+\x81;\xb0>\xfbvu\xf6\xed:-\xf5\xdfS\x1c\xc2\xf9$\xd7\x06W\x1f=Q\x92\xe3l\xa5\
+\xa4\xc4\xb8O\xa3\x1e\xd1\xb6\x92\xf7\x9b\xc7\xeb\x8c \xddu\t\x11\xf6\xc7\
+\x8f\x86\x07\xcfZ\x8a\xff\xb8\xd1\x0eb\xba\x1bX\x9d\xbd\xd4i\x8e[2U\xaaU&\
+\xc9\xafq\xac\xff\xb7_c\xcaMf\xf7\xb8\xdcv\x0f\x1b\xc97\xde\x19\xd8\xef\x12\
+\xc0`\xd2\xf2\x97@\xac\xffs\x17\xf7i\x95v\x89v\xaf\xed\xb6)\xae\x8d\xe6^\xb8\
+jy\x14"\x0cE\x8f\xc1\x0c\xa9\x94R\\\x94\xc8K\xce\n\xcdb$\x08\xcc\xec\x17]h&_\
+\x926\xda\xd1\x8b\x91\x15TH\x10L\n\xe6\xab\x17\xdf=x\xf4\xe4\xe2\xe2}5?I\xd3\
+\x82\x8c\x9b\xc4\xccM\x9f\xe4\x1a0\xdd\xb7b\x94\xc1\xbd\x14y@\xd3\xc3\x89\
+\xe8\x84U\t\x9d\xf7\x1e\x1f\n\x04\x82\xb4\x17\xafd\xb9<}\xbe\x9e\xbd\xee\x8d\
+\x1e\x0c\xf7\x9f\xb4^\xfc\xc7\x8a\x96\xdc\xef\x00d\x99\xaf\x17oQ\xe7s\x1d\
+\x01\xb4"\xbb\xa6G\xf5\xffz\xaa;\xd1\xa0\xfaf\x97\xb0\xc9\xec5\x86w\x14kv\
+\xa9\x8euLo\x93\x0f\x99\x98@v\\\x7f\xc5\xef\xc4`\xd7\xc2ZSiK\xc7\xe3]\xcf>\
+\x8f\xe8\x0e\xa6v\x17Z\x90\xb3\xbbW\x10H\x08t"\x8e#\xea\xc5TH.%J[\xb8\xe6\
+\xbd\xdd\n\x11\xba1\x15\x89r\xbb\xe4E\xfe\xee\xcd\xab\xc7O>\xdb\xb6\xfb\xb63\
+\x84\x03\x85\x99U\xd97\xa5\xd9\xab\xe6\x95\x92\xc2\xf1\x97\x8f\x1e|\x06 [\
+\x9d\xe4\xf3\x17\xf9\xfa\xf4r\'\x81)\x1a\xac\xbd,%\xcb\xd5\xf4\xe5z\xfe\xba7\
+z0:x\xd6R\xfc\xc7\x87\x96\xdc\xef\x00\x92\xc51\xabB\x90\x95\x9a\xf0\x148\xd5\
+\xf9\xaaf\x91\x9b\xc7y4wq<Zw@\xc8\xad\xa9\x18\x9e<n\xadQ\xba\x7f:v/:{\x9c\
+\x19\xae\x9e\xafN\xd1\xdc\x19;\xad\xc5\x02\xa8\xce\xecU/Sw\x9d\xbc#,\xb73\
+\x08`3F\x89\x08qHq\x88R\xa2\x90\x1b\x11\xd7\xfa\x87\xe1\\\x8d8\x84 r#\xa7\
+\x00\xbcy\xfd\xe2\xe1\xa3\'"\xb8P\xc1\xc5\xbd\x83\xc7\xeb\xd9\xab*\x98\xdc\
+\x18\x10pU\xe8\x0f#\xc3`\xf4\xe8\xc7\xc3\xd1\xbe^\xd9\x19\x1cv\x06\x87Er\x96\
+L\xbf+.O\xf1\xba\xa2\xa4\xc9\xa8Qj={\x9d,\xde\xf6F\x0f\x86\xfbGq\xef\xd2\x03\
+\xb8Z\xdcZ\xb4\x9e\xfb\x1d\xc0\xdbo\xfe\xad\xcc\xe6~\x06\xa4\xd6\xe3\xde\xcc\
+\xd7p\xf6\x89\xef\xb6\x03\xd0U\n\xbcR\xe6\xee$uc\xdd\xfa/\xb4\xf5\x1d\xbc\
+\xfd\x9a0\xb5[\x98\x9bo\xf4;\x98\xb2_\xb5\xd0\xea\x06\xd9\x93\x95\xecMf\xb7]\
+K\xdd{b\xd6\x85\x1e5\x143+Vn\xd9\xa3X\x06\x942*^*\x1d@\xdd\xf2\x85\xd7\x9d\
+\xd2|\xcdia\xd3f\x00\x00?\xf9\xe9/\xef\xdd\x7f\xf4\xde_\x90\xc6\xfc\xe4\xbb\
+\xb37\x7f\xb4\xf7\x83^\xba\x85\xdf\xb7\x00\x00 \x00IDAT\xbc\xf1\xd8tI\xe8dG\
+\xf4\x1e\x1f>\xfe*\xd8\x91\x9aY$\xd3t\xf6"_\xbd\xbb\xc2\xf9k^<\x00Bot\x7ft\
+\xf0\xac\xa5\xf8\x8f\x03\xadr\xbf\xed(\xb2U\x91-\x1cM\x10\xc8\xe8\xcb\xba\
+\x90\xf7\xb2e\xb6\xa0\x92\xd7\xd5\nG\xa8\x96\xb6-\xe0\xbd\xb7\xc4O\xce\n\xb2\
+\x8f\x02\x9a\x0f\xb4BeW\xf6\xc0\xa8vPM5\x10<gf[\xeb\xfc\x1e\xc9U\xc4\xb1W\
+\xf7-\xff\xda\r\xe8\xeb1i\xd5\xee\x19\xfc\xa6\x81l\x9b\x19\x06\x08\x02Hi\x86\
+\xf9\xa8\x1d\r\xe9D\x94\x165\xfe\x7f\xfb\xfa\xe5\xc5\xc9}\xef\xf0\x99,\xd2\
+\xf9\xe9s\xbc\'\x85\xff\xfd\xd0w\x9cso\xf8\xe0\xc7\xc3\xf1\xe19{F\xbdI\xd4\
+\x9b\x94\xe9,\x99>\xcf\xd7\xc7\x97\xf2\x83\x9c\x17\xef(>\x99\xbfK\x16\xefz\
+\xc3{\xc3\x83g\x9d\xfe\xe4z7\xd1\xe2\x03\xa3%\xf7\xdb\x8edq\xbc\xe1\xaa\xe8W\
+\xe3\x7f\xa0\xa6\xd4k\xf0\xe2\x93\xc6\x1e\xa9h\xd2\xc5)\x9b\xccN\x82\x9cd\
+\x17\xd0\xffj\xe7\xf2Nm\xa8D\x81\x99\xc8pf\x95.\xbe\x9d\xcf\xb7\xae\xf5\xdcu\
+\xd7*O\xb6\xbb\x9e\xcb\xc6\x12\xac%cK\t\xd4\xdd\xa7\xa6#\xa4\x9b)\x04\x04 \
+\x04)\xc9RAVI(\xe6c\x8cC\x04\x82\x94\x82\xcby\x9f\xcf\xa7\xeb\xf5\xb2\xdf\
+\xbf\xa8\x1f\xbd\xff\xf0\xc7y\xbaL\xd7S\xd8\xc0\xac\x05\xdb\xdf\xd6\xfb\xc5<\
+\x11\xa4\x82\x8a\x1f\xde?\xfaqp\xb1\x88n\xd8\x1d\x8f\x1e\x8de\xbeJf\xcf\xb3\
+\xc5\x1b\x98\xd4\xc7\x0b\xc1Q\xbcR(\x15+\x85dy\x9c,\x8f;\xfd\xc9\xe8\xe0\xb3\
+\xee\xf0\xbc\xae\xa5\xc5mFk\xcb\xdcv\xbc\xf9\xe6_K\xab\xdc\xab\xb1K\xae\xfc\
+\x80eg\x00:\xf1\xcf\xcfttN\x8e\x039\xab\xc3\x91z]\xa7W,O\x01 \xaaDzl\xf0\xbb\
+\x0ehj\xeed\x06+@1+f\xb0\xf1H\x00k\x93X\xbf\xc6\x1cY\x8b\xaaz\x86\x8c\xbd4\
+\x99G\x91J\xbc\x9b6\x18\xa6vn\x0c\xb3bVJ9[F\xd9\x9a\x036\xce\x0bV\xac\xe0\
+\xb5\x14&CF1\xa4\xd2v\xbc\x89\xf9\x12h\x9e\xa8$\xd7N\xbci\xe4\xe3\'\xcf\xbe\
+\xf8\xd1\x9f]\xfc\xf7U\x16\xd9\x9b\xaf\xff\xb5,\xb2NDQ\xa0\x1bB\x92z\x92\x83\
+\x90\x13A\x85_\xf3k\x13D\xc8T\xdc?\xf8j|\xf0\xf0\xe2\x17\xf5\xa1)>_\xbecU^\
+\xe5pM\xf1\xf6\x17\xd4\xe9OF\x07\xcf\xba\xc3{WkL\x8b\x0f\x88\x96\xdco5\xca"}\
+\xf3\xbf\xff/\x11\x0b\x93\xfcBz$\xba\xc7\xf2\xde\x80\x1f\xe2\xc6\x90\xa3-\
+\xe4\xee\xe56R\xc5\x9f\rX\xc1N\xa6\xdad\xe5\x9cT\xf0\x8buYrg\xc5\xbe\xf5\xcd\
+\xbc\x83\xdc\xbd\xdc\x19\xfd\xe2\xf9\xfb\x96\xdaE\xf5\xf4\xe0\x05\x08,\xb1\
+\x9b\x13+\xa54\xa1+\xbb\xa0\x0c\xebW\xd7ac\xd0\x03\x80b\xeb\xf9\xdbB\xc1\xcc\
+\x90\xcaV\x8a\x04\xb2\x82gk\xdf\xb1G\xa7\xd3\xfd\xab\xbf\xfe\xc7\x0b\x86U5\
+\xd2\xe5\xe9\xdb\xef~\x13\t\x15\x87\x0c\n\xb9\xf7\x0c\x9d\xfby\xa1T\xb1\x8a\
+\xcbW\x81\x9cn\xd5\xefZ\xb0s\xe7\xe1\xe1\xe3\x8b\n\xf6s \x8b4\x9d\xbf\xc8\
+\xe6\xaf\xae@\xf1\x0c\xe8\x01\xc0\xb6\x84\x01:\xbd\xf1`\xffi\x7ft\xbf\xf9}jq\
+\x8b\xd1\xda2\xb7\x1ay2wO\xf3T\xa5\xfdY\xe8w\xcc\x15K\xc2\xcb\xd2\xa8S\xb1\
+\xcf\xa4\x80elr}\x84#v-\xd8=f\xdfB\xee.\xbb\xd1S\x06,\xa0{\x97\xaa\xec\xc0E`\
+\xedv\xdb]\xd9\x07\x13\xdd:a\x9a\xea\x9a\xed\x8c\x14\x905e\x8c\x13T\xd92\xb4\
+e`\x8f=\xc66\x8c\xdcS\x00\t\x02\x834\xddG!\x05\x01\x97\xd2}\xe4\x9c\xa5\xe9t\
+zzpx\xff\xa27\x04t\x07\xfbA\x18+\x99\x12\x10\x8e\x8e\xca\xe80\x10\x1c\x05\
+\x90\x9d\x01\xe1+\x9e\xfd\x96\xcbU3\x84@Hs\xccS\x1e\x882\xcf\xd6\xbd\xf0\xba\
+!\xcd \xea\x0e\x0e\xbf\xea\xee=I\xe7/\xf2\xe5[Uf\x17?\x96\x80@ \x10\x90L\xa5\
+\x84b\xce\xd6\xb3,\x99-\xbb\xa3\xbd{_\xb6F\xcd]AK\xee\xb7\x1aE\xba\xa8\x94\
+\xf8\x06Y\x1b\x9b\xb9\xda\xec(\x8d\x08>\xa17\xd2\xf2*\xcf\xc6\xbc\xd4\x98=0\
+\x9c.\xea\xca\xddo\x80\xcb(a\x82R\xe6\n&j\xba\x9d[\xd1\xa0\xfb-\xb7d\xedug8\
+\xf9\xcf\x17\x86\xf9u\xfe<@pS\'\x111\xb9)\xf3l\xffV%g6?\x19\xb7\x9e\xcd\x15m\
+d\x98H\x07\x82\x11\x07\xe4\x8ft\x05pr\xfc\xe6R\xe4\xbe\x9a\xbf+\x8b$\x10\x00\
+D\xba*\x12y\x1c\x86\x02 !\x04(\x80\xec\xc6XV\x1f\x01A1f+^\xe7\x00\xb0\x98\
+\x1e/g\xc7\x83\xe1\xe4\xe0\xc1\xb3\xe1\xf8\xbaf\x88\xa6\xf8\xde\xe4Y6\x7f\
+\x95\xce_^\x8a\xe2\x01\x04\x84 \x84T$\x15$s\x9e,\x8e\x9f\xff\xba7\xbc7\x98\
+\x1c\xb5\x14\x7f\xfb\xd1\x92\xfb\xadF\x99\xfb\xc5\xa7\x08`\xf7XLd\x9cb\x0b/\
+\x80g\'\x19\x82\xc7c\xb0\x04i\x19\x1d\xf0i\xdd\x18 \x02\xc2\xd1\xfa\x0erwJ\
+\x19\x04(\x1bY%K\xeeM\x89\xbc\x1b\xd5\x9d\xd4e{\x8d\xe7\r\xb3\x93+\x8ff\x9e\
+\x0b\xec\x05\xd8(\xec\x1d=\xcaNT\x11_w\xa4iv\x1c"\xc9\xed\x1d31x6=+\xcb\xe2\
+\xa2\xa3U\x99\x97\xa7\xdf\x81\x89\x99\x15P\xa4i\x9a\x95\xdad\x02\x91R\xe8\
+\x04y\xa7g\xc6\xaf\x12!+p\xb6\xe2\xa2\xe4q\x9f\x88\xcct\xb2\xc9j\xfa\xfc\x7f\
+\xa7\xfd\xe1dr\xff\xc9h|\xdf\xc5\x93\xaf\x06\x11\xc4\xbd\xfd\xcf;{\x8f\xd3\
+\xe9\xf3t\xf1\x8aeq\xa9\xc3\x9d\x8a\x97\x12Rq\xb2p\xe1\xd6\xd6\x8b\xbf\xd5h\
+\xc9\xfdVC\xca\x1c0|\xea\xa7\xc4Xe\x0e\xbb\xd5\x8b\xa3R\xb5\x16n/v\xbcnv#k\
+\xbf;\xeb\x1dd\xdd\x18\xcd\xecN\xbf7<\x19\xf2=\x19\x9b\x16y.\xb7\xee\xd8R=}X\
+:G%\xdbmP\xd5\xae\xab\x92-I\xfbS\xe6\x9a\xe4\xdac\xff\xf7N\xef\xa1\xdaR3\xfe\
+u\x1a\xa5\t\xa0\xea\x96\x86\x01\x84\x80R\xf6\x9a\x84"\xcf\xe7\xb3\xe9E\xc5;\
+\xd1\xe4\xc1\x8f\xe6\xa7/\xd2\xe51\xb3\x8a"\x15q$\xd9\xf4\xcaA :!\xbb.e\xb6\
+\xe6\xf9\x9a\xa3\x00\xbaf/L<\x13JA1T1;y>\x9d\x1f\x8f\xc6\xf7\x9e\x0e\xc7\x0f\
+\xe8z3n\x8b \xee\x1f\xfe\xa8;~\x92\xcc\x9eg\x8b\xd7\x97\xa6x\xab\xe2\xb5\x17\
+\x9f\xad\xa6\xd9zj(~p\xd8z\xf1\xb7\x10m@\xf5V\xe3\xf5\xff\xfc_U\xa6\x86\xed\
+\x84\x13\xc9\xceR\x815.<\x9b\xdd\x13\xd9\xfe_\\\x95\x80"\x8c`\x17V\xb0\x0bA$\
+\x02P\x00!\xcc\xbf\x8a\xdf\x05\xfc\xfc\x1bX\xabZ\xffS\xca\xfcT\x96\x90\xb8\
+\xd4\x03\x8aT3\xb2ZK\x91q\x8d\xb5\x890\xcd\x88\xae{\x07\x13P\x15\xd5\xd5\xa1\
+\xbc`*K\x9d*\xa3\xa3\xa9\xfa\xc5\xa4\xeb\xd8\xdd\x01\xb3\x12\x00C\xd9v\xe8\
+\x024lgkb7o\x1f\xf4h&\xf3!+f0\x8e\x9e~\xf6\xf9\x97?\xb9\xd4\xefn\xbd8^\xbd\
+\xf9\x8d\x10AN\xf7R\xd5e\x90 \xea\x88\xa4\xa3\xde\x02*+1]r^\xf2\xa8G{}\x12\
+\xf5\xce\x91\x01\xa9\xbc\xda\t\x8c0\xee\x0f\x0f\x9e\xf5\xc7\x8f/\xd5\x86]Pe\
+\x96\xce_e\x8b\xd7\xaaL\xafp\xb8\xed\x81\xcc\xe3O\xdc\x1d\r\x0f>k\xc3\xad\
+\xb7\r\xadr\xbf\xdd\xe0\xda\x84\x0f\xcc\xdc\xfc\xf3!#\xe2}a\xef\xf30\xb1\x93\
+\xc5n\x9b\xeb\x1d\x9c/#\x00\xab\xd9k\xca]\x98Q\xb0\xb5+V\xcd\xb9\xb8\x19r\
+\xdeN\xce\x93\x81k\x9b1\xdd\xed3\x86h<7\x98\x9c\xf1\xca\x84\xbfL\xf8\xd6=\
+\xca\xecnZ\x14"-X\xd73\xd0\xe7O\x92\xe4\xa2\x97\xb0\xe8\xf6\'+\x11\x82\x8b\
+\x18\xef\xa2h\xc4\xd4\x11\xc8E9W,\x17\tfk\x0e\x03\xdc\xdb\x13\xbdxK\xfd/\x02\
+B\x01fH\xdb\x1b\x95\xf9z\xfa\xfaw\xeb\xd9\xeb\xc1\xfe\x93\xde\xf0\xba4*\xc2N\
+\xff\xe0\x8b\xde\xf8I:\x7f\x99\xce_]\x96\xe2\x8dQcU|\x9e.N_\xfe\xe7\xb2\xa5\
+\xf8[\x86\x96\xdco7|\xb7\xd57X\x00\x06\x04\\\xdc\xd4\xb3\xd5\x9bg\xd8B\xce.\
+\x9c\xe9\xb2\xdd\xb7\xfds\xcc\xee\x9e\nl\x0bt\xbe\xca\xeeA\xa7\x17`[?\xa2\
+\xea\x87R\xab /\xfc7\xfe\x81U0\xc1oU\xa3\x01\xdbQq(\x81@&\xf0Z\xc5\xa1\xcd\
+\x91Q@\x82L"\xa0v\x8e\xd6\xab\xa5RJ\x88K\x18#$\x04($\x94\xcc\x8a\x8a\xa9\x00\
+\xb4\xa5~\xb6BZ\xf0\xa8G{=\n\xc4y\x9d#\x11B\xaaT<3\xf2d\x96\'\xb3ew8\xdc\x7f\
+\xd6\x1d\xdd\xbf\xa6QCA\xd4\xdb\xff\xbc\xbbw\x94.^\xa7\xf3\x17\xaa\xb8\x12\
+\xc53I\x05\xa9,\xc5wF\xfd\xc9\xe3\xfe\xf8\xa1\x10-\xb7|`\xb4\xbf\x80\xdb\x8d\
+\xcdj(\x15\xb3\xc3\xbc\xa3\xfa\xf3\xbc\'\xd2=\xfb}\x83\xf5\xab\xdcq\xcf\xd76\
+\xb2\xdd\xcb\x80\xacu\x0e\xb5G\x82m\x14ZO\x82\xdc\x9e\x8e\xd8\xbc\x97\xea}\
+\xd3K\xf2\x1a\xe0\xfc&W\x06\xa5\xd9\xb7P\x15\\\xe5\xcd<\xcd\xcd\x8f\xd0~Tz\
+\xfa\xba\xba\'\xa2iKI\xb7?ei\x92$\xab\xc1`\xb4q\xcb;A$\xa8s\x80\xf4\xa56\x9e\
+\x981]\xf3t\xc5q\x80\x07vV\xbc\x8b\x17\xec\xd5\x14/\x15\x00\x14\xe9r\xfa\xea\
+\xbf\xc3\xd3o\xfb\xe3\xc7\xfd\xf1#\xba\x1e\x8dR\x10\xf5&\xcf\xba{\x8f\xb3\
+\xc5\x9bd\xf6\\\x15\x97{F\t\x08A\x00)HJH\xe6<[\xe4o\x16\xcb\xb3\xe7\xc3\xfd\
+\xa7-\xc5\x7fX\xb4\x1f\xfd-\xc7\x0e=\x0e\x1dX\xac\x15T\xe7\x06m\xd5\xc0\xfe3\
+\x00\xacKO\xf0H\x9c<N\'\x8f\xf7\xab\x16\\\xc4\xfd\xb0u\xc2\xcc\x08\xa7\xad1\
+\x9d\r\x93\xc8k\x98\xdd\xb0!\xd8\xb7\\i+\xb66\xd5\xeb\x08\xc8{\xb2\xb0\xab\
+\xc9+\x9a\xa0[\x11\x85(\xcaZ\x9f8\x9f\x9e]\x8a\xdc\x01L\x1e|q\xf2J\xc9t\n\
+\x96\xcb$\x7f7S\x00T\x84\xac\x0c\x06\xc3A\x99\xce/~*M\xf1\x01A\xb1\xf9Wd\xab\
+\xd9\xdb?\xae\xce\x9e\xf7\xf6\x1eu\xfa\x93\xf8z\xa5`H\x84\xdd\xf1\x93\xce\
+\xe8a\xbe:\xc9\xd7\'\xf9\xfa\xa4\xea\xdc.\x00\x1dnUl\x92&\xcb|=}\xf3\xfb\xe5\
+\xd9\xf3\xfe\xde\x83\xee\xe0\xa0\xadD\xf6A\xd0\x92\xfb\xad\x86\x08c\x99\xe7\
+\x9e\xaf\x0e8\xd9^\x8d]\x82\xb3\x87y\xab\xdfI[\xde\xd5W\xd5\xb9\xd43H\xeaG\
+\xf9Z\x99+q\xec\x86{\x9a\x91\xa8\xf5\xad\xd5\xc8\xd4mlL[\x17\\\x8fry\xf7v\
+\xe3"\x95\xd4\xdf\xb1\xc3\xe6S\x00\x808\xa05yF\x18a6\x9b^\xbc\xbc\xbbF\x18\
+\xc6\x0f\x9f\xfdL)\xa5d\xa1\xbe\xfe\xd7\x03\x95\xadR\x95\x97(\x82\x83\xf1\
+\x93_\x16\xeb\x93d\xfa]\x91L/~B"\x04\x84\x00\xbav\x02\x14P\x96\xe9\xe2\xf4\
+\x9b\xc5):\xfd\x83\xe1\xc1\xb3N\x7f\xffR-l\x9e_\x84\x9d\xd1\xc3\xce\xe8\xa1\
+\xcc\xd7\xe9\xfcE\xb6|{\xa9\xa4\x1aA\x10\x01B\x90\xaeaP\xe6\xeb\xf9\xf17\xf3\
+\xe3o\xba\x83\xc3\xd1\xe1u\xdb\xd6\xe2\xb2h\xc9\xfdV#\x08\xa2\x92\xad\x8c\
+\xb6\x04\xd5\x94\xe7\xce_\x004\x93\x92\x13\xeadR\xc2}T\x07n\xf1j6=\xee\xc6\
+\xa10\xac\xed\xd8\xdb/\x0f\xc9\xd5\xf2\x85c\x9c\x97a\xf0\x9bK\xec\xaa\x02\
+\x08\xbe\xa0wc\xb3\x18A`ji\xb9\xad\xeb\xf5\xa5mw\r!\x84\x10\x9d\xe1\xe4\x11\
+\xe4\x9f\x02\x12\'\x0b\xf5\xf0\xd1\x11\x80\xa8\x7f\x18\xf5\x0f\x8bd\x9a\xce\
+\x9e\xe7\xab\xe3\xcb\x9d\x93 \x02C\xf1\xba\xc1\xd9\xfa4[\x9f\xc6\xdd\xf1\xf0\
+&\xd2\xcf\x83\xb8?\xb8\xf7\x93\xde\xe4\xb3t\xf6\xe2\xb2\xa9\xf1T\xabD\x06\
+\xc5\x9c\xaeN\xd2\xd5Iwx8\x9c<iG?\xfd`h\xc9\xfdV#\x8c\xfb\xd9\xfa\x8c\x99\
+\xab\xc8\xaa\x1f?\xd5/\x96\xc7m\x08\xb2\x12\xf2\x9a\xb2\xf4\xd1\xbc\xa9\xea7\
+\xed\x9b\x1aYou\xd8\xb9\xdam\xf3\x9f\xad\xe0^y2\x1b\xa7\xd7\xd8\x12\x01\xd8\
+\x0e\x17>\xae\xb9\xfc\xee\xa5v\tv\xafv\xe7\xc6\r\xfa\xbe:W+\\\x9e&\x01\xae\
+\x9ab@\x08\x03d\xaa\xcaB\xca\xb34K\x93^\x7f\xb0\xa3\xa9\xef\xc1`\xfch=\x7fKE\
+\xfa\xe8\xe8\xe9xRi\xd8\xaaf\xaf.\xcb~\x99\xd4dG\xf1\xfa\x1f3\xf2tv\xfar\x16\
+w\xf7\x06\xfbO\xbb\xc3{\xd7M\x8d\x0f;:5>\x9d\xbf\xcc\x16o.\x95TC\x1bI5\xe9\
+\xf2$]\x9e\xf4\x86\xf7F\x87\x9f\xc7\xbd\xbd\xeb4\xac\xc5E\xd0\xe6\xb9\xdfj\
+\xac\xa6/\xe7o~o\x87\xda\xd8\xf0\xa2K$\xb1\xe6\xb9\x13\xeen\xab\xd9\x81H\xb3\
+{=\x99\x1cB\x08\xe1R\xdc\x85 \n \x02\x04\xa2\xcasw\xa3\x99*e\xed\x98\xd0f\
+\xb8\xfb\xe9\xedJ\x82%\x9b\\s\xf6jCZ\xe2\xf4+\xce\xe8\xc6\xb8\x16\xd9D}/\xbd\
+]\xd4\x93\xdc\xa9\xde\xd3\x80\x95\xf4\x8a\x85\x99\xffu\xda\xbb~\x0fg\xf7\x13\
+\x18`\x05\xdb\x14K\xeb\xa6I\xf5<ww\x7f\x00\x11V)\xaf23\xf4\x16 \x06\xff\xec\
+\x17\xbf\xda?\xb8\xba(V\xb2\xc8\xf3\xbc\xdb\xdb\xd9=\x94\xd9"\x9d\xbf\xbcZAG\
+\x9f\xe2\xf5W"\xec\xdcLR\x8d\x06\xcb"]\xbcJ\xa6\xcfY\x0f\xac\xbb$\xa4W\x89\
+\x8c\x88z\xc3\xfb\xc3\x83g-\xc5\x7f\xafh\xc9\xfdV#O\xe6\'\xdf\xfe\x1b\t\xf3k\
+\xaa\x15\xfe%\x08;\xbc\xc8\x8fBVDo3\x1dm\xcdC\xc3\x9a \x08\xd2\xff\x11\t\xcd\
+\xf3\x02"\x80\x08Lz\xbb\xe3\xf7\xcd\xb8&\x9fG\xeej\xc7\xf0%\xcfv\xb7pc\x97\
+\xe0r\xed}r\xa7\xf3\xc8\x9d\xcd\x90%6l^\r_R\x96\xef\xe1\xc5r5\xa17\xc9\x1d\
+\xa6\xd3c\xa6zK-\xb9\x03Y\x89\xd9Zy\x1f\x01?\xfb\xfc\xab\'\xcf\xbe\xb8\xa1\
+\xdf\xedN\xc8"Ig\xcf/\xebwk\xb8\xd4x\xf7\xd4\x12\xc6\xfd\xfe\xf8q\x7f\xfc\
+\xf8\x9aI5\xb6mi:{\x9e-\xde\xb0\xbat\xdb\xb0A\xf1\x9d\xc1\xc1\xe8\xdaq\x82\
+\x16\xbb\xd0\x92\xfb\xad\x86R\xe5\xbb\xaf\xff\x89U\xc1\xcc\xce{1\xcc.62K\x1a\
+\xe4n(\xd4&\x86T\x1cj\xb5\xb1\xe6u!\x9a\xc3S]y\x19\x12\xd5\x19\x9d\xe25\xcc\
+\xce\xe0\xfa\xc0T\xbf\xaa:;\xf1n\x08\xb3n\x97WU\x07*\xe1\xae\x1bUq}\xd5\xdc\
+\xba/oN\xed\x98\x9dmIw\xa5*\xd2\x07\xf4\x8f\xcaXW\x1e\xd7\x1b\xadn\xe7/Q\xae\
+\x860\x00\xae\xe6iR\n\xd3\x95\x92\xde\xb8\xb1\xfb\x0f\x1f}\xf5\x93_\xdc\xd4/\
+\xf7|\xa82\xd3#\x8c\xae\xa0\x94\x19P\n\xd2\xf3\xa5\x82\xa8\xd7\x1f?\x1eL\x8e\
+n\x84\xe2M\xdbf/\xaf@\xf1ls:]=\xe1\xee\xe0`t\xf8YK\xf17\x8e\x96\xdco;N_\xfcG\
+\xb6:\xb5!RS\x9a\xcb\x94\x10\xa8S9\x9cc\x83\x9a\xe6&\xc7\xa3u\xe6t\xca]\x10A\
+\x84\xa6\xb6\x8c?6\xd5\x19@\x1a\x95l\xd7\xccn\xf5;K\xd6\x15\x00\xd8\x91\xaee\
+K\xcf\x92\xa9\xc1\x85\t\x8c`G\x9d\xd6\xad-cwqmp\xfd\x86~q\xee\x8fRJZg\xc6\
+\xcd\x14r\x11r\xaf\xb4\xbc\x9d\xd3\xc3\x91;\x01\xf3\x84\xd3\xbc\xca"\x9dL&?\
+\xfb\xf3\xbf\xbe\x81_\xea\x85\xa1d\x9e-\xde\\a\x84\x11\xea\x14\x0f\x1d\xe7\
+\x8c\x07\x83\x83g\xbd\xd1u\xcb\xd4\x98\xb6\x95y\xbax\x95]~\x80\xab\x86\xac\
+\x97\x8c\xef\xf6\xf7\x07\xfbOz\xa3KT\xdflq>Zr\xbf\xedXO_N\xdf\xfe\xde\xd0\
+\x1b\xd9\xc22v`)\x9aR\xbd\xb6\x06\x1e\xe9\xeb\x03\x84\xa7\x92\x89\x8c;c\x9c\
+\x19\n\xea\xb2\xdd\xa5\xbd[\xf8\xb1S\xe5\n\xcbhC\xc6\xce\x81dY\x17N\xb6{f\
+\xbb\x03\xf9\xff\xe9\x969\xa9\xee\x9ag\xb7\xf9\xb6Le\xa1x\xd3\x82X\xcf\xbd\
+\xf2j4\x93\xbb\xafv\xcd\x96\x81%w"\x17\x18\xb6g6w\xe6P\x94\xc8K(\xe6\xb4\x00\
+\x01\xddn\xe7/\xff\xfa\x1f\x85\xb8\xc4\xc4\x1d7\x02Ve:\x7fu\x83\x14\xdf\x1f?\
+\xea\xed=\x12\xc1u\xa7\x04\x81\xf1\xe2_\xa7\xb3\x177B\xf1qoot\xf0\xec\xfa\
+\xf5\x15Z\xa0%\xf7\xdb\x0fY\xa4o\xbf\xfe\'-1-\xb3\x1br\x87\xf5\xdf=\x93\x1d\
+\xa8\x93;,\xe9;\x97\xdbIx\xad\xdc\xad=C&\xacJ^\xb1_`\x83\xdc\xf5O;\x1c\xde\
+\xca\xf6\x06\xb9[v\xdd\xce\xec\xa6\xe1\x9e\xe9\x0e\x9f\xd6\xbdG\x0c\xbb\x1bl\
+\x16\x90\xa3`\xff\xf1\xc0*w\xd9\xbc>{\rW6\x84\xea\x8cuK\xee\\\xd9Gur\xd7\x7f\
+\x19B /1[1\x800\x0c\xff\xeao\xff\x9f\x8b\xd6\xfe\xbdi\xb0,\x92\xd9\x8bl\xf1\
+\xea\xb2e\xd9\xb1\xc3\xa8\x19L\x8ez{\x0fE\x10\xdfH\xdb\xb2\xe5\xdbt\xf6B\x16\
+\xeb\xdaz\x00\xbbs\xa1\x1c\xa4\x99\xb8\xdc|\xf4\x9d\xde\xde`\xffYot\xddl\x9f\
+O\x1c-\xb9\xdf\x01\x9c|\xf7\xefyr\x06\x8f\xa6\x9dB\xaf\xf90\x04pSm\xfb\xe6L\
+\xc5\x9c\r\xf1n5\xbc\x11\xef\xd4(\xe3n\x8d\xfbF\x06\xa4R\x80\xb4n\x8csIL\x92\
+LM\xb7\xeb\x83\x19~|\xc0\xf7e\xfc\x8e\x07\x9e\r\xef\xf7\x01\xd5\xf5\xfdN\x04\
+\xe0\x86\xe1\xeeZ`u:A\xf7D\x0c\x866^\xec\x0frV\xbbs\x906\xc9]\x7f\xb8\xf3\
+\xb5*J\x10\xd1_\xfe\x9f\xbf\xeb]x\xbe\xec\xef\x03F)_C\xc5+\xaf\xdb\x13A\xdc\
+\x9f\x1c\xf5\xc7GAx\x13\x14\xafd\xb6|\x93N\x9fk\x8a\xf7\x99\xe5":\\2t\r\x03\
+\xbd\x7f\xd8\x19\x8e\x0e\x9e\xf5\xf6\x8c\x89T\x142/\xca \x10\xdd\xce\x87\xe9\
+\\\xef\x1cZr\xbf\x03X\xcf^O\xdf\xfc\xd6\x86R\x89\x88\x1d\xe3\xe9\xb1\xab\xae\
+N\x0cW\x1d@\xa5\x9a\xdc\xdf\x95\x10\xb0\x13\xd7y\xe2\xbdF\xefdgb\x12\x80\xdf\
+u\x00h\x90{5cjC\xb1\xa3\xa1\xdb\xd1\xf0\xdc\xab\xee\xc8y.[\x94;\xaa\\\x1a\
+\xb7\xab\x8e\x93\x9akX)\xee\xe6\xc5\x96\xce\xf3\xb7\xa9\x8d\xb0\xa3x\x9d6W.\
+\x0fR+w+\xf0m\x8bm@\xa1\xfe7ADI\xce\xcb\x94\t\xf8\xe5_\xfe\xcdh\xef\xc3\x0f\
+\xa6gUf\xcb\xb7\xe9\xec\xb9\xacM\xe7r\xb1c\x9b\x14O"\x88z{\x0f\xfa\x93\'a\
+\xd4\xbb\x89\xb6\xc9|}\x92N\x9f\x17Y\xad\xbe\xc2\x05}\x16\xa9\x07\xdf*\x9d\
+\xd2\x890\xee\x0f\x0f\xbf\xc8y\xb8L\x14+\xc5J\xc6\x11\xdd?\x1c\x85Q;F\xe7=h\
+\xc9\xfd\x0e\x80U\xf9\xf6\xeb\x7fV2\xd3jW\x18\xd5\xab\xf3\xc9,G\xc2\x8a\xf7\
+\xda_Qm\xcal\'\xdeA\xa8\xe6\x9f\xf6\xf2\x0f\x85\xf5\xe4\xbd\x1cDw>\x13\x9b\
+\xf4\x98\x9dk\x16\xb7\xe7\x93l2{\x9d\xdd+\xc3\xc7S\xe6V\xc4W\xb2\x1dMr\xd79\
+\xe9\xca\xbb\x06`\x9f\x1c\xe0R\xdd\xad\x18\xd7m\xb05\x04\x1c\xb9;g\xc6\xb6\
+\xee"\xe4\x9e\x97<O\x18\x8c\x9f\xff\xf9\xff\xf1\x87 }X0\xabl\xf1&[\xbc\xbaT\
+\x99\x1as\xacI\x8d\'\xf68\xbe\xb7\xf7p0y\x12\xc6\xfd\x1bi\\\xb6:N\xa7\xdf\
+\xf9\x14\x7fq\x1f]\xb1)\x19\xaf\x7fY\x14tF\x87O\xa3\xc1}P$\xcb2K\xb3\xc9d\
+\x18\\f\xd6\xf2O\x10-\xb9\xdf\r,\x8e\xbf^\x9e\xfe\t\xb0\xe9\xedl\xea\x99{\
+\xe4\xce\x1e\xcd\xd7\xf9\xdd\x19\xd7>\xbf\x03\x86\xd6=\x8b\xc6\x87\x8b\xc5\
+\xc2y"\x00\xa0P\x89\xf3&\xaa\x04\x99\xc6\xd8\xa5\x1a\xa8z\xf1=\x17g\x17\x99\
+\xb7\xd4\xa0\x7f\xd4\xc8\xdd\x9d\xdd\xb8A\x9a\xe5\x95\xb4Dm)\x1b\xbaJ\xa4\
+\xe7*\xc1EP\xf5\xa7\xe3\x91\xbb\xffdRo21c\xb6VR\xe2\xab\x9f\xfc\xfc\xfe\xc3\
+\x9b\x991\xe3\xc6\xc0\x9c\xaf\x8e\x93\xd9\xf32\x9d]\xfa\xd0M\x8a\'\xd1\x1d=\
+\x18\xee?\r;W\x1c\x8b\xdbl[r\x9aL\x9f\x17\xd6W\xbc\x14t}\x05i\x92U\x95\x88\
+\xfaa\xff~\x7f\xf4\x10JH.\xc7\xfb\xd7\xaa\x95\xf6\xd1\xa3%\xf7\xbb\x01Yf\xef\
+\xbe\xf9gV\xa5\xe5]\xb6:\xd7%>j\x1by\x0b\xbf\xdb\x1d\xcc\x82cO"\x08\x9b\x88h\
+\xf8\xbd\x9e\x99\xe8\xf30\\q-\x97j\xa8\x89\xb6b\xd3\x8b0\xbb\x83G\xeb5\x8f\
+\xa6\x96!c\x1d\x1b\xb3\x8f\xbb\x96\x17\x02\xad\x16\x15\xb3\x92\xd6]\xb7\t0pA\
+T?\x9a\xea~VV\x939\x8a\xbd\xdd\xea\xed\xa5U\xcaI\xce_\xfe\xe8\'\x8f\x8e\x9e]\
+\xee\x97\xf7C\xa1X\x9f&\xb3\xe7\xc5\xfa\xf4\n\xc7\xca\x1a\xc53\x91\xe8\x8e\
+\xee\xf7\xc7\x8f\xe3\xde\xcd\x10\xe8u\xdaf)\x1e\xcc\n`\x11\xf6E0V\xd4?\xfa\
+\xf2\x8b\x1bi\xdb\xc7\x8a\xd6\xb7\xba\x1b\x08\xc2No\xf4`={\xc9\xd5dL\x046Ed\
+\xf4\xf4D\x9a\xfft\xf5+\x18G\xc6f\xcepm\xaa&\xd6\xc1D\x90\x02\x0bek\xc3+\xe8\
+y\x9b\x14H\xcfvd\xd5\xb5\xfb\x8bg;\x80\xb3\xe6\xad;\xa9\xdc\xfc\xef}`3\x8f\
+\xb7\xd1\xd7\xd6jb\xd3b\xb8Wr\xe6\x8e\xe1ne"\xa3\x15\xb9\xa3\xf2\x8d\xdc\xd9\
+\x9b\x97\x03v7\x8b|:\xa7\rn\x07#\np\x95\\\xbf\x1f\x10Q\xff \xea\x1f\x94\xe9,\
+\xd1\x95\xc8.\xa3\xdb\x02B@\xac\x18\x92u\x9cY%\xf37\xc9\xfcMgpox\xf0\xf4\xfa\
+\x14o\xdb6_\x9f~\xadU\xfc\xc5\xa1K\xe8\x04\x02R\t\xa9X\x95\x89*\x13Pg5\xed\
+\xf4\xc7\x0f\xdb\x8c\x9a]h\x95\xfb\x9d\x81\'\xde\x1by2:H\xea\x16k\x192\xf0\
+\xb2]*\x17\xdd\nb?M\xa5\xf2hP\xe5W\xd6\x9e\xa3\t\x96\xb7\x9dlvD_\xadm2\xbb\
+\xedi\xdc{\xdb0\xcf\xd0\xf7\x86\xacz\x1b\xc9\x97\xee5r\xb7j\xdc\rW2aU\xa9\
+\x1c\x83\xfb\xb2\xbd\xf2a\x9c\x9b\xa3?\x8b*[\xa6\xe6\xcc\xb8\x9d\xfd\x9bPL\
+\xf3\xb5\xfa\xec\x8b\xdb\xab\xdc}\x94\xe9<\x9d\xbf\xc8\x96\xef\xc0\xea\xfd{\
+\xd7\xa1\x18\x92\xad\x85E\x00\xa3\xd3\xdf\x1f\x1c<\xed\x0en\xa6\xa0c\xbe|w\
+\x05\x13\x89Y\xea\xd1\x18E)K\xa9\xf4\xb7>\xec\x0c\x87\xfbOz\xa3\xfb7\x92\xb3\
+\xff\x91\xa1%\xf7\xbb\x84\xc5\xf1\xd7\xcb\x93?y\xd1G\xb6\x1cmvh\x90;\xaaM^d\
+\xd5f\xd5l\xe7wTvI\x83\xde\x9d\xae\x86\x15\xec\x8e\x1c\xb1\x95\xd9\xf9\x9c\
+\x99\xf8\xec)+Z\xf7\x9a\xef\xb1\xbbn\x90\xf3U\xfc\x0cK\x06\xac-\x04\xd6\xb3`\
++U\xb1\xf3\x06\xb9\xc3#n\x9dnW\xeb\x03<g\x06\xdb\xc8\x1d\xa0E\xc2G\x9f\xfd\
+\xf8\xf1] w\r\x99\xaf\x92\xe9w\xd9\xea\xdd\xa5f\xde\xd0p\x14\xef>\xbdN\x7f2<\
+\xf8\xac38\xb8\x91\xb6\x15\xeb\xd3d\xfa\xdd\x05U\xbc\x02\xba\xa3G\xbd\xbd\
+\x87"\x10E\xb6Lf\xaf\x93\xe5\\\xb1\x99>7\x8c\xba\x83\xc9\x93\xc1\xe4qK\xf1>Z\
+r\xbfK`U\xbe\xfb\xfa\x9f\xa5\xccl\xda \xaa\x81K\x8e!\x05Q\xfdwj\xd2%\xc9T\n\
+\xf6\xd9\xba\x96u\xe8D{\xc5\xad\xb5\xab[\xcf\xdd\x93\xbf\x95`G\xc5\xef\x9a:w\
+\xd3:\xb3k\x95\xf7\xf4Q\xb5\xc9_\xe5=kTWu\xee\x8aM\xa9\xd7\xec\xacT\xbd:X\
+\xb5\xa7\xa3l\xd4\xb8\xdb\xc5Z\x89M \xc1\xeb\x06P=\xee\x80\x89\x99A\xb4\xce\
+\xf8\xe1\xd3\xbbD\xee\x1a\xb2H\xd3\xf9\x8bl\xf1\xfa\n\x95\xc84\xc5+O\xfdw\
+\x87\x87\xc3\xfdg\xd7\x9c\xf8\xc9\xa1X\x9f&\xf3\x97\xc5\xfad\xbb\x89DP\nE)G\
+\x87?\x1a\xdd\xffR*\xccf\xcb\xac\x90\x83\xb8\xe0\xb3\xdf\xe52\xd3F\x8d>2\x0c\
+\xbb\x83\xfd\'\x83\xf1#q\x139\xfb\x1f\x01Zr\xbfcX\xcf^\xcf^\xff\xb6\xe2b\xdf\
+\x8da\xebj\x10|~o\x88w\xb3\xd2n\x13\x1e\xc9\xba>\x03\\u\x17\xd4\xe0\xe9z\xbc\
+\xb4\x12\xd2z\xdb\x86\xe6\xb5\x87l\xc0\xebd\xaa\xcb\xbb\xc5\xaaU\rr\xafN\xe6\
+\xbb\xed\x0c]o\xd8\xa9vj\x92\xbb\xcf\xda\x00\xeb\x88\x85U\xfd6\x03g\xbb\'\
+\x03"V\x0cBV\xe0\xde\xd1\xdd#w\rUf\xc9\xf4\xbbt\xfe\xf2\xcaF\x8d\xae7\xa1\
+\x7f!\x9d\xfedp\xf0\xec\xa6\x8c\x9a2\x9d\'\xb3\xef\x1aq\x02\xc5($\n\xa9b\x11\
+?z\xf2\xf3%\r\xe7\x8b\xb4(\xa4b\x16D]\x9e\x85\xe5w\x04\xa9\xec\x0c\xddZR\x04\
+ag0y<\x98\x1c\x05a\xe7F\xdavw\xd1\x92\xfb\xdd\xc3\xe9\xf3_\xe7\xeb3\xe8\x02\
+\x01\x8e\xd3\x01\xa0\x96\x19\xe9\xf1\xb3\x0e\x8b\xb2\xaf\xdf\xcd\xfe\x80fw\
+\xbbX92\xfe9\r<\xbb\xc5\xbdx\xdf\x9f\x8d\xaf\xd2E\x82\xaa\xf0x\xbc\xa6\xe1\
+\xdd\x13\x05`\'8\xad\xf5#\xd6KAM\xb9W{xNN\xdd\x991\'\xf4\x1d\xfc\xf7\x18\xee\
+\xae\x01\x85\xc4\xe1\xd1O\x1e=~z\x91\xdb\xba\x9d\x90\xf9*\x9d\xbf\xbcZ=a3\
+\xb7\x1f\xd7)~\xf2\xa4;\xbc\xd7|\xca\xbb\x12\\\x9c@JUH\xc3\xd7\xccj\xaf?\xe9\
+\xed\x7f>+\x82^76U\x84\x18\xa0\x10\xd91\xad\xbf\xf6\xdbVQ|\x10\x0f&\x8f\x07\
+\xfbO>e\x8ao\xc9\xfd\xee\xa1\xcc\x93w\x7f\xfa\x17\xb0\x146\xd6\xe82\xd9\x8d\
+\x87n\xd2e\xe02%I/[\xf8t.\xfc?K\xaa4\xbc\x17\x95\xf5\xd8\xdd\xe3M\x8fgk_\xa2\
+\xf7~\xa1*\xb7\xa3\xd6\xcb\xb8W\xf26{AWk\xb4\xfb\x9d\x89\xf3\x7f4\xb3;\xb3\
+\xbd\xde\x01\xd4\x9a\xe4\xc8\xdd9\xf8\r\xc3\x9d\xc8R?\xd7I\x9eQ*\x1c}\xf9\
+\x97\x93\xfd;?Q\x9c5j\xde\\\xa1\x9e\xf0&\xc5G\xdd\xd1`\xffi\xef\x86f\x05)\
+\xf3\xd5\xec\xddw\xab\xd9\x1bS-B\xa9\xbd\xf1C1z\xaa\x14;\x0f\x91\x01AB1\xe4\
+\xec\x0fT\xcel\xbe\x17\x14 m\xaf\x00P\x10F\xfd\xf1\xa3\xc1\xe4\xf1\xcd\x0c\
+\xcb\xbakh\xc9\xfdNb5}1\x7f\xfb\x87Z\xce;\x00\xcf\x88\x07l\xd4\x14\x86\xab\
+\xd9)\xf7:\xb9[\x17\xa6Z\xe1\x9b7\x1b\x82\xac\xd2\xec\xd8\xd0\xea\xe7|\x95.\
+\xf6%\xabE\x82\xfdHk\xdd\xeb\xf7\xce\xc9l\x98\xda\xf8\xed6\xc0k\xf6!\xa7\xcd\
+\xeb\xcd\xf0&`\xf2<\x19\xd7\x9dT\x06\xbdw6\x06\xa4\xc2\xd3\xaf\xfejo|[F\xa8^\
+\x13J\xe6\xe9\xfcU:\x7f\xc9\x17\xa8D\xe6~\x83\xfa\x97\xb4I\xf1ag0\x98<\xe9\
+\xef=\xa4\x9b\xa8\x9aYd\xab\xe5\xd9\xcb\xe5\xec\x8d*\x0b\x11L\xa4\x18\xe9&T\
+\xcf\xa2\x82\x98)\x90\xa7\xfdx\xc1\\\xfb\x9aZ\x8a7\xb1\x1f!D\x7f\xef\xd1\xf0\
+\xe0\xe9\xa7F\xf1-\xb9\xdfU\x9c\xbe\xf8M\xbe:\xb6\xa69\x9c6\'\xda\xe2\xa8\
+\x10\xd9\xd96\xfc\x00,\xc3\xe3q\x0f\x1e\xaf:\xa9\xd4\xa4q\xcbwt)N?\xff\xbbF\
+\xb5\x17\xd7\x14\xaf/\xa9\x9f\xc9(wB\x95&C\rr\xaf\x95q\xaf\x8e\xddi\xb8\x93O\
+\xeeN\xdd{\xe4\xfe\xf9\x9f\xfd\xed`8:\xf76\xee\x18tA\xc7d\xf6\\\x15\xc9\xce}\
+6\xd6lR\xbc\xfe]\x85q_\xab\xf8\x1bI\\)\xf3dq\xfa\xe2\xf4\xdd\xb2T\xa1\x105\
+\xe1\xa13_\xa3\xa8$\xcc\x86\x1d\x16\xdbdH\xa9 e\x8d\xe2\x07\xfbO\xa2\x1b\x19\
+y{\x17\xd0\x92\xfb]\x85\x92\xf9\xf1\xb7\xff\xa65\x17\xf9\x1c\xadk\xbe\x83@U\
+\x04\xd5\'w\xb3\x97\xfb\xe9\xc9|\xd4W\xfa\xb6wS\xa6o\xf3\xd3\xb7}\x934/n7dw\
+\x7f\xf3\x9aM\xa9\xf2p\xbc\xc3|W\xc8Z4U-0\xb7\x8f\x8d\xb1V\'tV\x8c\xdd\xc1K\
+\x82\xf4\xe2\xb7\xee\xd5\xc6i\xc1\x14|\xf5\x8b\x7f\x88\xa2\x8f\xd0\xc6e%\xb3\
+\xc5\xebt\xfeR\xe6\xab\xe6\xa6\xddG9\x8a\xd7,\xef(>\x08;\xfd\xc9\xd1`\xf2\
+\xf8F\xea\t\xbf\xfc\xfa\xeb\xe5*!\xff\xa9\x93\xc1\xccD\xe8\xf7;\xb3\xd9\xabA\
+G\rbY\x97\x05U\xe3+\x8a\x07HPo\xf4`|\xffG\xc1\xc7\xf8Kl\xa0%\xf7;\x8c|=={\
+\xf1k\xb6u\xde\xe1(\x9b\xec\x03\xac\x9f\xea\xe8\xc8\xbd.\xd8\x8d\x1f\xcf\xd5\
+{\xb3\xde\xbe8\x0b|\x97N\xdf\xfe\x05\xda\xf6\xbd\xaau/[\x0f\xda\xb2\x8e\xaaM\
+\xd6\x9d1w\xc8:A\x91\x98m\x9e\x0cUU|5\\\xde;3\xb1wB\xab\xc8\t6\t\x12\xbe\xe1\
+n\x9b\xe2\xdc\'M\xfdA\x18\x7f\xf5\xf3\x7f\x10\xc1G;\xae\x9bY\xe5\xcb\xb7\xc9\
+\xec\x85\xcc\x16f\xcd\x05\x8e\xf2)^\xd7\x9b\xb4\x14\x1f\x87\x83G{\x07GQ\xdc\
+\xbdN\xab\x92\xf9\xf4\xe5\xcb\xb7\\\x99/\xe6\xbb\xd0\xebtU\xb9\x8az\xe3<\x9b\
+\xc6\xeaM\x14\x06\xbb\x9a\xab\x9f\xbaJK\xf1"\x0c\x07\x93\xc7\xc3\xc9\xd3\x8f\
+\x9b\xe2[r\xbf\xdbX\x9d}\xb7x\xf7?\xb05\xb7*\xcb\xc5\x19\x94\xb4\xe9\x9b;#\
+\xde\xecl\x02\x89n\x93}qA\xcd\xca\x95o\x9a\xd7\x1e\xf8}[\xb6\xb5\xe2\xfc\xbd\
+\xad\x07\xee\xbe\xa5\xe4=?\xd8\x95\x96\xdc\xf5{UK\xbc\xaf\xd2!]yH=0\xd5U\x1b\
+ts\xf2\xd9+\x18\x7f\xab\xf6\x94b;\x8cno\xef\x8b\x9f\xfe\xcd\xf6\xbb\xf9\xb8\
+\x90\xafN\x92\xe9we\xb6`\xbe\xe8\xe8\'\xf7\x04(\xf5\xdc\x8b\xfa<%\xe72\x9c\
+\x1c\x1e\x8d\x0f\x1fw\xbaW\xb6\xbcyv\xfcv:_)[k_\x10\x05\x04Vi\x7f\xef\xc1:)e\
+\xf2no2B\xf2-\xab\xed\xfa\x1d^\xdb\xb4\x8f\x04\x86\x08\x82\xfe\xde\xc3\x8f\
+\xd8\xa8i\xc9\xfd\xcecy\xfa\xed\xf2\xf8\x7f\x9d\xd5\xee\x13\xb71Dj#N\xfdW\
+\x9bNc\xb9\xccO\x93lH{\x07\xdf\x18\xd9\x00\xef\\\xa8o\xf0y\xf6=\xa7pw\xe2\
+\xbb1d\x9e!\\\x87\xc2JOS\x02\xe5\xfb-\xb6\xb9Z\xd5W\xbd\x82\x17w\xad\x0fL\
+\xb5\x16\xbfa~\xe7\x08\x99\xdd\xf6\x0e\x1e\x1f}\xfe\xb3]\xb7\xf5\xf1A\x16i\
+\xbe|\x93\xcc^*y\x89\xb9\x9f\xc8<\x18\x19\xa3\xa6T\x9c\xe6(\x15\xf5\xfa\xa3\
+\xfd\xfbO\xf6\xf6\x1fn\x91\x1b\x17@\x99gi\xb2\xce\xf2<\x0c\x82@\x04E\x91\xa5\
+i^\x14E\x1cQ\xd09\\\xcd^\x8fza(\x96\xc5\xea\xddy\x93\x80\x13X\x9bH\x12R\x01`\
+"\x11\xf5F\xc3\xc9\x93\xde\xde\xcdd\xfb\xdc\x1e\xb4\xe4\xfe1`\xfe\xf6\x0f\
+\xeb\xe9\x0b\xcb\xef\xda\x9f\xa8\x99\xc7^\x02{\xd3\xd0n8-\x9b\xa3R}\x15o\xcf\
+W\x03o]\xbb\x89J\x0e\x9fk\xc1\xeft\xee\xed{\xff\xe9\x81\xcd\x9f\xab!w\xe7\
+\xb7\xf8\xe9\x8f\xc6t!\xdbST\xb3\xeb\x01U\xc5pe\x03\xc9z\xef\xc6u\xb5u\xf3\
+\xe0\xc9\x8f\x0f\x1f\xdc\xc9\x11L\xd7\x81\x8d\xb86\xa7\xd0;\x1f\r;>-8\xcb\
+\x99\x81\xfep|\xf8\xf0\xf3\xd1\xf8\xdeu\x9a\x94\'\xc9rv\x16u\xfb\x80LR\x99\
+\xad\xe7\xdd^?-\xe3 {>\x1a\xc6\xf9\xfa-+nt!\xfeWHg\x13T\x13?1@\x14u\x06\xc3\
+\xfd\x1b\xcb\xf6\xb9\rh\xc9\xfd\xa3\x00\xf3\xd9\xab\xff\xca\x96\xef`\xf2\xd6\
+\xeb\x82}\xab~\xd7\xfa\xd7\xbd\xdf8\xa37\x9c\xc9\xad\xd3?.\xf9\x859W\xa7\xd7\
+.\xce;\xd6\xeb\xc5MG\xc8\xfcUn\x92\xbbs\xc9\xab~\x87\x01\xe3\xd9\x92\xf6\xdf\
+u\xba\x0c\x9c\'cRell\xa2q\x9f\x9a\xdc\x9f}\xf5\xab\xe1\xde\xcdTV\xb9s\xd0S\
+\xe8%\xd3\xef\xe4\xee\xa4\x1a\x1f>\xb32\xa0\x14\xb2\x92\x93\x1c\xa5d\x02\xfa\
+\xa3\xc9\xfe\xbd\'\xa3\xc9\xd5\xc52+5}\xf7\x06"\x8c;]\x86JRY$g"\x18J\x95\r\
+\xf0\x86\xb9\x90EV%\x03lm!\x01\x0c\xc5(%$\x9b\xbf\x88(\xee\x0f\x0f\x9e~\x1c\
+\x14\xdf\x92\xfbG\x02V\xe5\xe9\x8b\xdf\x14\xc9\xd4\x1b\xa4\n\xff\xbb]\xcb\
+\x1b7+\xedLG\x96\x05k\x89\x91\xce\x94\xb7\x8b5\xb2<\xaf)[w\xaa\xba\x88m\xde\
+\rm!\xf9\xday\xa8\xb1\xdeJlg\x9eT\xc9@\xcc\xba$0\xea\xf4N\xb5,\x1a\xaf\x0f\
+\x80\x9d[\xd5/?\xe9\xdf\x02\x03\xac\x98D\xf0\xa3\x9f\xff\xfd5c\x83w\x1d,\x8b\
+t\xfe2\x9d\xbf\x92\xe5y\xf5\x8fw\xd9.\xa5\xc2:\xe3\xb4\xd0\xb1l\xf4\x07\xa3\
+\xc9\xfd\xa7{\xfbW,\xdb\xcb\xcc\x8b\x93\x13\x11\x8a4\x93\xa3\xbd\xbd\xa2(\
+\x16\x8bD\xa5gao?,_\x085W\xd2M\x9a\xfb\x9e\xa6*3C\xb71\xfd\xa2\xb8?\x98<\xee\
+\x8fof\xf6\xf0\x0f\x85\x96\xdc?\x1e(\x99\x9f>\xffu\x99/\x9dN\xaf\xf3\xbb^\rl\
+\xf0\xbb\x07\xdb\rh\xf8I5\xf6\x8f\xe4:_\x98]"\xbd\xb9zS\xa4\x9b\x82\x01\xec\
+\xe5\xed\xd85\xa6N\x9ao\xac\xb3\t\xe8y)\xefl\xbe\xead\xcfQ\xe5\xc08\x0f\xa7^\
+[\xd8\xb6\xc1\x9e<\xee\x0e\xbf\xfc\xd9\xdf^\xcd/\xfe\xc8`U\xfc\xf3\xadF\xcd{\
+?\xa0\\"\xc9\xb9\x94\x08\x03(\x850\x1e\x8c\xef\x1d\x8d\x0f\x1e\x8b\xcb\x8beV\
+j\xbd\x9cC\x81\x85(\xf2r0\x1c,\xd7\xc5z>\x13r\xd5\x1fu\xd5\xf2\x7f\xbc,\xa9\
+\xf3\xe0(\xde\xce\n\x02\x10\x820\x1eL\x8e\x86\xfbGw\x94\xe2[r\xff\xa8\xe0\
+\xf1{\x15_\xad?\x9b\xfa\xec\xc4\xd4\xfcKtB\xd9\x0e\xfc\xa7\xfa\xb6\xe6\x97\
+\xc5-\xef\xf4wj\xfb\xed\xfe\xaem\xa5\xf5\x1d\xdfM;\xb3G\xc5\xf6\xaeT\x80U\
+\xee\xd67g0\xd8U\x0cf\'\xe1\xe1\x0e\xf2J\xca\x90\x8d\xa06{\x1d&u\x00\x00 \
+\x00IDAT,~\xbd\xe7\xf8\xf0\xe8\xe8\xb3\x9f\xee\xbc\x81O\x0f\xacd\xbez\x97L\
+\x9f\x97\xf9\xd2\xad\xbcP\xd7G`F)\xcd\'\x9f\x97\\\x94\x88:\xbd\xc9\xbd\xa7\
+\xa3\xc9\x83\xe0\xf25\x1dW\xb3\xb3"/\x06\xa3\xf1z\x9d\x80\xd1\xe9v\xcef\xa9J\
+\xcf\x06=@\x9e\x14\xe9\x8c\xe8B\xd9\xab\xfa\xdb\xee\xc2\xad\xfak\xa0)~0~|\
+\xe7\xf2&[r\xff\xd8\xa0d~\xfa\xe2?\xcat\xe1\xe2\xab\xe41/9\xf9N6A\xa4&E}\xad\
+\xbc!Rk\xecN\xe7Qu\xe3\\\x17\xe6t\xb7\xe4X{\xdbv\x82O\xeez\x07\x9b\xe7\x0ec\
+\xcb\xb8\xb6Z]o\xbf\xea\xcc^\x97\xe0\xc9vT\x87\xa3:?L\xff\xc0\x8c\xa3\xcf\
+\x7f>>xt\xfe-\x7f\x8a`\xceV\xef\xd2\xd9\xcb"\x9d\xe2\x82\xe4\xee\x0e\x85\x91\
+\xc9\x8a\x91\x15\\HDQ\xbcw\xf0dr\xef\xe8\xb2\x14\x9f.\x17\xc9j\x8e\xa0;\x18\
+\x0e\x17\xcb\xa4\x13\x87e\xa9\xd6I\xd1\xc34\xa0e\xb6>&=\xe7\xfb\x05\xb0\x95\
+\xe2Ep\xf7R\xe3[r\xff\x08a\xf8=[T\xa6y-K\xd2F\\\xe16\xd7\xe0L\x19c\x84zTX\
+\x11\xe1FV\xe56\'}\'v\xf1\xbe!\xd3MZ\xb7>\xbbY\xd2{\x109\xff\xc4\xe5\xb9\xb3\
+V\xe8\xca\x8atX\xeb\xdd\xaba`\x95{M\xb6\xeb\xc3aW\xda\x0b\xd9\x15\x14|\xf5\
+\xc9\x1b\xee\xe7#_\x9f\xa4v"\xecK\x81a\x86>IF\x96s\xa9\x10\x86\xf1h\xff\xd1\
+\xe4\xdeQ\x14\xf7.~\x9e\xb2(Vg\xc7%D\x7f0\x12A0\x9d.{\xb1HR\x0e\x03\xd9\xe1\
+\xe3,9VeN\xe2\xda\x14?~<\xdc\xbf\x1b\x14\xdf\x92\xfb\xc7\t%\xf3\xb3\x17\xbf)\
+\xd29\xdcL\xaa\xb0\xccN\x86\x1d\x9b\x04]\tb\xb3Tsp\xb0\xd3%\xb98\xce\xe3t\
+\xfb\xc2\x9b\xeba\x08w\xe3a\x81<\x16f(\x93\x15\xc4\xd0\xca\xddcv\xc090\xf0\
+\x8c\x17\x9f\xe8\xcd#\r\xbbKU\xcc\xce\x8cn\x7f\xef\xcbOc\xf8\xd25Q$\xd3d\xf6\
+\xbcX\x1d_\xf6\xc0\x8a\xe2\x15\xd2\x82\xa5\x84\x08\x82\xbd\x83\xa3\xc9\xbd\
+\xa3\xb8s\xd1\xd1O\xac\xd4\xe2\xec\x84\x82 M\xcb\xf1x\x9c\xe6e\xba^G\x81P\
+\x14t\xc3\x9c\x90\xad\xa7\xdfA&\xb8\xb8\x8a\x07\xf4\xe0\tY+S\x13\x0c\x0f\x9e\
+\x0e\xf7\x9f\xdcr/\xbe%\xf7\x8f\x16\xac\xca\xb3W\xff\x95\xafN+~\xf7\xc8\xdd\
+\xdf\x936d\xb8^\xbba\xd8\\\xe5\xabr\xbe\xa2w\xb4\xce[\xd7\xa3\xc9\xf8\x1b\'\
+\xd0cV\tZ\xbc\x1br\x07+V\x9eZ\x07{\x84\xeeX\xdb\x8er\xb2O\x05.\x0f\x92\xf5\
+\xc4\xdd>\xb9\x8f?\xb1\xe1K\xd7\xc4\x95gpe\x98\x1a\x06v\xe8\x13\x04\xd1h\xff\
+\xe1\xc1\xfd\xcf:\xbd\x0b\x8d#\x95e\x99.\xe7\xa0\xa0\x94\xac\x94\x1a\x8eF\
+\xd3\xd9ZfI\xb7\xdb\t;A@\x94\xad\xdf\x15\xcb\xe7\xc4\xc5%(\xde>\xb9V5\x0c\
+\xeeB\xb8\xb5%\xf7\x8f\x19\xac\xca\xd3\xe7\xbf\xb6\xfa]\xd7M1_T\xe3(\xfb\xdf\
+\xed\xe6\xe4\xab6\xa1\xd2Y\x13\xb5}\xcf\xbd\xee{\x96\x9b\x92|\xfb\xd6\xf7\
+\xd0\xban\xbf\xc9\x81\x81\x91\xe1\xd6\xab\xd1\x15c\xea\xe7w\xb91\x9b\x12\x1e\
+5r\x87\xc9\xab\xb1\x871\xf0\xe8\xd9O\xf7\xef\x1d\x9d{\xd3-\x9a(\xb3e:\x7f\
+\x99-\xdf\\m\x06\xd7RAJN\x0b\x94\x92\x85\x10\xe3\x83\x87\xe3\xc3\'\xdd\xfe\
+\xde\xfb\x0ff^\x9c\x9d\x96R\x0e\xf7\xc6\xcbU\x12\x10\x11\x89\xe9"\x1dD\xe8\
+\x0f{E\xa9\x888\x9d\xbf\xa0\xf2\x94U\x0e\xef\xc9v\x17\x1a"\xa7I\xf1\xe3G\xfd\
+\xc9Q\x18\xdd:\xcb\xae%\xf7\x8f\x1c\xac\xca\xe9\xeb\xdff\xabc\xf2R!\x1d\xbd\
+\xb9Y<\x1a\x16<\xd5\x85;or\xb0\'\xf6\xb7\x06E\xb77\xc6{\xc7\xb5\x83w\xec\xd0\
+X\xcf\x1b\xbb\x01\x8e\x85\xd9\xd6\xf0\xf5\x88\x9b\x1b\xaez\x95\xfb\xe8_\xc2H\
+w\x17v\xae\xe6(d#\xe3\x83\xaf~\xd1\x1a\xeeW\x84,\x92t\xf6\xfc\xcas?\x95\n\
+\xa5\xd4*\x9eCA\xe3\x83\x07\xfb\x0f\xbe\xb8H5\x98\xf5|\x9a\xacW\xdd\xfe^\xdc\
+\xe9Lg\x8bn\x1c\xa6IY\xcar2\xea*\x11\x02Tf\xebb\xfd\x1a\xe5\x14\\\xe8\x18\
+\xce\xaeSmn`\xa0\xf4\xbdx\x11\x0c&G\x83\xfd\'\xb7\x8a\xe2[r\xff$0\x7f\xfb\
+\x87\xf5\xece-\xbb\x91k_\xe6\xc6\xd7\xd7\x1f\t\xc5\xa8\xe5\xb6_6\xcd{\x8b\
+\xc1\xb2-\xd1\xe6\xfd>\xccN\x8do\xfb+\xd693\xec\xbe\xd5\xbeN\xaf\xd8\xdc\x0e\
+YB\xc3j\xf2*\xc9\xd8}M\xa6\xcdp|\xff\xd9\x8f\xfe\xfc\x12\xf7\xdcb\x03\xaa\
+\xcc\xd3\xf9\xcbt\xfe\xf2\ns?1PH\x14%\xa7\x05\xa4\xe48\n&\x87\x0f\xf7\x0e\
+\x9f\xbd\x97\xe2\xf3$I\x97\xb3L\xd2x2)\xa5Z\xceWQ\x804W{\xc3N\xdc\xed.\x96ID\
+H\xb2T\xc8\x19\x8acp\xb6U\xc5\x9f\xf3\x85oR|\x10\x0c\xc6G\x83\xc9Qx\x998\xf0\
+\xf7\x87\x96\xdc?\x15\xacg/\x17\xef\xfe\x87Y\x91\xb5f\x1c7:\x1b\xde\xd3\xefU\
+\x9e;\x9b\xca\xba\xde\xb9\xf82\x1c\xbfC\xa4\xfb\'\xf3^6h\x9d\x9b\x8b[\x14\
+\xbd\xbe\r\xc0N\xa2\xea\x1e5\xc8\xaf\xf8\xe8\xf8\xbd\xb1\x08T\x0f5.\x0f\xd2\
+\x7f\x1ax\xf6\xd5_\\\xb3\x16J\x0b\rU\xe6\xe9\xecy2\x7fq\x05\xa3\x86\x81\xa2D\
+^rVBJ\xee\xc4\xc1\xf8\xe0\xc1h\xffI\xdc;\xcf\xa8Q\xb2\\\x9e\x9d\xb2\x08d\xc9\
+\xc3\xbd\xd1*)\x8a4!F\x18\xd1ho\x94d\xb2\xccs(N\xb2\xb4\x1f\xaeT\xfe\x8e\xcb\
+5\xa3\x1aKu\x91\xafye\xd4\xe8C\x88\xfa{\x0f\x87\x07\xef\xef{\xbeo\xb4\xe4\
+\xfe\t!Of\xb3\xd7\xbf\x95e\xeaR\na\x93\xde\xadT\xb5T\xbfi\xb6oe\xe7\xf7\'\
+\xbb\xef\x04o\xbc\xdb\xe5\xc3\xd4\xd6o]c:\x1fr\x93v4]\xf5\xba\x0f\xd3\xb4e\
+\xea\xe4^?9\x87q\xef\xc7\xbf\xf8\xfb\x8f\xac^\xe0\x87\x85,\x92t\xfe\xf2j3\
+\xb82\x90\x15\xc8J.J(\xe6N(\xc6\x07\xf7G\x87\xcf\xe2\xeeN\x8aWe\xb1\x9aO\xc3\
+\xb0\x93\xe6e\x10\x88(\xea\xcc\x16I\x84"\x8c\xe3(\x14A\xdc[\xae\xd6\xa2\xcc3\
+\x15\x0e\xfa\x08E\x91\xcd\xfeT\xe6\xab\xads\x94\x9d\xdf0\xa9P\xaaj@\xdc\x07\
+\xa7\xf8\x96\xdc?-\xa82\x9f\xbd\xfd}\xb6:\x01`=\x12\xb2\xf3u\xb0U\xeb\x8e\
+\xdd\xb9\x12\xb6\xd7F\xf3{\xc6\xdb7\x9dc\xaf\xbb,\x97\xdai\xaa\x1a\x03f\x04\
+\x93\xef\xc6`\x83\xca\xb9\xee\xc2;\x10\x91\xdfs\x98C\x98\xef\x1f\xfd\xe8\xfe\
+\xa3\xcf/v\x8b-.\x01m\xd4d\x8b\xd7\xea\xdc25[\xc1\x8c\xb4\xe0\xacDQ23:\x11\
+\xedM\x0e\x86\x07O\xbb\x83\xeds\x97+%\xb3\xc5\xb4\x90\xe8\xf6\x07\xb3\xe9|0\
+\x1c$\xa9LV\xabq?\x16q(\x82\xb0\x90\xc8\xd6+R\xccQ|\xef\xfe$_\xbdK\xa7\xdf\
+\x94\xd9%\xaa`\x9a\x86A\xa7\xfa\xc0\x8e\xbb\xa0\xde\xf0\xde\xf0\xe0\xd9\xf9\
+\x8f\x17\xdf\x13Zr\xff\x14\xb1:{\xbe<\xf9\xda\xcd\xc3P\x99\xf0\x9a\xd5M]Ir9\
+\xdf:1\xd0\xff\xa2\xec\xa2\xfbsT~\xb5y\xfb\xd2nZ\xf7\xb2\x18\xfdE\xb3\xe4u@&\
+<\xe0\'>Z\xbev\x14\x8fMy^\xdd\x91\x9f8\x0f\x06\x0b\x11}\xf5\x8b\xbf\xfb(\xe7\
+\xd5\xbb%`Y\xa4\x8b\xd7\xe9\xfc\x85*.I\xf1\x04f$9g\x05J\t\x00\x9d\x08\xa3\
+\xf1\xfep\xffIwp\xafY\xba\x1a\x00\xb0<=^\xa7\xd9hoRHUdy\x18\x04\xcb\xa4\x1c\
+\xc4\xe8\xf6\xbbEQ\n\x11\xac\xd3\x82d\x810\x9e\xec\x0f\xc3(\xca\x16o\xd2\xd9\
+we\xb6\xdc<\xd5{n\xeavP|K\xee\x9f(\x8at>{\xf3\xbb2[\xd5\xadv7v\xa9\nK6J\xfe\
+\xeeD\xe3\xaf\xe9|\x87}s\xcdV!\xefQs\xfd\x10vcl\xb5\xcb\xee\xa2\xc3&e\xc6\
+\xa7r\xd4\x83\xa8.\xbe\xda\xb8^5\x94\xab\x92\xed\x87\x0f?\x7f\xf8\xe4G\xdb\
+\xef\xa4\xc5\xcd\x81U\x99\xaf\x8e\x93\xe9w\x9b3\xb8\xee<\xc4~3\x15#\xcd9- \
+\x15\x08\xdc\ti0\x1a\x0f\x0f\x9e\xf5\x86[(>[\xce\xd7\xeb\xb5\x08\xbb\xddnw\
+\xb1J\x88\x15+\x94\xb2\xdc\x9f\x0c\x0b\xc9,\xa5R\xbcN\xb2N(\xa2^w4\x1e\x01\
+\xc8\x96o\xd2\xf9\xab2\x99^\xfa\xa6\x1a\x14\x0ftG\xf7\x06\x93\xa3\xee\xe0\
+\x07\xaa\x1a\xdd\x92\xfb\xa7\x0bV\xe5\xe2\xe4O\xab\xd3\xef\xfc\xe2\x04\xa8\
+\xf2\xdd\x99\x01\xe1\x12\x04\xebj\xf72\xf1\xd4\xf7\xad?\x97\xd6\xb1\xe1\xb3\
+\x93\xf5^\xf4\x92%w\xf3\xe7\xceF\xbdo\t\xa2\xd6\\\x9a\xad-\xd3c\xa0L\x1f\xc0\
+"\x88~\xfc\xcb\xbf\x0f/_\xc7\xaa\xc5\xd5\xa0gpM\xe7/\xcbt\xfe\x9e=\xbd\xf7\
+\x8e\xe2\x93\x8c\xd3\xc2d\x81\xc5\x11\xfa\x83\xd1`r\xb4Y\x99]\x95\xc5j6M\x0b\
+5\x1c\x0e\x19b\xb1L\x02.AA\xb7\x17\x86a\x9c\xa4\x99`\x95\xe4*$\xd5\x1b\x0e\
+\x06#\xe3\x98\x17\xeb\xd3d\xf6\xbcX\x9f^\xe1\xbe\xa4G\xf1\x00\xba\xfd\xc9\
+\xf0\xf0\xb3\x1f\x80\xe2[r\xff\xd4\x91\xad\xcf\xe6o\xffX\xe6\xabZ\xaa\xbb\
+\x15\xb3v\xfeTb\xbf\x1c\xcdU\xb1\x95\xd0\x9bK\xf5\xaa\xeb\xb5\xa8\xaei\x95))\
+c\xb7\xda22\xd6\x9f\xf1mw\xd4=\x19\xae\x9f\xb6\xd1\x003;\xb6\xe9\x0c\xf8^+\
+\xdb?\x08\x98\xf3\xd5q2{^\xa6\xb3\xed\xdb\xb7\xadt\x14\xbfJ9+\xc0\x80 tB\xf4\
+\xfa\x83\xe1\xfe\xd3\xee\xde\x03\xe1\xcd\xbd\'\x8b,\x99\xcf9\x88\xf3\xa2\x1c\
+\x0c\xfai&\x93\xf5\xba\x13\x90\x08\x83^\xaf\x9bK\x94\xe9ZJ\x95\x15j\x7f\x7f\
+\xd8\xe9\xf7\x82\xc0t\x0f\xc5\xfa4\x99\xbf\xbcBq\x05lP|\x7f\xef\xc1\xf0\xe0Y\
+\xdc\x1d]\xe1T\x17DK\xee-\xb4\x84\xffv=}\xce\xde`q\x976SS\xd1\r\\0S\xec"[6\
+\x82\x99\xde\x16\x9f\xe0\xe1\xc6\xa3\xda\x1f\xb5C\xd8\x06\x82\x1b\x9a\xdd\
+\xaf!\xc3\xb5\x93\xbb\x8b\x91\xe7\xc9\xb0\x08\xa2\x9f\xfc\xf2\x1f\x820\xba\
+\xc0\x1d\xb6\xf8^\xb0K,\x9fCX\x9a\xe2\xa5\xc2"am\xc4\x0bB\x1c\xa1\xd7\xed\
+\xf5\xf7\x9f\xf4\xc7\x8f\x1d\xc5\xcb<]/\x17qw\x98fy\x99\x17\xdd^w\xbe*\x84L\
+\xfb\xfd\x1e\x05$\x82x\x9d\xa4!\xcbu\xa6F{\xbd\xc1p \x82*]\xaaHg\xeb\x93\xff\
+\xdd\xd5\xf7\x9c\x0f]/^Z/\xbe;<\x1c\x1d|\xf6=y\xf1-\xb9\xb70(\xd2\xc5\xfc\
+\xf8\xeblu\n\x98\x19\xe7h\x8b\xc6\xbdb\xe6\xcc\xf6/Y\xbd\xd7h\xb8%\xd5k\xb5\
+\x9b\xa1u3\xb5\x9eo\x16m)\xe5\x08g\xbe\xfb\x16\xbc=7\xd5/A\xce\x96b\x86b>\
+\xfa\xec\xcf\x0e\xee?\xb9\xd2\xbd\xb6\xb8I\x14\xe9,\x9d>\xcfW\xef\xdc\x9a\
+\xf7\x12\x96\xfez\xe4%\xd6\x19k2\x8d\x02t"t\xbb\xbd\xde\xde\xc3\xfe\xf8q\x10\
+u\x01\xa82_M\xcf\x14\x85\x9dno\xb9L\x82\x80\x00\xb1J\xb2q?B\x10\x84a\x94\x17\
+*KV\xa4\x98\xc3\xf0\xfe\x83\x03\x12^:,s\xbe>I\xe7/\xafo\xd4h/\xfe\xfb\xa0\
+\xf8\x96\xdc[\xd4\xb0\x9e\xbfY\x1c\x7f#\x8b\x84\xdcH\'G\xab\x0e\xd71h6\x1e\
+\x03\xb6\x05Tk;m\xb1\xd7M#\xaa\xd96\xcc\x9eu\xa7\xde/\x10f\xadvWN\xd8\xcf\
+\xe37i\xee\x0cS\x15\xb27\x98|\xf9g\x7f\xd5N\xbat{P\xa6\xf3t\xfe2[\xbe\xe5\
+\x8bU"#2\x95\xe2\xf3\x92\xf3\x02\x85\x02\x01a\x808D\x1c\xc7\xc3\xc3/z{\x0f\
+\xb5\x8aO\xce\xde\xad\xb2r\xb87f\x88\xe5b\x1d\n\xce\x0b\x0eH\xf5z]\t\x16$\
+\xd6IN\xb2\x90L\xf7\x1f\x1d\x06as\xd2\x8fKy\xf1\xb5\xb8\xd1F\xb8\xb538\x18\
+\xee?\xe9\x0e\xb7gs^\x01\xff?{o\x1ef\xd9q\xdd\x87\x9d\xaa\xbb\xbf\xfb\xb6~\
+\xfdz\xefY1 0\x04@\x82 )\x1a\xdc\xc5\x9d\xb6d9\x92A\xc6r\xe4\xc4r\x12\xcbq$9\
+\xf9$\'\x7f\xc4\x96\x15\xd9\xf9\x92O\x12\x15k\xb1\x95O\x8a%[\xfa\x12}\x11-Z2\
+-j\xa1(\x12\x04@\x10\xfb>\x0bf03=\xbdoo_\xee\xad\xe5\xe4\x8fz\xb7^\xdd\xfb^\
+\xf7\xf4\x0c\x00\x02\r\xf6\xf9\x807\xb7\xefR\xb7\xaan\xd5\xafN\xfd\xce\xa9SG\
+\xe0~$Y\x91\x92wj+\xed\xdau\x14|\xa8\xf0\xee\xb1\xa8c\xccb\xed\x91\x065\xda\
+\xc2\xc6\x9a4q\xcc\x0f$*\xb6\x01\xf8YW\xc8\xe1/@Jm\x87\x11dO\xe5rH\xe3\xa8s\
+\x03*\x9f\x10z\xdb\xd9\xf7x\xfeA\xc3\xcc\x1e\xc9wLD\xdc\xed5\xaeG\xad\x8d\
+\x83@\xbc\xd2\xdf\x19\x07\x00\x88\x05r1\xf0\x98tlpm\xe2\xb8^X^\xc8\x95\xe7)\
+\xb5\xe3v\xa3\x1f1&0\x0c\xf31\x97\xbdN\xc7\x02dH\n\xa1\x87\xc4B)\xb8\xc0\xa8\
+\xd7\x0b|\xcf\xf1\xdd\xb0\x90\x1f}\x17\xeb\xd5\xfb\x8d\x15sz\x91\x91\xbdHM\r\
+\xf1\x98D\x9a\xf6\xc2\x89\xfc\xc4\xe2k\x02\xf1G\xe0~$\xe3E\xb0~k\xf7z\xa7\
+\xbe:f\xc1\x8f\x12\x92\xf9wO\xc11G\xe6\x89\xac2\x9f\x86u\x93Z7\x90}$\xdc\xa3\
+y2C\xb8\x0f\xce\x0f\x95\xfe$\xb6o:\x0e\xa6r\xa3\\8yvb\xf2h\xc7\xa57\xaf\xf0\
+\xa8\xd5\xab/\xc5\x9d\xed\x83`\x17!\x10sP{\xear\x81\x12\x81s \x04\x1c\x1b\
+\x1c\x8bX\x8e\xe7\xe4g\xcb\x93\x8b\x923\xd6\xef\xf7\x99\xb4l\xdbu\xfdV\xbb\
+\x87,\xb2m\xcbvm\xc7\xf5\xe38"Btct\x08\xf7\xc2P\xb9H\x8e\xc9X\xbf\xd9\xab_\
+\x8f;\xdb\xfb6\xf9\x91\x1c&\x10/\x10d2fy\xb9r8\xb10\xd6\x9b\xf3\xe0r\x04\xee\
+G\xb2\x9f\xc4\xfdVc\xe3R\xd4\xad\xebF\xf6Z\xf8\xcc\x8c\xd1\xd8!\xd5\r\x06kMS\
+\xe7\xf7@p0\xa0<sr\xa8\xbcgg\nc6MV\xf7Wg\x8e\xcf.\xdevK\xc5:\x92\xef\xa8\x88\
+\xb8\xd3k\xacD\xed\r\xbcQ\x98\x1aE\xd1D\x0c\x15\xd1\xa804\xe2`Spl\xb0)\xe1h\
+\xe7\'\x16raY0f\xb9a\xb7\xd7s\x1d\x07\xc1j\xb5{>\xe1\xc4q\xbc\xc0\xe7\x02d\
+\x1c1.\x85\x90\xc5R.,\xee\xe9\xe5"\xe2N\xaf\xb1|\xc0\xe9\xc50\x93\xea\xd9\
+\x04\xe2\x95\x16\xef\x04\x85\xc2\xc4\xb1\xa00uk\x10\x7f\x04\xeeGrc\xe9\xb5\
+\xb7\xbb\xf5\xf5\xa8\xd7\x94<\x1a\x9c\x1a\xc7\xc1\x8f\x8d\x8c\x9a\x1c%Z\xf2x\
+`\x1f>\xad\xd5tS\xf9\xd9\x0f\xd6\x93\xf3\xc3\x93\x19\xe6}\x98\xe8\x98\x1e\
+\x82\x03\xd5\x89\x00@u\xf6\xc4\xcc\xfc\xa9\xd1{\x8e\xe4M+"\xee\xf6[k\xacW;\
+\xc8:\xd2\x98\x83\x90\x00\xc927\x81\xc0\x05\xd8\x14,\x8b \xa2$\x8e\xe7\x15\
+\x1c\'\x17\x96\xa6\x89\xedD\xfd\xd8\xa24\x8a\xb9`\xb1\xebX\xd4\xb6l\xc7\x8b\
+\xe3\x18\x19\x8b8\x96J9?\xcci\x17\xc9\xf1\x19k\xae\xb2^\x8d\x1fxY\x16$Z<"\
+\x08\t2QJ\x9c\xa0\x10\x96\xe6\xdc\xa0t\xb3aj\x8e\xc0\xfdH\x0e*R\xb0N}\xbdS_c\
+q\x07\xc6\xab\xf0\xc6\x1a~\x1c\x9e\x19\x17\xacw\xf8tf}\xd4>\x98\x0e#\xda:\
+\x18 \xaeOj\x9d\x1d\x0c\xf4\x072\x86^J<\xe3\t\x10\xb2p\xe2\xcerefL\x99\x8e\
+\xe4\xcd/\x89\xefJ<\xce\xb0i6T&!fH\xc8\xd0\x8c\x89\x001\x03\x8b\x02\xa5 $\nI\
+<7?1u\xc2\xcd\x15\xda\xed\xaem\xdb\x04H\xa7\x17\x05\x94S/p=\xbf\xd7\xeb\x83`\
+\x11\'a\xce\xf6|\xcf\x0b\xf6\x8d\xee\x8b\x18wwz\xb5%\x16\xdd`Y\xd6h\x861\xf1\
+\x9bTY\xa5\x84\xfa\x85\xeaM\xb9\xc6\x1f\x81\xfb\x91\xdc\x9c \xca^k\xbb][\x89\
+\xba\xe6\x82\xec\xfd\xe3C\xa6\x06\x82\xd1\xad?0{y\xcc\xf1\x01a}p&\x1b9a\xc8\
+\xcc\xe8\xe8\xc5\x9a\xa9w\\\x7f\xf1\xe4\xd9\xb0P\xde;\xffGr8\x84\xf5j\xbd\
+\xc6\n\xeb\xee\xec\xb5\x03\x01\x02H\x84\x88\r\xa6\x92\xba\r\x10\x80\x98\x03\
+\xa5\xca\x06+\x03\xbf\x90+\xce\xfa\xb9\x02\xa1N?\x8a\x1d\x9bF\xb1\x04\x11{\
+\xae\x05\x96C,\x87\xf5\xbaB \xb1\xad\xcadi\xd4\x85fT\xe2\xce\xf6^c\xcf^\xa2!\
+>\x1b\xa6\xa60u@\x88?\x02\xf7#\xb9E\x89{\xcdv}\xbd\xd7\xda\x12|\xff\x1dv\xc6\
+4\xb0\xec\xa9\xacI\xf5\x96\xb4u\xe3\xee\xa1J\xaeC)`r6\xf1\xf1T{\xe9\x15\xca\
+\xd5\xf9c\xb7\x1f\xed\xb2\xf4V\x12\xdeo\xf6\x1a\xd7\x95\xc5u,U(%0\x01\\\xa2\
+\xa9\x92\x90\xc4\xfaJ\x00"&\x02?\x1f\x16g\xd0\xf2\x1c\xdb\xa2N>\x8e\xfa\x16\
+\xcaX\x82o#\xb5]b\xd9\xfd~\x0c,b`U\xabE\xd7?P\xfba\xbdZ\xaf\xbe\x1cwwn\xaa8c\
+\xfc&\t\xf1\xc3Ji\xfa6\xdb\xdd\xcf\xa7\xeb\x08\xdc\x8f\xe4U\x89\xe0q\xaf\xb5\
+\xd3inD\x9d\xfa8\xfae\x0f\x19cD\xcd\xd27\x98\xb9m\x04\xd6\xc1\xd0\xbe\x8d3\t\
+\xc7n\xec\x138D\xf6\x01\xb6\x83D\xb4lwz\xfe\xd4\xe4\xd1J\xa5\xb7\xa8\xec\xbf\
+\x83+\x13C\xff\x19S,B\x00\xd4~ R\xa05=}\x02\xed\xa0\xdfk\x97\xca\xd3\x11C\
+\xe4\x11"X\x16q\x1c\x9bZv\xccd\xdc\xeb\x10j\xe5\x8b\xe1X\x17\xc9\xb1\xc2z\
+\xb5~c5\xda\xdbor\xac\x8cB<\xa54W\x9a\xcbO,\xec\x05\xf1G\xe0~$\xaf\x8d\xb0\
+\xa8\xd3mmw\x1b[q\xbf5\xf6\x86\xbd\x14x\x1c=7\xca\x98\xef\x03\xeb`\xb2\xf3\
+\xc9d;\xed]\x90\x01|\x04R\x9e\x9c\x9d\x9e;y\xa4\xb0\xbf\xe5E\x196\xa3\xd6:J\
+\x9e\xba@@{\xbe\xf34\xc0\x13\x00\x8b\x12\x04\xe8E2bX\x9d:\x1e\xe4K\x9dn\x9f\
+\x12\x0c\x8b\xd3\xedv\xc7E\x06\xb6\xed\xb8\x0e\x00\x91\x12{}f!\xb7=\xaf2u\
+\x13\xb1\xc0\xe2\xceN\xaf\xbe\xc4n2\x86A\n\xe2%\x00\x01J\xa9\x9f\x9f\xcaW\
+\x16G\x89\x9a#p?\x92\xd7T\x10\xa3~\xab\xd7\xde\xed\xb5v\xa2^k\x14\xbf\xc7\
+\xb66\xdc\xeb\x9e\x91\xd5\xa7`\xa0\xf9P\x9dO\xa1\xffp\x9e\x9dlB2H\x89\x00!\
+\x94\x16\xca\xd5\xea\xcc\xf1 \xf7:\x06l:\x927\x9bH\x1e\xf5\xd4&\xdd\xda\xdd\
+\x0b\x00\x00\x10\xa0\xcf\x80\x00HD\x85\x95\x8a\x9c\x91\x08\x94\x80m\x11\xc6\
+\xb1\xd9\x95An\xb2:=\x17s\xc9\x18\xcb\x87\x85\x88S\x8c\xda\x96m[\x9e\xa7\x9c\
+v#\x0e"\xeay\xbe[\x9e\xac\x98Qhn(qw\xa7\xdfX\xbd5\xa2\xc64\xb7\x8e\xe5\xe2\
+\x8f\xc0\xfdH^/aQ\xb7\xd7\xde\xed\xb5w\xfb\x9d\x864\xf4&L\xfd\x03c\xcf\x8f\
+\x12\xee0\x1e\xd6\xd5\xe1 &\x8c\xb9q\x1eIv\x86U\'\x1d\xd7/Wf\xca\x95Y/x\x83w\
+\xb6<\x927J\xa4\x88\xa3\xd6z\xbf\xb1\x9a\xd9\xfb)\xe6\xc0\x05\x12\x92\xc4\
+\xf32bL\xda\x94\x10\x82\x8d\x0eJ\x08\xe7\x16\x8f\x03r\x81>\xa0\xb0l?\x8a\x99\
+\x0f1\xf89\xdb\xb6y\x1c\xa3\xc4\x1e\x93\xc5\xd0\xf5r9\xd7\xbb\xb90\xd1\xaf\
+\x86\x8b\x1f\x85\xf8\xb0<\xef\xe5\xcap\x04\xeeG\xf2\x1d\x10\xc1\xa2~\xaf\xd9\
+k\xd7\xa2n\x93\xc5=)\x06@oj\xe8\x993\xa3\xba\xbci>\x05\x03\xe8\x93\xe3aHwss\
+\x11Ji\x10\x16\xcb\x95\x99\xe2\xc4\xb4e\xdd\xd8\xab\xe1H\xde<2\\\xc5\x86\xf8\
+\xe8\xb7\x1f\x7f\xf9\xd2eP\x01\xde\x08 b\xa1P\xf8\xbe\xbf\xfa\x19\xd7\xbd\
+\xe9h\xfb(X\xaf~\xbd\xdf\\C9p\x04PDG\xc4\x07Vx\xbd\r\xaf\n\x9e\x07\x08\x96\
+\x05\xed\x9e\x10P\xa8T\xe7m\x87\x02X\x02m\x87\x92XR\xca\xbb\x8ec[~\xc8\xb8 <\
+\x8a\xa4m\x13\x91/\xe5\xfd\xfd]$\xc7\t\xeb7\xfa\x8d\x95\xb8\xbdu\x13\xb6\xab\
+q\x10\x0f\x00A~2_9v\xd4\xdc\x8f\xe4u\x17\xcb\xf1Bg*,N\x01\x80`Q\xd4oG\xddV\
+\xd4o\xc7\xfd6c\x11&k\xae3\x80\x0ec\x10\\\x1f\xa0\xd6\xd6\x07\xb7\x0c\xc2\
+\xc2\x0cv\x92r\xbd\xc0\xcf\x15\xc2\xe2D\x98/\xbb\xdeMw\xb3#y\xc3%1\x8c\xa3\
+\x94\x12\x11;\x9dN\xab\x95\xb2\xe5\xa0D)\xa5\x94\xb2\xdeht\xda\x1dJSd\x88\
+\x90\xb2\x90\x0f\'&&\xa2(\xde\xd9\xd9\x91(\x03?\xa8T&\x08!\xc4rr\x93\xa7\xfd\
+\xd2\xc2\xee\xc6\x95\xad\xf5\xeb\x04\xf9\xd4D@\tx6\xd1.4\x00\x00d\xa0RX\x04\
+\x84\x84\xd0\xb7\xfbqkw\xfbz\xb92o;\x94\x12F\x9c\x02\xed\xf7\xa8\xed\xf5\x85\
+t;5;(\xa0\x97\xb3\xfb}\x94\xb8\xbb\xd3\x9c\xac\x12\xef`.4Z\x1c\xbf\xe4\xf8%^\
+n\xa9\x18\x06\x07\\\xe0\xaaz\x87M\xc1\xa2C.\xbe\xd7\xda\xe9\xb5w\x8e\xc0\xfd\
+H\x0c\x15i\xe3Q\xdcx\x1c\xbbk 9x\x13t\xe2,=\xf9Y\xb0^K\xab\xa3\xe5x9\xc7\xcb\
+\x15&\x01\x00Q\n\x1e\xc7Q\x8f\xf5\xbb,\xee\xc5Q\x8f\xb3H\xf0X\x08\xae\xba4\
+\x8c\xf8\xc9$XO4\xdfB\x08\xb5,\xc7v<\xcf\x0b<?\x17\x84\x05?\xc8;\xaeG\xc8MP\
+\x9fG\xb2\x9fH\x8e\x9d\x15 \x94\xe4\x17_\x8b\xf0\x13\x07~\xad\x94RJ!\x84\x94\
+\xa30\x87\x96e!"c\xec\xd1G\x1f{\xe5\xcaU\x00 \x84X\x96%\x84P-\xe7\xf4\xe9S\
+\x9f\xf8\xd8G\xb7\xb6\xb6\xbe\xfc\xc7\x7f"\x84(\x16\n\x9f\xf9\xf4\'\xabU\xd5\
+\xf0\x10\xa8\xf3\xf2\xf5\xc6SO_\xb1,\xfa\xb9O\xdf\r\xbco)\xaa\x9d\x12\xc6S*\
+\x86@\xb0\x08 \x80\xe7\xda\x94\xf7\xb67\xafLM\x9f\xb4\xdc\xa0Y\xdf\xacL\xcet\
+{\xb1\rB\xd2\\\xd4\xa9\x11"m7\xc7\xad\xc0\x8ez;\xdb\xadj\x958\xaeC\xe8\xcd\
+\xb5C\xdb+\x14f\xde.\xe2n\xbf\xb9\xd2o\xae\xeb\x8d\x8e\xf7\x17\x95c\xb5\x14+\
+\xf1\xa8\xc1#p\xff\xae\x16\xad\x1f\xa1\x88\xe5\x0b\xff\x1a/\xfe\x0e\xf4\x86\
+\x1eZ\x92\xd8\xf4\xea\x97\xe9\xbb\xffgZ\xbe\xfd\xf5x;!\xd4v|\xdb\xf1!?1|\xa9\
+\xe0R\n!\xb8`\xb1\x94\x02\x11\x19\x8b\xa4\xe0F|\x02t<\x9fR\x8b\x10j\xd9\x8e\
+\xe3\xb8\x94ZG\xbbj\xbc\x862\x1c\xec\xa3\x86|\xf9\xf7p\xf5\x1b\xd0\xdb\x02 \
+\x10\xce\xd1\xc5\x8fY\xa7\x7f\x00\xbc\x89\xfdSx\xf5\x19P:;7D\x91n\xc9-\x04Q2\
+\xcem\xcb\x9a\x99\x99\x06\x00\xcb\xb6\xb66\xb7\xeb\x8dF\xb9\\\x9a\x9e\x9a\
+\x12B\xcc\xcc\xccH)c\xc68\xe7\x00\xd0h6\xae--MNVT\xe2\x9dN\xe7\xea\xd5%D\xe4\
+\\\x94\x17\xdf\x13w6\xfb\xf5e\x80\xae\x90\x80\x16AL\xb9\xd0\x08\x04\x82H)qm\
+\xab\x10\xc8\xad\x8dW\xa6gO\x87a\xbeV\xdb\xce\x05\xa1\x9d\xcbw;\x1d\x8f\x06\
+\x82`\xaf\xb1Dm\xcf\xf2\xa7)\x13\x8d\xdd\x96\xed\xd2\x89\xea\xadl\xa7g\xb9\
+\xb9\xb0z\xbb_Z\xec7\x96\xfb\xad\x8d\xac\xab\xcf^\xf5\xa6\x9e\x1d@<9\x02\xf7\
+\xef^\xd1]H\n\x86O\xfd\xef\xe4\xe2o\x0f<\x82\xb5\x97\t2y\xfd\xcf\xb0\xbb\n\
+\x1f\xfa\xe5\xd7\t\xdfG\x85Z6\xb5l\xdb\xf1\xc0?\xb2|~\xa7e8\xd8#b\xfd\x92|\
+\xec\x9f\xc0\xe6\xb7A\xf3\x03\xf5\xf3b\xed\x9b\xf2\xfaW\xad\xbf\xf2/h\xf1\
+\xc4\xeb\x9d\x13\x05\xeeQ\x14\xc5q\xcc\xb9\x1e\xddQ\x87\x0b\xe5\x8cQB\xce\
+\xdcv\xfa\xd4\xc9\x93@\xe0\xb9\xe7^h4\x9b\xc7\x8f\x1d\xbb\xf7\x9d\xf7\x00\
+\x00\xa5T\x08\xc19\x03\x80JeBJ\xb9\xbc\xb2z\xf6\xce;\x1d\xc7\x96R.]_\xde\xd9\
+\xdd\xadNN\xb6Z- \xd4+\xccy\xf9\x99\xb8\xb3\xddo,\xd3\xa8\x151\xb0)\x11\x121\
+a\xde\x11AH\xa4\x00\x9eM\xad\x107\xd6\xaeLL\xce\xe7\xf2e.x\xdc\xae\xe7\x0b\
+\xa5n\x9f\x93\xb8\xed\x17N\xf7\xdb\xd7Y\xfd\x82\xe5\x14\x84;%{\xee\xeen\xd3\
+\xb6\x9d8\x8a\xbc\xc0\xcb\x05\xee>\xe1hF\xc5r\x82\xb0z\xbb_:\xd6o\xaeF\xcd5)\
+\xf7_-\x98T\x9dz\x96\xc2\xd1\xd4\xf5\xbbTT\xe7\x11Bp\xce\xc5\xe5/\x91\x97\
+\x7f\x17P\x82\xe9<80\'\x01\xee\xbc _\xfc\xcd\x8c\x0f\xd9\x91\xbc\xf5D!\xfb\
+\xa0U\xc4=\xf1\xf8\xcf\xc2\xc6\xb7\x86\xc8\xae\xa2mI\x8e\xab\xdf\x90O\xff<\
+\xb2\x9b\x88\x87uk\x99Q9a\x8c\xf5\xfb}.\xb4\xea:\x0c0\xc7\x18c\x8cq\xce\x85\
+\xe0\x9c15\xcfS\xea\n"r\xce\x93Q\x01r\xb9`nvvee\xb5V\xab\xa9\x01\xe3\xfa\xf2\
+r\xb9\\:~\xfc\x18\xc2\xc0\x80J\xa8\xe5\x15fJ\x0b\xf7\x15f\xee*\x14\xcb\x94\
+\x00!`Yj\xc9\xdb\xd0\xf0\x13\x0b\xa4\x94L\x14\xa0Q[\xdb\xd9Zw,\xb0,\xd2\xeb\
+\xf5l",?\xdfg\x10\x04\xd3n\xfe\x18\x8f\xea\xbc}I\xc4\xab\xdd\xfaF\xa7\xd9B\
+\xea\xb0\x987\x1a\xedN\xeb\xc6\x01\xce2b9~8y\xba|\xec=A\xf98\xb5\xbc\x83V \
+\x1c\x81\xfbw\xa5\x98\xd3\xde8\xea\xe3\xd5\xff\x082\x1e^N\xc2\x9dk\xdfr\xf9\
+\xca\x17q\xe7\xb97"\xa7G\xf2\x1d\x15=\xde\xf3\xeb_#\xeb\x0f\xa5\xae\x19\xeb\
+\xc2\xe4\xd2Wp\xfb\x99\xd75\'&\xb8\xc7q,\x85I=\x0f\x90\x96s\xae\xf0=\x8e\xe3\
+(\x8a8\x17\x00\xc0\x85P\xe7\xd5I\x163\x00 @fg\xa6\t\xc0\x95\xab\xd7\xe28n\
+\xb7;++k\xb33\xd3\xe5R\x91s\xa1\r<\xaa\x98^~\xaa8\x7f\xef\xe4\xe2=\xf9b\x05%\
+\x9a\xeb\xe1\x94\x1d_H$@+\x05\xe0\xd1\xce\xe6\xc6\x8aE\tg\x1dB\xa9\x94\xc2sI\
+D\xf3 \xdd\xa0x\x1a\x89#\xa2\x1aD\xd7E\xf7\n\x89w\x11\xb9m[\x82\xc5,6\xfa\
+\xda\x81\x85\xda^8yz\xe2\xd8{\xc2\xc9\xd3\x96}c3\x189\x02\xf7\xefB\xd1\xc8\
+\xaez\x0ek\\#\x8d\x97S\x1bYd~\x11A\xc4r\xeb\x99#\xaf\xd9\xb7\xb0\x983\xb9(\
+\x8ap\xe9\xcfSK\xc82nL"\x96\x9bO\xddT\xbc\xf2\x9b\xcdL&K2\xb5\x88\x94$9"\xfa\
+\x1e!\xc4 ?\xe9\xe6\xad4w\xc6\xf9\xe4de\xb2:\xb9\xb4\xb4\x14E\xd1\xca\xcaJ\
+\x14E\xa5RI&\xde8\xa3yp\xc3\xc9\x89\x85w\xce\x9c\xbaOyy\r]h\x12\x07-!\xa0\
+\x9c\xa7\x84\xd7\xb66\x96-b\xc5Q\x07\x90S\xc7\'\xc8,/d\xa4\x18\xe4f,\xaf\x84\
+(A\xb4\xfb\xf5\x97\xfb;\xe7\xfb\xad\x8dN\xb3\xd1\xdc\xad\x8f\xbe\xee\x80B,\'\
+(\x1f//\xbe;_\xbd\xdd\xb2]:n\x7f4\x15P)\x16G\xe0~\x18\x05%\x88\x08D\x04"\x1e\
+\xf7_\x1fnd~AD\xad\x13\xb1\xe6\xca@m\x1fj\xeb\xe9\xb6N\x08 bT\x7f\xfd:\xf3\
+\x91\xbc\xe1\xa2\x86|!\x84Rxe\x7fw\xd0\x12\x06{\x9d\x18A\x1d\x14\xf2\xc6\xad\
+\xd7u\xb0GC\xc6\xe2/\x12$\x04(\xa5\x84\xe8(B\x86F\x92\xccB\x84\x14\x00\xc8\
+\x19C\xc4\x99\xe9\xa9Z\xbd\xb1[\xab]\xb9\xb6\x14\x04\xc1Tu\x92\xb1\x1b\xb0\
+\xd8nP\xaa,\xdc=w\xea\xdd\xf9\xf2\xec\x00H\x13\x17IB@H\x12\x06\xb6\x03\x8d\
+\xad\xcd%\x82H\x00;\xcd\x9d\\\x18\n \x16p\xe2\xcfZv\xd9\xf1J\x00\x04\x81\xa0\
+\xe8\xb1\xd65\xde[f\xbd\x1dy0\x03\xe9^B,\xc7\xf2\x8a\xf5.\xddn"\x97@I\xa2\
+\x8c\x01\x10\x00.\xa1\x1b!\x17pdP=4\xa2\xdb\xb7\\\x7fT>\xf3K\x00\x83m?\x07\
+\xcb\x18\x06\xbf\x04P\xd2\xc5\x8fY\xf7\xfc\x83\xfd\x93\xd2\xd6*\x8e\x01\x825\
+\xec\xb7\xc34\xd1<\x89V\xa0\x14\xa5\xa3m\xa3\xdfzb\xd2t\x8a\xe3\x86\xdc\xdb|\
+xp\xb0\x92\'#\xca\x12S8\xfd\x9dl\x0f\xa3\xebz\x08\x00M\x84\x10B)M\x00n\x80\
+\xf5\x84\x10U.\x95O\xceyeb\xc2\xb6\xed\x17_<W\xaf\xd5\xe7\xe6f\x1d\xc7Qz=\
+\x18\x9dk\xac\xb8A\xb1\x12\x14\x0b\x95c\xed\xfaZ\xbb\xbe\x0e\x92\xabuC\x84 !\
+\xc4smB\xa2\x8d\xb5KS3\'=?\xd7\xa8o\xe7\xc2\x02u\x0b\xddn\xc7sK\xcc\xce\xfbt\
+\x89\xf3\xbe\x10R"\x10\xe02^\xdf\xba\xda(VO\xdf\xda\x16K\xc8\xdb\xdd\xfa\xf2\
+\xd5\xa5\xf5Z[\x00B\xbd\x0b\xa5\x1c-\xe5\x88c\x81\x90\x10qD \x9eK\x1d\xeb\
+\x08\xdc\x0f\x83\xa4|\x18\x10\xb1\xbd\x86\x1b\x8f\x0e\xcd\x9e\x00Y\xad*7\xbd\
+O\xaf3g\xb2\x8c\xb1\x1e\xadF\xee\x8c\x1do\r\xdd\x02HJ\x03\x1ah\xee\xe5;\x8f\
+\x90\xfd\xad-C\xa6\x8e\xb1n\xf1\x83\x05\xe7\x8b6\xaf\x03$\xad\xcbh\x1b\xb2p\
+\x1bT\xdf\xfdF\xb7\x87\x01\xb2[\x96\xa5\x1c\xe15\xa6SJ\x8d\xbc\r\x16\xbb\t!J\
+\xa5b\xa1\x90_\xdf\xd8\xa4\x94NNVn6\xf3\x8e\x9f\x9f\x98\xbd\xbd0y\xac\xb5s\
+\xbdU[\x05\x90\x08 %RJ|\x97ZTn\xae\xbfR\x9a\x98/\x95\'\x19\x8b\xa4\x8c\xf2a\
+\xbe\xd3\x8b\xa9d$w\x9b\xd5]\xb2i\x93\x0b\x14\x12\xa4\x04\x8c\xfb\xbb\xab/\
+\xb9A!,\xcf\x07\xc5\x99\x83\xae\xc9\x10\x91\xe8,w\x1a\x1b\xed\x1e\xcb\xb9\
+\x88!\xe9\xf41\xe6\xb0\xd9\x90\xb56T\x8b\xd4s\x88cS\xd7\x02P\x19\xbb\xa9\xe2\
+\x1d\xc9\x1b%\xa6b\xc5%\x05\x80a\x7f\x030\x91\x1d\x08Azc{\x8b\x9a\x83\x0b!\
+\x98\xc0Z\xfe}H\x12\x0f\xadq-\x9e\xcf\x7fRV\xdey\xc4\xb9\xbf\x85e\xe0e"\xa5j\
+f=:\xb1:\xf9\x00*\xe5/\xdd\xcc\x90\xb8\xec\xf6\xbf\x8b\xe1\xe2\x1b\xde\x1e\
+\x14\xb2k\x88O\x86\x1e\xa4\x86\xa8;\x11P\x08\x01\x003\xd3S\x00\xe0y\xee\xcc\
+\xf4\x94R\xedo\x16\xe2m\xc7\x9f\x98\xbd}\xee\xf4{\xf2\xa5Y\x05\xcaR\xa2\x90\
+\xe8\xd8\xb4R\xa0\xed\xc6\xda\xd6\xc6\x8aM\xc0\xa2\xa4\xd7\xefz6\xd8A\xbe\
+\x1fK\xdb\x9f\x95\xee\xbcc\xa1k\xa1E%\x80\x04\x80\xb8\xd7\xaa\xad]\xd8\xba\
+\xfad\xb7\xb1v\x03\xa2Fr\xd9^j\xaf?\xb3\xb9\xb1Rk\xc61\x93\x16\x85R\x8eL\x15\
+i)G\xf2>Y\x98\xb4\'\x8bv\xce\xa3\xae5\xd0\x02\t\x1ci\xee\x87AL\xcb\x12c\x8c\
+\xb08H.\x0c\xb1\xd8P\xde1Q\xf6\xf7Q\xdeM\xd9.\x7f\xdc\xef\\\xa8\xb6\x1f\x1e\
+\xa4\x03\xa9\t\x81\xf0\xa6\xd9\x99\xbf\xeb\xd8G^\xe7\xdf\x15\xa2[\xc5f\xe9\
+\x13}\xf4\x16k_\xf2\xd9&\x05\x0e\x00\x92\xb8<X\xe8\xdd\xfe\xf7\xedc\x9f}\x83\
+\x80\xc3d!A\xb1\xed\n\xc4\x11q~~\xce\x0f\xfc\xd9\x99iJ\xa9\x94R\x9d/\xe4\xf3\
+gn;\x9d\xcb\x05\xaah\xf3s\xb3\x00\x90\x0f\xc3 \x08\x08!S\xd5\xea\xbb\xee}\
+\xc7-\xe4\xc3\xf1\xc2\xc9\x85\xb3\xc5\xea\x89vm\xa5\xd3X\x97\x823\x816%\x95\
+\x02\xd4;\xbb\xeb\xebbjz\x0e\x80\x80\xe5I.B\xdf\x89\xa4G\x90\xd1\xdc\x990O\
+\x08\xb2^s\xab\xdf\xedJ$\x88\xc0\xa2Nm\xed\x82\xbds-,/x\xb9\xd2\xa0\xe7\t\
+\x86(Q\xc4(\xb9\x05\x8cG\xf5f\xab\xd7\x8f\x85Bm5\xdaJ\t\xaeC\xcay\xcbu("2&3\
+\xec\xd2\x11\xb8\xbf\xd9E{\x1f+\xbf\xdd(\x8ah\x14\xa7\xa2\xa5\xe8(GJ\x08Q=\
+\xf4 *\x89\xea\x1eH\xbdk\xd5\xffR\x80=\xd5y\x84bl\xce\x03\xa2\xf0m\xbd;~\xdc\
+\xa9\xdcsD\xc8\xbc\xe5\xc5\xc4J\xa5\x11\xd7\n\xefo\xfag\'\xbaO\xbb\xd8\xb6\
+\xa8\x85\xb991\xf3\xc1\\y\xceI\x08\x90\xef|\x1e\x8du\xaa\x98\xc9\xf6\xec\xcc\
+\xf4\xe2\xc2\xbc6\xb1\xaah\x04\x85B\xfe\xedg\xefP&YBH.\x97;s\xdbi\xdb\xb6U\
+\x19\'\'+\xb3\xb33\xb7\\\x16\xc7\xcbM\xcc\xde^\xa8\x1ck\xd7W:\xf5u\xc1cB`"O[\
+\xdd\xfa\xe6\xba\xa8N\xcd\xc7\xbd\xa6\xed\xe6\xd0r,\x11\x13\xaf\xc8\t\xa1\
+\xb6\xdd\xe7\xd2+\xe51\xbe\xc0%\x97H\x84\x04D\xe0q\xbf\xb1y\x99\x10\xb0(P\
+\x02\x16\x05B\xc0\xb1)!\xb4\x15c\xaf/d\x02\xeb\x90(r\xa1O\x03\xcfB\xc48\x1e\
+\xd0\xf9\x992\x1c\x81\xfb!\x10\xd3\xb5+\x8a"+\xd6\xeb\x89\x0c\x83j\xea\xfe\
+\x1b\x18\x88Tg\xb0\x0c\x11n\xe9\x95\xa9\xff\xa6\xe9\x9f-\xf5_td\x8b\x00\xa0\
+\x9d\xe3\xe1\xc9h\xf1?\xf3\'\x8e\xbbIoy\xbdJx$o\xb4h4\xb4m[Y\x1a\xa5\x94\x84\
+\x10aUk\xfe\'-\xcbr\x1c\xc7\xf7\xfd \x08T\x83\xa17\x192\xe55\xcci:\xcbD\xd3/\
+&\x15\xa3\x9b\xb7\xe2^4\xb8\xab_\xdb\xb6u)^}\xc3\xb6]\xbf<}[\xa1\xb2\xd8\xae\
+\xadv\x1b\xeb,\xee\x87\xbe\x1d\xb1\xd6\xe6\xc6Rer\x81\xd2\x88\xb38\xcc\x97\
+\xe3\x98\x95\x8bA\xbb\x13G\x11\xb7-\xdb\xa19"\xeb6\xb5,:\x88\xe9\xa8\xfc\x92\
+\xb8\x00!\x11\x00J\xa1\xcd\x04\xe9\xf4\x05\xe72YP8\x98W\xfb\x0e\xcd\xf9\x94\
+\x12\x88\x99PN\xa2cKp\x04\xee\x87@\xb4\x9b\x9aR\xde\x1d\xc6\x12\x1bWrG\x86s\
+\xdf\xc3u7\xb9w\xa8\x9d9\x8e\xe38\x8e\x8e\xb5T+\x7f\xa4\x06\x1f\xb1\xb1oY\
+\xd4\xf1\x0b^\x90\xa0R0\xe6\x00\x00 \x00IDAT\x0f\x82\xc0q\x1c\xdd\r^\xf7\xa2\
+\x1e\xc9\x1b$\n\xd9U\x93\xf0<O\x81\xa0\xe27\x00@\x9f\xf7<\xcfl\x0f\xdf\xd9&a\
+\xc6\x96Qj\xec\xc0v\xaa@\\5i\x95%u\xd2q\x1c\x05\xeb&\xb8\x9bS\x93\xd7\xb0\
+\x14\x96\xed\x95\xa6N\x15*\x8b\x9d\xc6z\xa7\xb6\xe2`\xdf\x97\xfd\xcd\x8d+\
+\xd5\xe9\xe3a\xbe(XT.\x17".\xdb]&\x04 \xa0o\xcd: \x90\xb7\t\xa1:\xa6\xa3\n\
+\xdbkQ\xd2g\xb8\xba\xcb-\x02\x8e\rj\xf3\x0f\xe5\xe8\xef\xda$\xf4-\xdb&\x8c\
+\xcb\x98I\xd87\x90\xdb\x11\xb8\x1f\x0e1\xf1\x9d\x081pX\x84\x11\x87\x99\x01\
+\xbe\x0f\x1e\xd9\xab\xd5\xaa\x9e\xac`\x9ds\xae\x90]\xf5dD\xa4\xd4\xb7m\xdbu]\
+\xdd\x99\xd54\x16\xde\x98\x99\xf8\x91\xbc\xee\xa2>+\xa5\xd4\xb6m\x8d\x83\xfa\
+OH\xc0]5\t\xd7u\xdf\xa0\xc1>\x15[F\xe5{h2M\xf2\xacs5\xa0\x1c\r\xd1\xe75\xac\
+\xbf\xe6\xa3\x14\xb5\x9cB\xe5XX\x9e\xeb6\xb6\xda\xb5e\xdbjm\xae_\xa9V\x8f\
+\xcd\xcc-\xf4\xa3\xa8\xd3g\xf9\xbc3\x88\x82G|\nyl^\x94\xac\xad\xba\xb0\x8e\
+\xe9(\x10|\x97H\x891G.\xc1\xa2\xc4\xb6\xc0wH\x18X\x8eM8\xc7~_ \xe2\r\xb3|\
+\x04\xee\x87F\xc6,\xe8\xc8XS\x93_\xbc\xd1\x1e,\xba\xeb\xba\xae\xabf\xdf\x96e\
+1\xc6\x94\n\xaf/\x99\x9a\xda\x11-\xf3\x96\x17=\xe4k\x8aF\x87\xdbUMB\xcd\xf3\
+\x14\xa7\xf1\x866\x86!\xbekh\xd6\xe0\xaeo\xd2\x86V\xb3/\xa8\xdbL>\xe7\xf5h\
+\xd8\x94\xda\xf9\x89\xb9\xb0<\xd3mn\xf9\xbb\xcb\xbd\xd6V\xbb\xee\x83\x9f\'(e\
+\xcc\x06\xce\x0e\x94Hb\x83]!\xac=\xdc\xb1 \t\xf8%\x11\xf2>i\xf5 \xe6H)\x84\
+\xbeU\xc8Q!\xb1\x1f\tT\xf4\xfa\x01\xb2\xfc\xdd\x02\xee\x18\xb7\x90\xb5\x81\
+\xb5\xa1\xb7\x85\xac\x032\x06\xea\x10; ^\x19\xbc\t\xe2\xe4\xc1-\x00\xb9\x89\
+\x80m7\xf7v\xc1 n kC\x7f\x1b\xe2&\xf2\x1eP\x9b\xb8E\xe2W\xc1+\x11\xb7\x047\
+\x8a\x07\xa4]\xdd\x01@\x82\x03\x90\x99\x8f\xa5y\xf7}\xddfM5M\xeb\xec\xb6ms\
+\xce\x95\xbb\x98fl\\\xd7\xd5j\xfbaFv\xc4\xa8\x81q\x1b\xa2\x1aD\xbb*\xe2\x15q\
+B\x92\x9b\x06o\x82\xb8%\xb0\x8fv\xf3H\xb5\n\x05|&_\xa7I\x9b\xd7\x90\xaa\xbe\
+\xe5\x9c\x9ay\x1e\xd5\xd6\xf5\xd5\xb13W}R\xff\xbe~\x05!\x84\x86\xa5\x99\xb04\
+\xd3\xdc]__\xde\xb6\xec\xde`XR\xe4:!\x88`\x01\xcf\xfb\x16\x1d\xee\xa14\x18\
+\xb8,\x02\xd4\x86\xc0\x85\x9co\x95\xf36\xa0\x8c\xa2\xc4jz\xe0\xcc\xbee\xc1}\
+\x80\x83\xb5\xf3\xd0\xb8\x84\x8d\xcb\xb8\xfb\x12\xd6/@g\x15D?}#\x85\xa0J\xca\
+gH\xe5\x1e2q\x96N\xdeE&\xee|\xad\xde\x0e"\x92;\xcfc\xfde\xac\x9d\x87\x9dg\
+\xb1\xf1\nD\xb5\xd4\xc7\xb1|R<I\xaa\xf7\x92\xc9\xbbi\xf9\x0e2y\x0f8a*\x85\
+\xfe\xb6X\xfa*\x8a\x98\n\xb4Y\x9c\x8bb\xc2\xc0i=\x9dr\x82\x04cy*\x00\x10B\
+\x9a\x97\xf0\xea\x1fJ\x19#M\xa2p\xa8{\xa5 \xb6O\x8f\x7f\n\x9c\xa2\xd2qTO\xb6\
+\xba\xcb\xfe\xe6\xb7Q\xf2d\'F\xa0J\xad\xb1(\xa5\x16\x05N\xaa\xef S\xf7\x19\
+\xb9\xda\x91\xab\x0f\x02k\x03\xb1G\xe7\xca\x00@\xa4 \x95\xb3d\xfa=7U]\xd8^\
+\xc6\x95\xaf\x0f\x86X\x92N\x13\x81\x80$\xe5;\xc8\xcc{\x0f\x9e\xa0\xdc=\x07\
+\xf5\x0b\xb2~\x11v\x9e\xc5\xfa\xcb\xd0\xdb\x02s\xeb\x03b\x93\xc2q2u/\xa9\xbe\
+\x8bV\xdfA*w\x83u\xd3{\xb6\x1d$\'\x9dN\xa7\xdd\xeet\xbb\xdd\x9815|\xda\xb6\
+\xedy^>\x0c\x8b\xc5\xc2-l\x14\xf7j2#\x84\xa8\xd5\xea\xadV+\x8ac)\xa5m\xdb\
+\xb9 \x98\x99\x99v]W\xe3\xbb\xe6\xaf\xb5\xda;\xaa\xea\xde2 "b?\x8a\xda\xadv\
+\xb7\xd7\x8b\xfa}\x9eL\x16]\xd7\xcd\x05A\xb1X\x08\xc3\x83:\xdd\x12 \x99a&\
+\x03\xee7Na\xdc\x83\xaf\xb9\xb8A\t\xc8\x8e\x94r\xe8\xd0\xa2&\xd8\x08\x12p\
+\xb7-\'B\xb0\xa8\xd1M\x11b\x8e\x12\x89\xe3P\xdf%1KB\xeb$\xbd\x19`?\xaa]\xcb[\
+\r\xdc\x070\xc1:r\xe5A\\{\x18W\xfe\x02:+\xea\x82I\\\x00\xe8\xb5\xfb\x12z\x9b\
+\xd8\xdb\xc4\xb5G\x00Q\xe6\x17\xc8\xc9\xef\xb3N\xff\r2y\xcf\xad\xbf\x1d\x11\
+\xe2\xa6X\xfe\x1a.\xff\x05\xac|\x15\xe2$8*\xd1\x1f\'\xc9\x86\xe8\xe3\xee9\
+\xac\x9d\x87\x8b l\x87.|\x82\x9c\xf84=\xfe\x19\xb0s\x03\x9a\xb0\xfe\x8a\xfc\
+\xd6?\x06\x00\x0b @\x0c\x08)\x99~\xe8\xaa\\ZmO.\xd1\xed\xa7`\xfb)\xa9oH\x17\
+\xdc\xfe\x81\xaf\x92\x89b\x92#B)\x85\xda\xb3\xd63?\x93\xbd9I\x10\x81\xe0\x9d\
+\x7f\x07\xa6\xde\xa5\x96q+\xee_>\xf7\xab\xd0x9\xf5\x08\xa4V\xbb\x90\xa9\xfb\
+\xec\x8f\xff\x16\xf1o\xb0S\x81\x86\x0f\x94L>\xff\xaf\xf1\xe2\xef\x18\xd7\xb2\
+Q\x10\xac\x0f~\xc1\xda\x17\xdcu\xfd\xcb\xe5\xaf\xe1\xea\x83\xb8\xf4\'\xd0]3k\
+&\x95a\xe4\xd8\xbc\x8c\xcdW\xe0\xf2\x1f\x08;\xa4\xc7?E\xcf<@\xe7?\xb4\x7f\
+\x86\x0f"*\x1b\x9dNgum}}}cssk\xb7\xb6\x1b\xc7\xd90&\xb9\\0==\xbd8??3;37;\xa3\
+\x1f\x14R\xbe\xf4\xd2K\x9dN7Y\xb8\x88R\xe2\xdc\xdc\xcc\xc9\x13\'\xc6\xaa\xa2\
+\xea`ee\xf5\xfa\xca\x8af\xa3\x11\xa5\xeb\xbaw\xbd\xfd\xac\xe7y\xea\xb6~\xbf\
+\x7f\xe5\xea\xb5\xeb\xcb+\xab\xabk\xddn\xd7L\xe3\x07\xbe\xff\xfb\x8e\x1d[\
+\x04\x03\xe3\x14\xf1R\xaf7\xce_\xb8h\xa8\xc6H)=y\xf2\xc4\xcc\xf4\xf4-T\x08\
+\xe7|yeukk{}cc{{\'\x9d\x07\x00\x00\xdb\xb6\xab\xd5\xc9\xf9\xb9\xb9\x99\xe9\
+\xa9\xb9\xb9\xd9\xd1d2N\x90\x83\xa2\x1aurS\x18\xfd\x1d\x9by8\x8e\xe3\xf8\x9e\
+\x14\xc2\xd8I\x92\x00\x02!\x04y\xb7\x17\x8b\xd0\xa39\x8f\x00\x82\x04`\x0c\
+\xb8D\xc7\xa6\xbe\r\x04\x04\xd7\xad&=\x1d\x1f;p\xbd5]!u\xafFD\xb9\xf2\r<\xff\
+o`\xfd[\xc30\xb6\x19\xcc\x1a\xba\x84\x1bW\x01\x80\x10\xec\xac\xe2\x0b\xff\
+\x17^\xfbc\xfa\x8e\x9f\xb4\xde\xf6\x9f\xdfj\x06\xbe\x8e/\xfe\x06\xac?\x94}]\
+\x16g\xd3\x83\x8d`r\xe9+\xb0\xf4\x15\xb9\xf8\tr\xcf\x8fc\xe5\x1e)%\n\xa4\xd4\
+\x01\x11\x83v\x86R\xa3\x7f\xa6D\x99\xb8N\xe6\x81\xce\x83\xfa\xd3\x0eQ{\xc2\'\
+$>\x10\x1b\x88\r\xc8\x07\xe3\x84\xe9{\xa3\x8e,\xcf\xbc_\xda%\x98\xfb^\xaa\
+\xc0=\xe5_?\xfc\x13k\xe7q\xf7%\x98\xfb\xc0>]h\x98\xa0\x94\xb2\xb5L\x97\xfe8U\
+Q\xc4H\x16\x80L\xdeM\x8e\x7ff/+\xf1\xd0jV\xbf(_\xfaM\xb8\xf6\x9f@\xd9\xa9F\
+\xc7\xc2\xd4\xe8\x05\x83\xf2\xf2\x8e|\xe5Kr\xe5/\xe9\x99\xcf\xdb\xf7\xfe$8\
+\x85}\xbe\xf5>\xc5\x81D;>\x7f\xe1\xe2\xb9s\x17\xb6\xb6\xb7\xf7\xd1\x1f\xbb\
+\xdd\xde\xd5\xab\xd7\xae^\xbd\x16\x86\xe1m\xa7O\xdds\xcf]\xa5b\x11\x11\xe3(~\
+\xf2\xc9g:i\xec\xbb\xa3s\xfb\xf1c\xc7\xcc\xad\x1e\xcc&\x87\x88W\xaf]{\xe6\
+\xd9\xe7\xcd\xecPj\x9d<q\xdcu]D\xbc\xb6t\xfd\xa9\xa7\x9fY_\xdf\x80A\xb1\xcd\
+\t\x17\xd1F\xd4L\xe2;\xbb\xbb\xcf<\x9b\r\xf5\xecy\xde\xf4\xd4\xd4A\x90\xd1\
+\xcc\xe1\xb5kK/\x9d;\xbf\xb2\xba\xc6\x18\x1b\x81\xe9AR\x9c\xf3\xf5\xf5\x8d\
+\xf5\xf5\r\xcb\xb2\xe6fg\xce\xdey\xc7\xc4D\xd9H\x8f\x8c\x1c\x00\xec\x8d\xd1o\
+\x1e"\xd1\xb2\xed\xca\xe4d\xbdQ\x97B\xa2Ta\xc7\xc0"\xd4\xc2^\xb3\xdb\x82\xa4\
+\x16b\x01\x8c\xa3e\xd1\xd0\xa7\x04\xa4\x04K83\x1cr\x00\xe8@\x9b\xc6\xdb7\xdc\
+8;s\xf9\xad\x00\xeeC\xdc\xe9l\xc8g\xbf@\xae\xff)\xc4u}m\x00p\xa3\xd8g\xde`\
+\x1e\x10\x82\xad\xeb\xe2\xb1\x7f\n\xddu\xeb\xde\x7fts\x19`}\xf9\xcc/\x90W\
+\xbe8\xa4_R8B\xc6\x832\xa4|\x19q\xf9\xab\xb8\xf3\xbc\xb8\xe7\x7f\xe4\xc7\xbe\
+\x1f\x19\xf7\x81\xa6\x1f\x19t\xc8TAF5nBRWA\xab\xd5TgX-\x8c\x12B\x80\x10\x16Q\
+\xbc\x1fQ\xfb\xcb\x0f\x91=\xc9\xbc\x94\x12\x11\xf4#\xb8\xf0\xfd\xde\xd5?\xa2\
+\xfd\xf5a\xfa\x19\xe1]\xb1\xf6\xb0=\xf7\x81\xfd+M\xaf\xbc\xc5\xdd\x0bno;]\
+\xd2\xf4\xc7:\xfeW\xd1\x0eG\xfb+&\x8b\xbc\xa4\x94\xf2\xe5\xdf\x83\x17\x7f\
+\x8dtV\xb2_9S\'\xe6\xe8\x8e\xba\xf6\x00\xa2\xba|\xe1\xd7Y\xfd\xa2\xfd\xc1_$\
+\xc1\xd4^9\x1f[\x16]\xa2\xad\xad\xedo=\xfa\xed\xf5\x8dM\x91\rAN\xc6\x1d\x03\
+\x02v:\xed\xe7\x9e\x7f\xe1\xda\xd2\xd2{\xde}\xdf\xe9S\'9\xe7\xb6\x93\xed\x98\
+\xb6=\xa6\xab\xa2\x113`Do#\x8e\xe3HD\xce\xf9K/\x9d{\xfc\xc9\xa7\xa3\xc8X\x1e\
+\x91:@\x9a\x8c\x19\xa9\xe1VJ\x1c\xd9\xbc\x94\x10bY\x07\xf2p\xd7\x9d\xa2\xd7\
+\xeb=\xf6\xf8\x93\x97_\xb9\x12E\xfd\xd1L\x8ey\x10P\x08\xb1\xbc\xb2\xb2\xb5\
+\xbdslq\xe1\xf4\xa9\x93\x07y\xdd\x9b\\J\x95\t\xdb\xb1\xbb\xdd6c\x1cQ\xda\x94\
+\x96\x8b!u\xe7\xbd\xdd|}{\x9d@\xaf\x1b\x81\x90\x98\xf3\xa9MAJ\x81\xd4\xa5\
+\xf9\xdbl\xaf\xe4H\x81\x00\x965-;\x9eh/\xedoN\xcb\xc8\xe1\x06\xf7T\xc7^\xff6\
+<\xf5s\xa4\xf6R\x86UH\xc0pD\xab\x1d]\xd1e\xf2\x00\xbc\'\x9e\xff\x15\x08\xe7\
+\xad\xdb?w\xc3\x0c\x0c@\xaa\xb9\x84O\xfc\xaft\xf5/\x00\xd4\xeb\xd4+\xd282\
+\x8a\xe9Z\xbb\x04#\x93\xbd\r\xfa\xfc\xbf\x8c*\x1f\xc2\x98y\x80\x04 ]\xa2\x04\
+\x8c\xb4\x8ca\x9c\x8c1#\xad\x89K)\x89\x94hD\xfd\xb5\xe2\xd8\x85\xe1\xa6\xef\
+\xa9Z\x1aX~$J\x89\x08\xca\xd1\x9e1\xc6\xadiR\xbc\xcb\xef\xad\x01!\xe3j\x12\
+\x81\x10\xbc\xf2ey\xe6\xf3V\xe9\xe4^\xb5g\xee\xc6\xe0,\xfdI\xb6\x80`\xa0\xb0\
+\x1d\x88\x99\x0f*V(\xa3`b\xb2S\xa0|\xe6\x0b\xf4\xc2\xbf\x01\x11\xa5\xad\x11#\
+\xca\xbb\x91\xc3a\xce\xcd\xa1}\xf9k\xfc\xc1\xff\xde\xfe\xd0/\x93\xdc\xcc^9O\
+\xa74\x9c\xd3\x9c?\x7f\xf1\x89\xa7\x9e\xeetFw)2\xdfN\x0ct\x1f\x8c\xa5\x00\
+\xd0h4\xbf\xfe\x8do\xb6Z\xcd\xdb\xcf\x9c\xa1\xa9>\x8c\x00\x04\x93\xf7h?nsh\
+\x14B\x88\xc1^E\xc3\xb4\t\x01)\xe4s\xcf\xbf\xf0\xf8\xe3O\x8a1{L\xc3\xb0o\x90\
+!\xbd\xa3G}\xce9\xe3l\xe4f\xd5(\xf6[\xff\xac{%"nmo\x7f\xf3\x9b\x0fonm\xefQ\
+\x1bi[\xcd\xe0\xda\xa0\x8fDQt\xe9\xf2+\x9dN\xfb\xb6\xd3\xa7\xe8\xe1\xdf\xee<\
+,\x14r\xf9<JN\xc8@q\x07\x80\x99\xb9\x93\xd5\xe9\xc5nc\xa3\xb6y\xcdsbJPH\x00\
+\x80N\x14 \xefR\xd2Q\xf5,\x11@\xf0\xd0\xb2UP\x9a\x03\xca!\x06w\xdd\xa9T\x00,\
+\xb8\xfc\xef\xad\xdd\x97\xc6\xc7\xae7\x91\x14\xf4\x9f08\x999\x93\xa4\x0e"\
+\x16\xcf\xfc"\x99~/-\x9d\xda+\x03\x90\x0c-\xbc\xb9L\xbe\xf5St\xfb\xf1\xf4\
+\x8b\xc7\xe5\x84\x18\xd4\xc7\xb8\xc6\r\x84\xa0\x9d\xef\xde\xf9\x13=\x06\xd0\
+\xeb\x14\xd3\x97\x8c\xdc\x8e\x9b\x88\x0c\x8fI\xb68\x89H\x94\xd4\x08C\xa6\x96\
+\xbc\x86{Mh\x12(\x01D)Qo\xe6\x10\xc7\xb1(\x7f\xc8\xdb\xfe&\x19\xcb}\xa9g\xdb\
+Wq\xe79,\x8eg\x8a5\x88\xc4q\x1c\xd7\xaf\xe6\xd6\xffrO \x06\xe0\xf3\x9f\x85\
+\xfc\xc9\x0c\xc51\xfc\xfa<\xc6\'\xff\xb9u\xe9w\xb3\xcf\x8e\x9d\xae\x8d}\x051\
+\xe1\x06p\xed\x11\xfe\xed\x7ff\x7f\xf8\x97\x89u\x83}\xb7M\x90=w\xee\xc2\xa3\
+\x8f=\xa6\xf6\x03\xca\xdc\xa5_\x93\xcc\xe02\xba\xf3\xe0\xbc\x10\xe2\xc9\xa7\
+\x9e\x8d\xfaQ\xba\xa4D\xbf)\xf3\xeaa\x05\xc61c\xd9\xc8S\xb6m__^~\xe6\xd9\xe7\
+\xf6@v\xfdv\xa0d\x10F\x11\xd3\r#N\xed\x19\x94\x10n\x89B\xb3??&\x84\xd8\xdc\
+\xdc\xfa\xcbo<\xd8h43)\x8c\xa6\xb9\x8f\xac\xado\x12B\x95\xc3\xee>\x1c\xd7\
+\xa1\x10B\xc8h\x8b\xb2,\xbbPY\xe0H\xa2\x9d\x8b\x80@\x00$\x12\xc6\xa9d\xfd\
+\x04$P"\xb8\x96$\xf6\x8dx\x99\xb4\x1c\xee\xf1\x10q\x087\xdd\xe3\x9fg\xe5\xbb\
+\x01\xf6@=u?Pf\x15c\xa7\xca\xac\x92\xee3\x83kd\xe4OD\xe8\xac\xca\x0b\xbf3\
+\xb6I\x99\xbd:\xee\xd6\xe1\xf1\xff\x85n?\x0eh\xd0b\x88\xc3\xff\xf4\x9f\x9amO\
+^c\xdc\x9c\xa4\xeb\x14\xbag\x7f\xba3\xf9\x91(\x8a\x06\x9b\t\x98iB\x06\x98\
+\x8c\xbd\x03t>\x11\x87\xcf`\xda\xba>p\xc4J\xc53`\x8c\xa7j#C\xa3\'\xdd\xd5\
+\xac\xf08\x8ews\xf7u\xfd3f\xda\xc6\xb3\xaa\xe0\x80\xab\xdfL9\xa8\xa4+Pc\x13]\
+\xfd:e\x8d\xc1\xe3\xa3\x90\x81\xc8f?\x8a\xd4\x1b}\\\x08\xc1Y,_\xf8\xf5\x01\
+\xb2\xa7\xaaed\xb0I\xe5p\xa4V\xf5\x83*\xf5k_\x96\x17\x0c\xeb\xee\x1eE\xd0\
+\xa5\xb8zm\xe9\xf1\'\x9f2\x90]\x7f\x82\x81v\xec8n>\x1fNLLT\'\'\xab\xd5J\xa52\
+Q\xc8\xe7\x1dGwu\xa2^-\x84x\xe1\xa5\xf3\xadvv\xa7M\xb9\x07\xb8\xab\xed5\xfa\
+\xfd~\xb2\xef\xc4\xb0\xa4\x8c\xc5\xcf<\xfb|\xbf\x9f\xd9\xfc\x16G\x8e\x87)\
+\x9biFQ\x14Ec6\x84C\x99\xcd\xc9\xd8\n\xa9\xd7\xeb\xdfx\xf0\xa1\x04\xd9\xc7\
+\xdcoYV\x98\xcb\x95K\xa5\xead\xa5Z\x9d\x9c\x9c\xac\x94JE\xdf\x1b\xf5\t\xc6\
+\xf5\x8d\xcd\xfap\x84xkJ\xb1<\x1dCn\xd0W\tz\x1e\xb5|\x9f:\x0e\xb5m\xe28\x8e\
+\xeb\x86>\x03\x18\xdf\x95\xf6\x92C\xaf\xb9k\x80\xe8\xdb\xf3\xcd\xd3?]y\xf9\
+\xff\x08Z/fyvB:\xee\xa9\x8ew\xa2\xed\x9f\xe9\xdb\xd3\x92zTD>_/\xf6\xce\x97\
+\xfb\xcf\xd9\xa2\xad\x92\x1b\xb0(\x1a\x8e\x01\x00@^\xf9\x8f\xf4\xcc\x03\xa4r\
+6\xf3jH\x90\x8e\xc5\x11\xbe\xf4\x1b\xd6\xfa\x83)\xec6\xe9\x11E\xa1\x8cQ!a\
+\xa0\xc2\x0f\x9eB\x00\x82V\xd0:\xf3\xe3\xbd\xe9O\xaa\xdd!i\x1c\x81\xe4\xa90\
+\x03YU\xdd\xf8\xc7\x04\xe5\xcc(E\x06\xd8\x01"\x86\xc1>\xc2\xc3I=I\xb6,\x18C\
+\xec\x00\x80Z!b\x14\x7f00p\xb1]\xfcH\xd8}iX.\xb3\xcf+\x95\xff\xea\x97\xe5]\
+\xff--\x9f\xc9hy\xe6\xdb\x19c\xf9\xdd\'R\xa3\xd10\xcf\x08\x08\xbcp\x9b,\xbeM\
+\xa7`N\x98\x18cb\xf9\x1b\xdeK\xbfb\x98\xe8\xf4$\xcc`o\x88\xddqN\xc4v\x89[E\
+\x00pD\xddg[A\xbc\x9c|\x97\x11\xa5\x1e\x11\x00\xc4K\xbfA\x8e}\x92\x16\x8e\
+\xc18\xd1\xfa)\xe7|\xb7V{\xe4[\x8f\x1a\xa4\xf6p\xfcF a.(\x16\x0b\xe5b1\x97\
+\x0b\x94ET\xaf\xbb\xe9t{\xf5z\xa3Vo\x98\xae#i\xb2~\x98\xe4(\xa4\xea:\xd4;A\
+\x9b\x12E\x0c 6\xeb\x81R\xe2\xfb\x81c\xdb\xb6\xe3\xb8\x8eC\x08\x11Rr\xcel{\
+\xc8\xb9\x9bi\xa6\x8d\x9f`\x12D{U\x88z\xbc\xdb\xed>\xfa\xd8\x13\xb5z]\x8fm\
+\xe6\x9d\x9e\xeb\x16\na\xa9T*\xe4C\xe5\x8c\x9b\xb83\x92~\xbf\xdfh6k\xf5\x86\
+\xa1\xef\xabo-4\xb39\xa6r\x0e\xbfX\x96]\x9e>\xbd\xb3\xf2B\xce\x05\x8b@\xcej\
+\xfa\x9e\xcf0\x90\x12)p\x0f[ Z\xe9^xc9\xac\xe0\x9eQ$\x15o\xdb\xa3S\xad\xf9\
+\x9f<\xbe\xf4\xf3\xb9\xfe%\r4={n}\xe2\xaf5\xc3wFvU?\x8b\x88\r|\xfbz\xfe\xa3\
+\xc5\xfe\xc5\xe3\xb5\xdf/\xf6\xcfg\xd5UHt\xed\xde\xba\\\x7f\x94L\xdc\x99\x81\
+\xa7\xe1&\x8d\x1bO\xfb\x97\xff]\xa2\x9e\xa7in}`RC:q\xfdg\x82\xd7\x08v\xfd\
+\xc4\x8f\xf6f>K\xb4\x95L\x02R\x87\x88\x08\xa9erG\x04\xc5\xbe\x14\rI\xee\'\
+\x00\x084\x19\x01\x10\xd1rQ9\xd9\x1a]\xd1\x96r\xa8\xfe\x8f&\x9b\x88^0\xa2|\
+\xe4\x11\xb1\x16\xbcc\xce*\xbb\xbc\x96-\xb5\xce\x0co\xe3\xdaCP>3\xfa\xed\x86\
+\xa6\xd4\xe65\xaf}.\xf5\xd4\xf0V\x02\x04\xa2\xd9OC8o\xbaW\xab\x9c3\xc6Xk\xcd\
+}\xee\x17@\n \xc9\xd4\'\xab\xf8\x93\xa6\x7f\xe7z\xe9\xb3m\xef\x14\xb7\x8aj\
+\xeb1"#\x9foU:O.4\xfe\xc8\xc2(!E\xd2\x1c\x0e"\xb4\xae\xcb\xe7\xff\x15\xb9\
+\xff\x7f\xdb\x87V\x12B\xf4z\xbdg\x9f{\xbe\xd31\x9d[\x06\xf7[\x94\xcc\xccLOV&\
+<\xcf\xcb\xf8\x86\xabJ(\xe4\xc3r\xa98;;\xbd\xbc\xb2\xba\xb9\xb9\xb5\x0f\xeb0\
+J\x86\x98\xa3\x0b\xe7\\Js\xd2`\x92~\x83?\'\xca\xa5Je\xc2\xf7\\\xdbq<\xd7\xf5\
+</\x08\x02\xcf\xf3,\xdb\xce\xe7\xf3\xa3\xca;cLp\x9e\x06S\xa2s\xb2W&\xd5\x83/\
+_\xbat\xfd\xfar\xf2H\n\x91\'\xca\xc5\xd9\xd9\x990\x973\x17\x13\x812\x05\x11\
+\xe2\xfb^\x18\xceNOU\xb7\xb6w\x97WV\x86s\xca\xd4\xef[Sr\xbe\xddu\t\x13\xc8\
+\x81 2\x1fWC7@BQDR0\xbc\xf9\xb2\x1fVpW\x92\xd1@9\xe7\xb15yi\xe6\x1f\x9e^\xff\
+\xb5|t\t\x00v\xf2\x1fX\x9d\xfa<\xf3\xe6(\xa5\x9e\xd1\x8c\xb4\xb4\x82;/8?~\
+\xe7\xe6\xbf,\xf4/\x02\x8c\xa7b\xb1vn\xecK9\xe7q\xaf\xe9\xbe\xf8K\x84w@{(\
+\x8e\xe57\x00\x80\x90\x86wG-\xbc\xafk\xcf\x0b\x12P\x8c\xf2\xf1\xb5\xa9\xce#9\
+\xb6<H\x16\xe8\xf6\xf1\x1f\xed-\xfcM\xc7@\x81(8~\xf1\xd8\xcf\x08\x16\xc9\x01\
+\xb5\x83\x928\x13\xbd\xe7N\xd4~?\x93I\xc3Z\x0b\xbb\xb9{\xaf\x97\x7f\x88"\x03\
+\x00\x15\x1d\xcfu]\xdf\xf7r\x81\xef\xe5\xf2N\xb88\xd4\xc4TY\x103\xaan*\xf3\
+\x880P6\xa9Z\xc1\xa8\x97)FNe\xb3\xf0\xbd\x8b\xf5/\x8d\'\xb5\x15\x88_\xfb\n\
+\xbd\xf3\xef\x90\xf4\xea_U\xf9\xea\xabyk_\xb1\xe3\x9d\xe1K\xd3D\n\xf7g\xf9\
+\xcc\x87<#\x98\x89\xc9\x0b\xe3\x95?\xb2\xda/\x03\x8c\x0c\x9c\xc9\xf1F\xf9\
+\x93\xeb\xd5\x07\xb8]\x06\x00\x0b\xc0\x1a\xbc\x9a\xf6\xadc\xcb\xceB\xcf\x99;\
+\xbd\xfbo\x1d\xd1\xc8"{\x92\x9a\xdc|\x8cv7H8\xeas\r:\x0f\x1b\x1b\x9bW\xaf^\
+\x1b\xd5p\x1d\xdb>q\xe2Xe\xa2<\xba\xcc\xdd\x8cf\xc59wl\xfb\xe4\xf1c\xb9 \xb8\
+r\xf5\xda>\xf85\x8a\xaa&\xc1ml!\x9d!\xfd\x88e\xd1c\x0b\x0b\x95JYGL\xd4\x1f\
+\xd1u]\x15\xe813\xf0\xe8\x0f4\x9a\x0b\x93\xc6\xc9<\xa2\x90\xbdV\xab\x9f?\xff\
+\xb2q\xcf0\xe5\xf9\xb9\x99\xb9\xd9\x19\x1d\xc0\xc0\x1c\xa8Tm\xa8\xb2PJgg\xa6\
+\x82\xc0\x7f\xe5\xca\xd5~?\xc2\x81\xd9\xf9-.\xa2u\xb5\x10\x00\x00a\x1c\xb6\
+\x9b\xd8\x8d\xa4kwr.XVv\xeas@9\xdc\xe0NF\x04\x00"w\xee\xca\xcc\x8f\x9dY\xfb\
+\xa5npfe\xfe\xc7\xa8\x9b\x0b\x92\x08p`\xb4B=\x1e\x082\xb14\xf1Cg7\xbe@1\x1e2\
+\xd4d\x08\x16X;\x8f\x9du\x08gI\x12\x87HsAb\xebyg\xf7\t3Ccu\xdeFp\xd7J\xe5\
+\x81\xae{L\xd0\xc1\xa6\x01\x88\xd8\x0c\xdf\xb9Y\xfa\xd8t\xfb\x9b\x8b\xb5?\
+\xb0Dwk\xfeG\xba\x8b\x9f\xf3\x1cW9\xbd!\xa2m\xdb\xdc\t\xa3\xfc\x9d\x03\xef\
+\xc3\xe4\xd5\xae\xa8e\x8d\xa5$\xa5\x1fq\xa7\x12\xe5n\xd3\x0b\x0em\xdb\x06\
+\xcf\xb3s9\x11\x86\x90\xcb\x11{\xef%\x91\x19\x8c6\x8a\xa3D\x87\x84Ua\t\x18c\
+\x8d\xf0\xbe\xc5\xfa\x7fH\xf9\xd8df-\x9bO\xca\xf5G\xc9\xdc\xfb3*\xa7\x06\xf7\
+|\xe3\x99\x01:\x9b\xea\xf3 \x05\xe0\xf9\xdbI\xf9\x0e+\r\xee\x83\xb9Z{+\\\xfa\
+\xfd\xe1\xad&\x03\x86\x08\x00\xf5\xc2\xfb6g\x7f\x84\xbaE?yVc\x96\x92\xdd\xfc\
+\xf7xb\xebD\xed\xff#\xb8\xc7>8\xf5\xcbr\xf9k\xe4m\x7fk,\xf6q\xce\xbb\xdd\xee\
+\xa5\xcb\xafH\x99\xa1\x0b\x88eY\'\x8e/NOUm\xdbV\xf1\x1b2\x83\x93\xce\xc3\xc0\
+\xe9\x10\xb1:Y\x89\xa2hum\xe3f\xc9\x07\x1c\xd0\xf1\x19\xc0\x1d$B\x089q|qzjJ\
+\x0f0\x07\t\x14\x83I\xa2#2&cf\xa7`\x8c]\xbbv\xad\xd9j\x99yP2=]=~lQ\xbf\xd4\
+\xac\x10L\xdc"\xcc:\ts\xc1\xb1\xc5\x85W\xae\\\x13B\xbc\x85\t\x19%\xa2\xb7-\
+\xa2F\xc2,b\xde\'L@\xc4\xa0\xd6\x05\xd7\x86\xc0\x05\xc7V$\xe5M\xc8a\x05wb\
+\x84\n\x1a\x13\x84\xda9u\xf5\xd4?\xa5N\xe0\xf9%\xb3\x05\xab\xa7\x86j~\x1c\
+\x13B8\xe7\xad\xdc=m\xef\xf4\x80\x9cA\x1c\xf8\xaai\xb4j^\x95\x9d5+Q\xdf\xd00\
+*\xba\xd7\xff0\xc9Q\xd2\xf82\xd43\xc0v\xf1\xc3\xcb3\x7f\x0f\xed\xd0&\xc46\
+\xb4-)%@yk\xf2\xafS7\x1f\x88\xdd\xf6\xf1\x1f\xf6]\xcfu]\x15\xf2\x85\x10\xa2Z\
+\xb9*\xa3n\xf1B\x08;eW\x19\xf1\x8a!\xc4"\xa0x\x00H\xc0]%\xbb_T\x90\xd1\x8e<\
+\xc2\xbf\xeb\xf0\xaa\xb6!\x91\xbfX\x0b\xee\x9d\xe8==\xd6\x10\n\x84\x00\xc6\
+\xf8\xca\x97`\xee\xfd\xba\xf6Ld\'\x8d\x8bv\xb4n\xf0\xfb\xe9\x04\xa8\xcbf?f;\
+\xae96\xeb\xdd_\xc9\xd2\x7f\xb2{+\xa9\x9c\x0f\xc7f"h\xb0;\xfb\x80\x9b\xafjlU\
+\xaf\x1e8\xf91\xc6\x18\xe3\x9co\x14?9\xd9y\xac\x10]\x1ef@\x8d1\x03\xe1\xb8\
+\xf6\x10\x9cy\x00\x0c\'\x07\x13\xc8vwk\xcb++\xd9\x82\x03LU+\xf3\xf3s:8\x8f\
+\x0e\xabi>nfC5\xdd\xc9\xcaD\xab\xd5N[So\x19\xd4\x06O\xcdLO-\xcc\xcf\xeb\xb00\
+\x99.s\xb0x\xce\xd9\xa1k\xf4\x0e\xad\xb6w\xbb\xdd\xd5\xc1R\xa9\x94\x14\n\xf9\
+\xd3\'O\xe4r9\xd5\x14u\xc0"\xd3E\'S\'R\xcaB>\xacNV66\xb7n\xa9\x06\x0e\x91 k^\
+U\xb5\xac6Yu,p,\xe2\xd9\x10\x0b\x88\x186\xba\xe8X\x10x\xc4\xbd\x19\x88?\xac\
+\xe0\x0e\x896\xa9\x9a\xa9\x8an\xa80QY\x96,\xebDF=15w\xc5\xd1\xd3\xc1\x8e\xe9\
+\x88(\x9b\xfe\xd9b\xff\xbcJ8\xfb\xa6\xb8\x86\xbdMH\x03\x13c\x8c\xb77\n\xdb\
+\x0f\xe9\xdc\x0c\xa1\xd0\x98\xe07\xc3w\xac-\xfcw\x8e\x9b3\xe1)\x99G\xab\xf8\
+\xba\xb4\x1d~?\xf3<\xdf\xf7}\xdfW\xf1T\xd5yU\x1cU@\xa5\xbcs\xce\t!\x84\x9a\
+\xf3\x83\xf4\x9c\x95\x10\x00\xb0,+\x08\x02s\xd7\x02\x15\x05L\xc3\xdc\xd8\xda\
+\x84AthL\xad\xb7\x82\x14\xee\x9b\xb8\xa0j\x95\xd9\xe1V\xf1\xa3\xe5\xde\xb3)3\
+\x80\xa9\xc2#\xe2\xd6S\xc8\xfb\xc4\xd1\x9b\x03\x0e\xc1\xdd\xddz\xd0\x896\xc6\
+\x18\x8a\x01\x00@\xf8\xf3r\xee\xa3n\x82J\x90v\x8d\xcfm=\x02(\xb3/Mr\xdb)\xbe\
+\x9bT\xee\n\xfdPA\x89z\\[h\xa2(R\xe0\xc2\x00\xda\xdem\x85\xfee\x83\xdbI\x19\
+\x87\xb1~Q\xb6\x96h\xe9t\xc6\xc1\\\x8d\xee\xeb\x1b\x1bB\x0c\x1d\r\x11\x90\
+\x00\x04Ap\xf2\xc4\x89\\.\xa7\x03&\x9b\x00jRRq"\x90\xcc\xd5\xaa\xd5\xc9N\xb7\
+\'\xa5L\x9b"oJc\x1b\n\xa5\xe4\xf8\xf1E\x15\x94_\xab84\x11U3\x07\x08\xf1\xb8\
+\xdf\xd5\x8c\xda^\xaf7vvv\x8c\xcc\xa3\xea\xa9\xf3s\xb3\xc5bQE\x0c\xd6\x15\
+\x92\x99Lk\xe3\x99\xaa+u~\xa2\\j4\x9a\xfd(\x1a}\xf3\xad\xd5\xc9\x9bPxgC\xb2\
+\xc1\xda\x08.\x86\xe5\xb2(\x04\x14<\x9b0\x0e}\x8e\xe8VI\x10\x8a\xce\x1a\xc5\
+\x18\xb2:\xe4\x189\xc4\xe0\x0e\x89\x89\xcfq\x1cLxa\x15\xa7T+\x98\x03p\x8f\
+\xb7\xad\xfe.\x15]\xe0]\x88\x1a\x18\xd5e\xd4\x90QS\xb0\xbe\xe0\x91\xe0\\\x08\
+\xe9\xf7\xaf\x00(\x8c\x18\xd8\xf1L\xb7\x16\xecm\xe3\x88#0\xd4^\xa2\xbc=\xb4[\
+\x8e\xf0\xf5\x82\xe6v\xe6~\xd8\x0bKfHt\x9d\x82\x1e\x8dT\x18)\xdf\xf7\x15\x16\
+(XW\xed\xdb\xb6\xed\xc1@\x92\xb4{\x00\xa04Y\xb3:\xde\t\x07m\xdb\xce\xe7\xf3\
+\xe64\\\xe3\xbb\xde\x9bf\\m\x82Q\x16Hu\xe9\xc4\xf6\xa5\x07\x1b\x13\xdf\xbb\
+\xc1\x99\xae\xb3\x18\xb2\xa5TNL\x88o]\x93\xd7\xfe\x98\xdc\xf6\x83\x9a\xd7\
+\x1a,\xbd\x89\xda\xf9\xe6\xf3)dOA<a\x13\xef\xb4\x82\x8a\xb9\xef\xcf\x10\x05z\
+MK\xab\xed$\x9bU\x00\xc0p1\xb4c\x17b\x87\xd8Dj\xcd]r\x10\x0cb\x97\xc4}\x8cl\
+\x19\xc5(\x90\xb8\x03>\x07\x0c\xd3\x85f\xba\xfa\xbb\xd8\xafAI\xd7n\xca\x9f\
+\xa4V\xab\'\x8f\xe9w\x93\xca\xc4D\xa52\xa1?hf\xc2d\xd6\x80\xa9\xd4\xab\x94\
+\xf3a.\x08\xfcN\xa7;\xa2,\xdf\n\x96U*\x95\x89r\xd9\x04w3\xf2\x17M\xefY\xb1\
+\x7fRj2;6\'\x9a\xa4b\x8c\xad\xad\xaf\x0ba.\x97%\x00X,\x14\x8f-.\x98\xa3]\x86\
+\xa72u&\xad\xd4\xab\xf3\xbe\xef\x95\xcb\xc5\x8d\xcdmD9R\'o\tA\xc9ZK`\xa8\xed\
+\x19\xa1\x04<\x07\\\xc7*\xcf\x9f\xb6\xdd\x9c\xe0\x0b\xad\xdaz\xdc^\xb7\xb0;T\
+\xc6\xc6\xc9!\x06wM;\x00\x80\nB\xad\x94\x11\x1d\x94\xdc\xed]q7\x9e\xb4\x1b/\
+\x92\xce5\xd2\xdf\x01\xde\x05\xde\x1d\xae`\x1c\xa7*&g\x8c\n#\x04\x08"\xeb\
+\xe0\x88\x7f\x0em_\x07\x99\xa8\xab\xa3M\r\xb1]\xbe\x1f&\xef\r\xfd\x9c\x198\
+\xd7\xa4\x17\xa5\x94\x9a\x00u]W)5$\xd9/F\rTB\x08\xd7u\xe38V^tB\x08\x92\xd6\
+\x8bM\xf3\xa3:o\xdbv.\x97\xd3L\x94\xee\xc6\xda\x10*G[P\xc6wsL\x9d\x0c\xea\
+\x9c\x1a[89\x8e\xc3\x18\xeb\xbb\x93\xbb\xf9\xf7\x84\xb5\xa5l\xaet\x9a2\xc6K_\
+\x84\xd3\x7f\x1d\xc1F\xc3XGZW\xdc\xce\x15\x03\xd9S\x8fK\xbb\x10\x9f\xfc\xbcg\
+Pj\xfaA\xc6\x18i\x9c\xb7X-y\x0b\x8e\xe6<\xbf\xf5\x17a\xfby\n|X\x00B\x94U\x12\
+\x11\xa5\x14(Q"J\x04\x9b\xd7\x8d\x0f\xa8\x94o\xc3y\x9451n&\x954l\x03\x8c\xb1\
+~\xbf_\xaf7\xd2_\x9fX\x965;;\x13\x04\x81\x9e\x87\x99\x1f\x02\x12,\xd3Z\xb3\
+\x89\xecJ\xf2a\xd8\xedt\xb5\xf7\x95N9\xfb\xc9\x0e \xf3\xb33a\x18\x9a\x90\xaa\
+\xb3\x91\xb6U\xed\x95\xb8\xf6\x10\x00cI4I\xdf1\x1c\xab\xe28\xde\xde\xd9\xd5W\
+\xf4\xa3\x93\x93\x95B\xa1\xa0*d\x94\x1eD\xc3\xb7\xd5\x1a\xb1\x9cK)\xf3\xf9p{\
+g\x87s2\x92\xf2[AX{\x15yOU.\xe3{\x0e\xe1\xb9\xf2\x82\xed\xe6\x00\xc0\xb2\xdd\
+\xf2\xd4q9\xb9\xd0\xdcYa\xed5\x8a\xbd=&wx\x88\xc1\x1d\x0c|\xd7\xde\xb2\x94R\
+\xc1\xfa\xf6\xb5\x7f\xef\xac}\x95v\x96Io=A\xea\xb4\xbf9\x8cp\xca\x19\xed/\
+\xadK\xa2\x88\xcd&\xa8\xc0=\xd7]"(\x8c\x94\xb3\x99\x13\xc5\xb7\x05a!\xb3\x99\
+\x91VRTR\xc4\xb0R\x9a\x03\x80Rm\x14E\xc39W\xcfr\xce\x87\x93h\r\xeb\xa6c\xb8\
+\xe2\xdc-\xea\xfb\xbe\xe9\x90@n\xb85\x81*\xc2@{\x1d\xeb^9\xacsM\xce$\x08e\
+\xd7\xf2\xf7O\xb5\x1f\xf1\xd9\xfa0\xb5\xb4`\xe3\x92\xac_"\xe5;L\x9b\x87S{\
+\xc2\xe6\xbbCd7)&\xc4\xb8\xfc\x0e2qV\xf7v\xd3\x8c\xc9\x18\xa3\xad+D\xf6\x8dR\
+g\x0bd\xc5[\x10m\xa6\xbe&"$\xb0ae\xec\xc6\xfa@\xeb\xa6zr#"\xec\xef`\xe2\x83(\
+\r\xd7\xacv\xa7\xd3\x8f2\x11\xa4\xc1u\xdd\xf9\xb9Y\xc5?\x98\xfb\x9c\x98\xd5\
+\xae\x001\x83\xf8z\xc8/\x16\xf2;;\xbb<\xf1T\xb9%_\x91As,O\x94\xf7\xd9qE\x1f\
+\x9b \x9b\x96\xe1\xa8\xbb\xbf)Uk<\xfd~?\xc3\xc9PJ\xcb\xa5\xe2\xe8\x16}f\x06\
+\xb4\xfd,C^)6\xd2\xf7|\x8b\xda\x1c\xe2\xa4h\x90>8\xc4\x82\x92\xf3\xf6u\x00 \
+\x00\\\x80\xdc\xc3\xe1\x91X\x8e_N\xad\xb7\xa0\xd4R\x10\xdf\xaeo\xc6\xadU\xe0\
+-\x9aL\xe6!\x99\x84\x1fnp\x87\xa4}$-\x838k\x7f\xe6]\xfcw\xb4\xf6\x02(\xff\
+\x87\x0c\xffk\xd6\x9c\t[\xc3\xfe\x0f\x00i\xd0T"\x18\x18\xb8\xac\x9a\xb2\x15\
+\xef\x0c\xe9\x8bq)\xd3\xfc\x82r%\xceXt\xb5\x83\x04&\x86Js\x82\x0c\x89\xb9X\
+\xdb\x00\xd5\x9fC\x95G\xf3m\xa6\xdan\xfc\x12B\xd5Pav\xa1Lw\xca\xca\xb0Q\xc00\
+\xb5\x11"\xdbdfL{F\xe4\x1fk\xbb\xa7|\xb6\x9e\x1a\x18\x0c\xe6\x1a\xfa\x9br\
+\xe5AZz\x9b\xd6\xbeew\xb3\xb0\xf3\x90a\xa80*\x91\x10\x00\xe03\x1f1\xe7\xefZC\
+T\x95\xef\xf7\xb7\xa8d\xa9\xcf4\x8a\xd7F+I\xdd\x90\xfa\xb8\xe3\xac\x0bf\xce\
+\x11\xb1_\xd3\x1f\xcb\x1cc:\x9d\x8e\x1cF\xec\x1a\x0c\x0b\xf90\x17\x86\xa1F\
+\xf6\xb1\x8c\x87:cn\xf8\xa9\x07\x0c\xce\xb9\xe7y\x94R\x10j\xd9\x0e\xdc\x92\
+\x17\xe0 \xfd\xc0\x0f\xd4\x8cPO\x11nH\xbf\xa4E7\x0b]@\xc8\xa0\xaa\xd9)\xe28\
+\x16\\dn\xb3,R.\x97M;\xeah6t\xd7 \x86C\x9a&$=\xcfu\\\'\x1a\xc4BxUS\x997\x9b\
+\xf0\xd6u\x141\x00 \x00\x17{.R\n\xca\xc7\xe8\xb8\xcd\x06(\xb5\x8a\x959\x9c\
+\x98\xed\xb6v:\xb5e\xc2\x1a\x94\x0c\xaa]"=\xf4\xe0\x8e\x89H\xd6%\xcf\xfc\xa2\
+u\xe9wA\xb2=1}\xb4\xdbg\xac\xa0$\xddt\x87\x1ct\xaao\xab\xa6LD\'\x95\xc2P\x08\
+\x00 \xf5\xac\xdc\xa4\x93X\x90L\xd46\x05\x92\x96\x9dQ\xabMeJ\x99\x10\x86z\r\
+\xd9\x83?\x01Pz\x1eI\xf6\xcd\x19\xab\xa6\xe1\xd8\xa8 \xc4\x98\x82g\xa8\x95q\
+\xfdP\xb3I\xaa\xc7r\xcew\xf3\xdf3\xd1}\xca\xc2\xfe\xf8\xbc\xa1\xc4\xeb_\xc5\
+\xdb\xfe\xa6\xa4\xa1\x022\xe8\xac\xf8\xed\x0b#U7\x10\x1e\x1c\x13s\x1fw\x8cR\
+\x98|\x8e\x10\x02D\x0f \xb5\x96x\xa4&n\x14OF\xd7X\x06\xfa3\xf7# \xef\xe9\xaa\
+KaY\x14\x8fB\xcc(\xc1=6wz\xd2i\x8e\x94\x8e\xe3\xc4ql\xdb\x19\x0b\xe7x\xa6\
+\xfb\x86B)u=\xd7N\x13\xdc7)Dc\xbaQ\x9dYZF\x8fv\x9cs\x89\xd2xVe\xc3*\x14\n\
+\xda\xac\xbdO6\xf4\x98\'\xa5\xd4\x15\xa2<n\x8d8\rp\xcb\x15\xf2f\x13\x141\xeb\
+\xac\xaa\xe3}\xd4v\xea\xf8~qa\x9ft\x08!a\xb1\x1a\x16\xab\xad\xdd\xe5\xf6\xd6\
+%\x8b\xaa\xedX\xf1\xd0\xc7\x96\x19\xd8\'\xfb-|\xe2\xe7\xe8\xc5\xdf\x02\xc9\
+\xf4\xb5\xe4\xc0\x98e\x13\x9394\xd6\xcb`\x1a&R\xeb/\x10\x06\x11b\x86\xb4\x8c\
+"U@&4\xb1\xa9\xf7\r)\x02b\xba\xc1\x11cy\xa7f\xc05\xf1::eN\xf2\xb8\xb7\xd2M\
+\x92\xf6\x9d\xca|J\xcf;\x00\xa9\xaa\x8b\x9c\x19\xd5\xcc\xe3,R\x9b\xf9\xd7@\
+\xd6\xc8\xbf\xa7\xeb\x1e\x1f\xa32c\x12`\xa7~N\xec\xbc\x94L\xe1\x99S\x7f\x8eh\
+\x9fN}O"\xd1\xec\xc7\xad\xdcd\x06\x1fM`\x1dD\xa3%\t]\x80FUh\x95\xdc\xac\x1cb\
+Lw\x00\xb2\x9fl4\x05\x93\x90\x10\x91\x1eeS\xb37az\xc7\x0fpp\xff\x0f:*#\x1c\
+\x97eYv\xfaA\xa387#z\x8c\xbfUd\x07\x93\xdd\x1e\x9b\x82\xd6Q4\xa7\x848\x1a%\
+\x98z\x9e{\xc0\n\xd1S\xc3L\x9dPJ\x8c6z\x8b\x15\xf2f\x13\xd6Z\x02\xc9\x01\x00\
+\x11\xc4\xdej{n\xe2\xa4\n!yC\x89:\xdb\x02\x95\xf7$0~\x98\xc1\xdd\x98\xbb\xc5\
+\xf2\xe5\xff\x87^\xfe\xbdTO\x1e\xf6^\x04b\xf2\xaaC\x10Aj#\xb1\x91XHl\x04\x9a\
+\xed\xd8\x00@4\x10\xa4\xfa\xf6\x00\xe2\xa9\xa3\t\xe2\xe4\xb6a\xe6\x082*\xfbc\
+]\xcb3\xaa\xfa~T\xf8\xbe\xe5\x1f\x84\xe9%i\xe4\xdaG\x99\xdd7\xb9\xc1\xe3&w\
+\x01\x06z\x8ed>C\xceP\xdbk\x04w\x03\x8c\xe4D\xa7\x13\xd5q\xe3\xf1\x81%\xb9\
+\xb7\x9b\xdf\xfc\xb3\xc1y]\xe7I)\x90\xd8b\xfa\xfd\xa3\xc8\x9e\xaa\x7f\xe2$cv\
+\xfa-\x90\x8c\xe5D\xd3V\xe3h"H\x06\xe6\x8c\x98__\x8f\xd3\xc6mf\x1eFjz0\xc388\
+\xb2\xeb\xa1\xd7\xb4x\x9b\x1a\x88!\x07\xf9\xac\xa9{\x08\x01J^\xddf\xa7\xd9w\
+\xe2\xd8l\x98ub\xc4"\x1c\x18p\xd4\xe5\x837\xf2L\x85\x0c\xb8J\x04\xd8\x83\xf7\
+?\xa4\x82\xbc\xc7;k\xeaX\xa9\xedc\xc5\xf6\x8b^\xfe@\xa1\xa7Yg\xc3\xc3z)\x80r\
+\x0e\\\x07Z\xfdC\xa9\x1f\xbd\xcf\x00\x00 \x00IDAT\xcb\xb9\xeb\xc6\xc4\x18\
+\xe3\xb5\x97\xdd\xf3\xbf\t0\xc2\'\x98g\x00\x81\x90\xd8\x99\xeaz\'\xfb\xeellW\
+\x19\xcd\x0b\xe2!\x10\xb5\xfc\xbe\xd2}b\xa6\xfd`r\xb3\x16m\xdf\x1b\xbc\x14\
+\xcc\xe9\x02-&\xf7\xa7\xb4\xe5A\x06$\xa7\xfd\xcd\xfd\x89\xce[\xefu\xfaE@\x86\
+\x8e\x9b\xfb\x91\x0f\x07H-C\xe5+A\xcd\xd8ds>\xa2oZ[\xa5\xef\x9dj}\xc3\x13\
+\xbb\xa9[\xcd\xf9\xfc\xb5?\x14\xf3\x9faP&\xedk^\xef\x95\xd4\xcc\xc9\x80\xd4\
+\xa8z?T\xde\x911T\xe8jW\x07\xcc*!\xb5\x87+K\xb3$\x92\x19\xac\xcd\xa0\xe62\
+\xdcz\x16\xdf1uF\'\xc8\xba&\x93&\x93\xe0\x01\xb6e\xa5)\x02\x02\x00\xfd(:\xe8\
+l\xc9\xa8Lj\x08$-\xed\xe6%\xf3\xc6\x9b\xcb\xc6\x1e\t\x9a\xcd{\x0c\xbc\x9au\
+\x02@(!\xe9gAJ\xa9\xeb\xe4@\xafL\x0fxjT`\xd9\xb0h\x87\x9e\x93\x89\x9b\xd7\
+\x00%\x00H\xdc\x8fm\xcfM\x9c<P\x8fF\xc1[W\xf56*\x94@\xc1\'\x87\x12\xdc\x87\
+\xf0\xaaV\x99^\xf9#\x1am\xa7\xd0-\xc3$\x10R\x0f\xee\xdd,\x7f\xb2\xef\xccr\
+\xa7,hh\xa6\xa3\xc4\xe3\xdb\x00\x0f\xea\xfbS`\x91`:\xa4{]\xdf[@b\r\xb8\x85\
+\xcc\x88\x82\x08\x84\xd0\xf6U@I^\x8fJ\xd6\x86_0\xbb^\x9a\x88\xb8e\xd9\x07\
+\xef\x06\xd7\x87}\xcf\xf4\x89\x8c\xbc\x99\x9d\xf0}\xf3\xcd\xaf\x0c\xb2\x91\
+\xe1\xb2\t!\xadW`\xfb\x19^\xfe\xa0\xbb\xfb\xf8\xe0R\x06\xdf\t\x01\x80x\xe1\
+\xfb,7\xb7\x97\xae\xa7\xbeW\xe4\xce\t\xea\xdb\xbc5\xac\x84t\xa1k\xb9{\xeb\
+\xe1\xbb,dc\xf5\xcf\xd1/\xabqLm\xbb<\xf0O\xf5<\xcf\xa6\xd6\xfc\xfb\xf5\xacX\
+\xb3s\x88\xe8z.\xa54\x13{\xa0\xddn3\xc6nj\xdbkM\xbb\xa9"G1\x1b\xf1U\xc5QT=x\
+\xca\xb7.\x04\xd2\xef\x1d\x9f\r\xdd5\x08\x01\x9aZ"G\x00@H\xd9h4\x17\xe6\xe7o\
+\xe2\xb5\x86PJ\x95\xa96\xc9\xc1@\x979\xd4\xf8\x8e\x92\x8b\xfe@\x07\xe2b\xcf\
+\xaf\xeb\xe4*N\xee\x06\xbb\x10+a\xade\xc9z\x00@\x08p\x01\x88\xe0\xda\x87Vs\
+\xd7\xc6\xf4(\x8a\xc2\xc1\x16\x19\x98a\x9c\x13\xa8\x85\x95\xca\x03\x9b\x95\
+\xef\x93VN\xd9\x95\x94\x1b\x9c9\x97\x14BP\x10)Nf\xf4wDbg\x1a\x91\x12\xf5\xa0\
+\x16\x93~Y\xfeS\xb8\xe3o\xc3\xe4\xd91\x0f\xbfZ1|\xc33^\xde\x84\x10\xd1\xbb\
+\xf9\xf4F\xbaJ\x86\xa1J\x8b9q\xd6\xfa;c\xac^x\xdf|\xe3+C&d\xf4\xc1\xed\'Epo\
+\xb8\xfdu\x9dP\xe6\x06\x1e,@\xf9\x0e\xd3\x07|\xac\xf4\x83\x93\x9c\xe4m\x92,"\
+#\x06\x12!\x02!\xdc)o\x95?u\xe3\x82\x0f\x8b;\xa8\x01\x9a\x04l\xf0}?\x0cC\x12\
+\x86\xbe\xef\x8f\xbd\xd3u\\\xd7q\xfb\xe9\xdd\xe3z\xbd\xfe\xfa\xfa\xc6m\xb7\
+\x9d>\xe0{5\xb2\xeb\x83f\xb3)D&\xc4\xe3\xadc\xf4\xab\xc5\xf7tb\x99\xbf\xb5S\
+\x80~\x97\xe3:\xd0K5?!Dk\x10j\xe6\x16%\x8a"]!o\x8d\x08b\xbc\xb3\xaa\xac\x83r\
+\x1f\xb6\x9d\x90\\\xe5@\xad\x08E\xc4Z\x03\x7fJD\xd0{\n\x1c>p\xcf\xa8\xedQ\
+\x14\xe5{\xca\xbd:\xbb\n_I#\xbco{\xe6\x01\xdb\xf6\xf4\xdak\x92\x80\xbb\xf6\
+\xcf%\x848\xb2=\x86\xd5\x81,\xfa\x98]\xa5\xef- \xb1\x01\xb3\xbb\xda\xeb\x14H\
+o\x03/\xfe.\xbc\xefg\xe1F\x1b\xfa\xdc\xb4\x0c\xd5\xe1\xc1\xff\xa9yF\xb4\xbd\
+\xf7\x93{\'\x88\x90\x19$\x00\xc6\x81\xfe\xe0\xf6\x81V\x95\xf1\x89\xec\xf8g\
+\x1a\xc1]\xa5\xfe\x8b\x00i=/\xc9\x9b\xbb\xf5P@+n\xb42\xccm\x9ac\x8e\xa6>BK\
+\xa7\xc6\xda*\xccWs\xab\x18;U\x9f\xaf\x0f\x07\xb9\xf4\xd7/u_,\xc8\x8d\xc8\
+\x1f\x1f\x8d}T\xa8\x8c$\xf5T\xfa\xf6H\xdc\x95\x8c\xc9D\x1dX\x16\r\xc3\\\xc6\
+\xd5\x9ds~}e\xe5\xe0\xe0nr}\x00 \xa5\xac\xd7\x9b\xa3\xb4\xcc\x81\x03\x8a\x0c\
++\x02\xf7\xa0\xc8_\x85dU\xcc\xd1\x0f\x94\x0fC#\x14\xfb\xe0\xfe\x8d\x8dM\xb5@\
+\xe9\xd6\xde\xdah\xb6F\xf6\xb7\xba\xc5\xa9\xcc\x9bAP2\xde\x1e\xc4#\xe2|\xcf\
+\x92x\xf9i\xdb\xcb\x1f$A\xd6\xbc\x8a\x92\x03\x00\x10\xe0|\xe8us(\r\xaa\x86)\
+\x95\xc5ql\xb1\xdd\xf1\xf7\x11\x02\x844\xa7>\xe3\xe7\n\xb9\\.\x97\xcb\xe5\
+\xd3\x92\xcb\xe5\x82 p]\xd7\xb6\xadR\xff\\V\x01\x1f\xd0\x05\xa0z\x88\xa9[)\
+\x89\xbd\x85Vpg\xf6\x8d\xe61"\\\xf8\x1dq\xee\xb7\xf6\xda\x8dH\x89\\{H^\xff\
+\xf3[\xae\x8b\xec8D\x80t\xd7\xa1\xb7y\xd3\xe9\x8c\x15\x93\x8b\xcf^I\x99U\x07\
+~A\xb6\xbbY\xfaxr\xff\x98\t\x8d\xd5[-/\xfd6An\x189\x93;\x11$\r\xc4\xf4\x07\
+\xc6:x\x90\x11i\x07\xb7gk\xc0(\x8b\xcb6\xa7;\x0f\x05A\x10\x04A.-\xc1\x88L\
+\xb2\x0b\xa7\xd6\x7f\xad\x0c\x9b\xeaf\x1d\xe7G\xe3\xbb\x99\r\x00\xd0\x88\x9f\
+\xcb\x05\xd9\x92\x02\xac\xae\xae\x8d\xdbFuO1\xf1}w\xb7\xd6\xed\x99\xcf\x92$\
+\xd6\xcf\x01\xb1\xcc\x18\x84^{\x0b\xe4~\xa6#U!\xa5b\x81\x90\x94\x11\x02\x00\
+\xb6\xb6w\xae^[:\xf8kL\xbe4\x8a\xe2\xcd\xad\xed\xf4hw\x88\x91\x1d\x00X\xe2\
+\xdb.\x10\x84\x1c\xaf\xb6\x13j\x07\x13\xa7\x0e\x92\x9a\x8c[\xbc\xb3\x0e\x00\
+\x84(\xfa~X5\x87\x12\xdc\xcd\x95\x8a\x8c1\x82\xa3\xee\x8f\xc3\x0eo\x853a\x18\
+\x86ah\xc2z\x18\x86\xaa\x93\xabUs\xe5\xeesa\xff\xf2\xe0A2\x82e\x98\xd2\xda\
+\x88\xb1\x94nK\x03\xd9xe\x9f\x00\x01\xf9\xc4?\xe7\x8f\xfd\x1c6\xaf\x0c\xd3\
+\xd3\xa69\xc1\xc5+\x7f$\x1e\xfcI\xfe\xf5\x7f \xae}\xe5\xa6+"\xe5\xb4\x97\xd8\
+B\x81\x90h\x1b\x96or\xb4H\xd9c\r\x9dOy\x8c\xecK\xce\x8c\x84\x9a\xb9=\xb6+\
+\xa94u\xf6\x08\x01D*\xfb\xc3\x93)\x8f\x14\xe4\xc5;I\xe5\xae\xbd\\\t3\x86\xc7\
+\x9d\xd2\xc7\x98U2\x86a\xa3\xfe\x11\x81\x90\xc9\x8d?\x98j?\x9c\xdfCT\xab\xc8\
+\xe5re\xb92w\xfdW\x0b\xf5\x87\x17_\xf9\xd9\xe9\xd6\xd7\xc30\x17\x86\xa1\x8e\
+\x1f`\xae\xda7\x91]\xfd\x16\x0b\x05\xdb\xb23XS\xaf7\x1e{\xe2\xa911\x1e\xf6\
+\x10M\x0f\xf6\xa3\xe8\xca\xb5k\xc6n\xa8\xf8j\x80\xec\xb5\xd0\xdco\xfcxF\xe3\
+\xf1}/\x1f\xe62yf\x8c\x9d;\x7f!\xbd#\xeb\xde\xafL\x86:U\'\xcb\xcb+\xedvf\xa4\
+$\x07\xcc\xdb\x9bPPDC\'\x19\xbe\xa7q\xcc/-X\x8e\xbf\xc7\xc5\x94\xc4\x8dW\xf4\
+\xc8\xa7\xe6\x01Z\x0e1-\xa3I\x15\x03\x86\x0c\x98#\x833\x85\xde\x8b,\xf7\x01\
+\xa5\x82\x99\xde\x17jM\xbf\x94\xd2g\x1bS\xeb\xbfC \x1d\xd4ph\xb1LQ\x8a\x19|i\
+\x87w\xf7\xdc\xf9\x80\xad\xa9\xcb\x19\xaf\x0f\x9d\xa0<\xf7\x7f\xe3\xda\xc3d\
+\xfa=d\xe6{\xa0t\x1b8\x05d]\xac\x9d\xc3\x95\xaf\xc1\xf5?\x03\x11\x01\x80x\
+\xe4\x1f\x13\xcb\xa3\x8b\x1f;@\x1dX\x03\x83R\n\xfb\x8cc\xd6\x83\x17~UR\x9b\
+\xbe\xeds`\x19\x9bR\xb2\x8e\\\xfd&T\xdf\t\xde\xd4\x98TM\x0f\x19\xc0\xa1\xc9j\
+O\x9d~\xe8\xb3o\xba\xcdD\xee\xd4z\xf1\x13\xc7\xd5v"\x19|\x1f%\xf1\r\xfd\x1d-\
+7\x9e\xf9^\x1aT\xf6B\xf6L\xfd\xf7\xdc\x99\xed\xfc\x07\xe7\xea_\x1e&\x95r\x91\
+\x02 r\xe2\xf2\xaf\x04V\x14\x9f\xfa\xe1L\xe6\xb5\xd7\x8d\xb3\xf6\xe7\xe1\xc5\
+_\xb5\xfak\x00h\xf7\xd7\'.\xfe|\xd8\xbb\x14\xbf\xfd\'\x88_P\xe5\xcaL#\xcc\
+\xc5\n\x94\xd2 \xf0\'\xb31i\x11\x80\\|\xf9\xe5\xa9\xea\xe4;\xee\xb9{|\xdd\
+\xe9[\r\x0f\x1c\xce\xf9\xb9s\x17j\xf5\x06I\xf9\xa8\xdc\x02e>|\xf6Uk\xb8\x07z\
+\xdc\xec\x11\xb6m\x17\x8b\x85V\xbb\x93\x19\x96\x96\x97W\x9e~\xe6\xd9\xf7}\
+\xcf{\x0fb\x03\xd0\xbd{kk{iy99\x8d\x06\xac\xbf\xe6\x93\x92\xef\x90\xc4\x8d+\
+\xca\xb7\x9dK\x10r\x8fUK\xb6\x1f\x94\x16\x0f\x92\x1a\xefn\x8a~\r\x00\x08\x01\
+1\x92\xe0\xe1\x03w%z!\x89\x94\x92[%G\xd4\x86\xd7R|4\xe4\x97\xbf\x18\xcf\xdfO\
+\xe7\xdeo\xce\xaf\xd5X\'\x84\x08v\x1e\xae\\\xfcuW\x87\x84\x844\x1eA\xaas\x91\
+\xf4\x12$\xcb\xb2b+\xb7T\xf9[wl\xfc\xd2 \xf6\xac\x89\x8f\x86\xfa\x0e\x88X?\
+\x8f\xb5sp\xf9\x8b\xe0U\xc0\xf6\x81G\xd0\xdf\x02i\xe82\xfd\x1a\x7f\xf8\xa7\
+\xec\x0f\xfe\x12]\xf8\xc8hy\xcd.!,_P\xcf\xd2VS\xd3gF\x1f\xf76\xe5\xe3?\xc3\
+\xae|\t\xc2yby\x88\x12X\x17:\xd7\xb1\xbdl}\xea\xffE\xb7:\xbeZM\xdf\x15\x1d?k\
+_\xdf\x1b\xdd\xa55\xf3\xce\xb9\xdd\x08\xefc\xcd?ux\xb2\xe7u&}\xf3\xd80\x87\n\
+wZ,|\xca\x1fgJ\xd5\xb0\xaek^\xbdw\xb3\xf4\xf1\xc9\xf6#\xae\xa8\xa529H\x13\
+\x01\x81\xb0Fp\xee\xff\xf4v\x1f\x93\x8b\x9f\x96s\x1f\x05\xaf\x92\xcc\xf6\xeb\
+\xb0\xfe\xb0\xbd\xfag\xf6\xc6\xc3D\xf6\x00\x92\xf9\x19A\xf7\xfa\x1f8\x9dW\
+\xe4;\xfe\x072\xfb~\x8dY\xa6~\x9a\xc9\xc6\xc4Di\xb7V3\xd4m\x02\x00\x82\x8bG\
+\xbf\xfd\x18c\xec\xdd\xf7\xbdk\xaf\xaa\xd3$\xbb\x10\xa2\xd7\xeb=\xf5\xf4\xb3\
+K\xd7\x973\xc8>\xbc\xf9&\x14U\x92\xfa\xe7\xf5\x14s\xc4\xd5\x1f\xa5\\.\xed\
+\xee\xd6{\xfd\x94)\x02\x11\x9fy\xf6y\xd7\xf5\xee{\xd7;\xf7I\xd0\xd4\xdb666\
+\x9f~\xe6\xb9\xd1M\xba\xc7\xae\xcc>\x14"\xfa\xbb\xa2\xbb\x01\x00\x08\xc0\xf7\
+\x8e\x11\x16Vo\'\x07\xb0\xd2\xa1\x8c\xe3\xfa%H\xf4X6\xb2\xdf\xcc\xa1\x04ws\
+\xe2\x86\x88\xb1;\xe5\xf4j{\x81\x08\x89k\xde\x13?\rw\xfcWt\xfeC\xa4t\x06,\
+\x0fYW\xb6\xae\xd3\x9d\x97\xfc\x95\xaf\xdbk\x7f9\xe8\xdb0\xc2\x98\x03\x98\
+\x9a`\xa6ck\xe7\xeef\xfe\xde\xad\xf6\xfdS\xed\x87G\x00=\xfd\xa7\x12\xd1\x87\
+\xee\xea\xf8R\x11\x02\xbd-\xfe\xc8\xffd\x7f\xf8W\xe8\xcc{\xf7)>\xb7+\xb1=\
+\x19\xc81{D\xa4\xca.b\xdc|\x0c\x90\x0c\xf8l\x85wV\x00t\\\xbbA\x84\xd1\xa9\
+\x8f6\xd5\xee!\xaaNT=\x98>\x91\xb17\xdf\xf4\xef\x9c\xec<6L\\\x97qlV\x01\x00\
+\x91\x17\xef\xa4\xe1\xac5.\xd2\x96~\x9d9Q\xb0,+\xf2\xe6W\xca?pj\xe7\xb7\xc7\
+\xa4?\x8cA\xc6\xe9\xfa\x83t\xf3Q\x08\xfe\x15\xe6\x8f\x83\x9d\x07\xd6\x82\xf6\
+2D;\x03\xb7\xa2\xcc\xfa\x00D\xb2\xfb\x8c\xf5\xc8O\x92w\xfe#z\xfb\x0f\x13\x9a\
+\r\xd1\xa3\xf3\xa0\n\x9e\x0b\x82\xa9\xea\xe4\xeaZv\x87\x8a8f\xdf~\xec\x89\
+\xddZ\xfd\xae\xb3w\xce\xcd\xcdf\x8a\xa3\x91\x9d1v\xe5\xea\xd5\x17^8\xb7\xb9\
+\xa5\xd4\xffQ\x1eFY\xba\xdfp@\x1bO\x10\x8d\x8ev\xbe\xe7U*\xe5\x95\xd5\xf5\
+\xcc#\x9c\xf3G\xbf\xfd\xedN\xa7\xfd\xae{\xdf\x99\xcf\x8f1\x15\xeaIL\x1c\xc7\
+\x17.\xbe\xfc\xdc\xf3/\xf6R\x8e7\xdf\xb9A\xebu\x12\xd6\xbc\xa6\x0e\xa4\xdc3\
+\xd8\x80\x13L\xb8\xe1\xe4\xc1R[R\xdc}\xc6\x8e\xaa\xe5P\x82;\x18\xeeh\x88\xd8\
+\xf6\xef\x08\xbb\x17\xc6`\x90\xc6\x8e\xfe\x0e<\xfb\x05\xf9\xc2\xaf\x80?\x05v\
+\x08\xbc\x03\xbdm\x1b\x19\x98K\xa5M\xa0\xd9\x17\xce\xac\xf4VD\x9c{\xcb\x13?\
+\x14\xb0\xd5||5\x95T\x863\xc1\x11\x85#\x0b\xa6\x04\x10\xa1\xbd,\x1e\xf9i\xf8\
+\xc0\x17\xe8\xf4}c\xdfN\x08\x89\xbd\x99\xc8\x99\r\xe2\x95\xf1\xa9\x99\x13\
+\x17L\xb8\x15\xcdTPg\xbc&\xae]V\xc6[\x1d\xf6\xd42L|\x1f\xd6\x89\x93\xdb\xc9\
+\xdf_\xe9>E\x90\x8fB\xe7\xd8/%\xad0>\xfe\x83\xce\xde\xdb\x89\xe8\xc15\x13\
+\xd3f\xbb\xf0\xa10\xba<\xddzp$\xe54\x18\x89\x08:+\xa4\x93T\x9a9\xde\x8cU\x0b\
+\xa2\x1a>\xfe\xcf\xb0\xb3B\xdf\xfbOL\\\xa6\xe3BGLV*\x9dN\xb7\xd1le^*\xa5\xb8\
+p\xe1\xe2\xa5K\x97\x8f\x1f[<u\xead\xa1P\xf0=\xcfq\x1d\x94\x18\xc7q\xb7\xd7\
+\xdb\xdd\xdd\xbd\xfc\xca\x95\xad\x94\xc1P\r!\x06\x9b\xf5f\x81326/d\xc4\xae\
+\xce\x18\x9b\xacL\xb4\xda\xedf\xb3\x9d\xb9YJ|\xf6\xb9\x17\xae\\\xb9v\xcf=w-.\
+,\x14\ny\x1dvI"\xb28\xeet\xbb\x9b\x1b\x9b\xe7.\\\\_\xdf\xb8\xd5\x95\\oR\xe1\
+\xddM\x197\x01\x00\x01\x98\xd8\xa3h\x84\x04\x95\x93\x07I\r%\x17\xddM\x18gG\
+\xd5rX\xc1\xdd\x94\x9d\xd2\x87\'\x1b_\xb3E\xc6\x97\xd1 \xc1\x11\x80 \x88\x18\
+\xda\xcb)f6\x03\xe8\x19\x18\xd2\xc7I#\xd3\xb4\x8c\x9dD`W{\x0b\xc4\xfe\xfc\
+\xd5\xca\x7fq\xfb\xf6\xaf{|{\xc0\t@B\x0e\x80\x81\xb9C\xcep\xe4E\xc6\xeb\xb0~\
+I<\xfcS\xf0\xe1_\xa6\x93w\xa7/\x0e\x04\x89\xdb\xf1N\x95;O%N&\xc9"{Hc\x96\xf6\
+BI\xbf(YL8"\xe3\xac\x05\x07\x99\x01\xd3\x91P\x04\x96euroo;\'\n\xf1\xe5\xe1}&\
+\xe73$\x7f\x069\x14\xe1q\x9c\xb9\x7f\x1f\x0fHH\x03\xab\xaa|\xce\xb9p\xc2\xeb\
+\x95\xcf;\xbc1\xd1\x7fn\xfcz\xda\x14\x11?2\x87\x18{F\x1d\x17N\x90\x85\xac\t\
+\x84\x18\xab\xb7t\x1e\x1c\xc7^X\x98\x13R\x1a\xa6\xbf!/,\x84\xb8r\xf5\xea\x95\
+\xab\xd7\xd4\xe3\xb6c\x01\x12\xc6\xc6\x04\x1dSR*\x15\xfa\xfd~\x14)7\x81=\xd7\
+.\xbe\x11\xa2)\xef\xe4oc:kj<R\xca\xb9\x99\x998f\xfd\xfe\xe8\x0eJ\xd0l5\x1f~\
+\xe4[\x00d\xb2R\xa9LV\xc2\\\x8e\x10\x88\xe2\xb8Qolnm3\x96\xf5-&\x04\t\xb1\
+\xa4\x14F\x8d\x1d6\xdcG\xc9Z\x03\xb5]\xed\xc81\xf6\xb3\xba\xe1\x94\xe3\x97\
+\xc6]\xc9\n\xef\xac\xa1\x88U"{\xf9S\x1eJo\x190Z\x15\xa54\xf2\x8e\xad\x97>=\
+\xb8\xa0\x9dFR\xe6\xa8\x94Z4T\xd6\x92\xfa\x104h\x04w\x0f\x11G\'e\x92\x15\xc9\
+{5\xb8\xa8\xee\xadL\xb5\xed\xdc\xd9\x97\xab?\xd6\xb3\xe7R\x13h\x92\x01\x914\
+\x8e`\xc2\x97@\x16\x7f\xb1\xf1\xb2\xf8\xc6?\xc4d\r\x9b\xc9l\xaa\xdf\x9d\xf2\
+\xc7\xba\xce|\xd6~h\xe4rx\xa0\xdf\x95\xa8\xe4*\xd8\xc7\xf8j\xddk\xd4\xd9[\
+\xc6vo\xcb\xb2\x84Sn\x05g\x87\xa5\xd3\xa3lf\xc0H\xea<\x9e\xfe\xf0\xa8\xf5r\
+\xec\x8b\xf4(\xa2w(\x15\xee\xe4\xe5\xa9\xffz7w_\xda\xf002Hg*$95v8\xc7\xe2i\
+\xbc\xff\x0b0{\xff^y\xb0\x8dP\x8e\x96ey\xae{lq>\xcc\xe5\x86\xc9\xa6?\t\x0c\
+\xd2E\x16s\xc6\xd8(P\x02 \x00\x86anvf\xda\x98\xbb\x10\xcc\xde\xf6FI\xba\x13\
+\xe9?\xd2\xdfEo\xc7\x91\xcb\x05\xc7\x16\xe6]g,w<\x18\xf6vvw_~\xf9\xd23\xcf>\
+\xf7\xf43\xcf\xbe\xf4\xd2\xf9\x95\xd5\xb5\x11dG\x00\x98(O\x14\x0b\xf9t\xabx3\
+\ry\x07\x10\xdeYG\xd6\x85\xfd\xd9vBs\x95S\x07I\re\xcc\x9a\x03\xd7R\xb9\x8fa\
+\xf6\x96\xb2\xfa\x06K\xc6e\x85X\xcef\xe9S\xbb\xe1{\xd5\xb5\xe1\xaf\xa1\x18\
+\x0e\xbd\xee\xcc\xe9n\xe2\xc1}\xbd\xf2\xb9\xed\xdc{\x07\x8fd\x94\xd64Ga*nj\
+\xff\x01\r1\xed\xdc\xd9\x0b\xd3?\xb1\x1b\xbc+;<$O\x0e\x95\xeb\x94\x0e\x0b\
+\xd9\x9b\xd5\xf9\x85\x8f\x9a\xe4\xb8i\xcb\xa5\x94rwj\xb9\xf2\x80\xa0\xfe\xf0\
+YS#\xceHz\x82"\xf7\x8aQ\x04\x06\x08\x1a\x83\xc1\xfe\x06U\x9d\xbdQ\xe5}\xab\
+\xf4\xf1\xbe3\x95\x86\xdaq\x0b\xc4\x10\x857\xc9\x8f\xff\r\xcb\x88h\xbf\xff\
+\x8b\xf4\xc6UzON\xe1V/O\xfe\xe8Z\xe1\x93\x98i\xd2\x9ak\xd2\xa3\xfe\xe0\xed&y\
+\x95\xcdU<\xfd\xe1\xe8=\xbf \'\xee\xc9\xac\xc0\x1c\xcd\x83\xb9)\x87\xefy\'N,\
+NV&\xf4\x88\xad_\x9f\xfc\x8e\xed\x83C\xd0\x0cs\xa1\x02D\xc3\x8b\x12o\xd9]\
+\xfd\xb5]\xc4dTC6M=\xb4k\x8dG5\x800\xcc\x9d8q\xcc\xf7=\xd8O\xd2\x9f#\x9b8)\
+\x14\xc2\x99\xe9\xaam\xdb\x88\xa3W\x0f\x87\xa0\xe4\xac=\xf0\xf9\xd9\'\xb4\
+\xaf_Z\xb0\x92}\x86\xf7\x17\xd6\xb8\xa6\xc3\xdf2\xb1g\xa5\x1c>ZF\xab\xb1\xa6\
+Q\x8b\xbb\x13\x97\xab\x7f\x8f\xef\xf8\xd3\x9d\x87\xb2\xe8lB^\xca\r\x06\x00@R\
+o\xa5\xf2C\xeb\xc5O\xce\xd4\x137s\xd5\x86L\xd2F\xdbf\x13\x93\x9an\xca\xdacG\
+\xdd\xd0\xf7\x8f_\x9a\xfa\xfb\xd5\xf6\xc3\x0b\xcd\xafxlk\x08\x19Y"\xc8\xa0SF\
+\xb8~Y8\x8dw\xff\xa4}\xea\xaf\xa1\xed@\xb2_\x8f\x1e\xc9\xb4\xd9\xaa^x\xdfe\
+\x11\x9f\xde\xf9\xb7\xb6\xec$/J\x05\xc31\x12\x1f\x8eR\x03\xb5},^g\xb4l\xb3\
+\x0e\xf7\xd5\xe5\xf7R\xde#o\xae\xed\xbf\xcdo\xa7\xb7\xae7K\x9d\xe43\x9a\xfe\
+\x18\xcd\xcf\xef\xcf\xc9@2\xc2!\xa2\xae|s\xdb\x13\x0e\x95k\xd5\x1f\xa9\x07\
+\xf7,4\xbe\\\x8c.\x0e\xbfrfn4\x96aO\n.\xecR\xe3\xd8\xdf\x16\'\x7f0(L[\t\x7f\
+\x85F\x04|\x9d\x07\xcb\xb2\xcc\x06\xa0\xee\xf4=\xef\xd8\xe2|\xa1\x90\xdf\xd8\
+\xd8J\xdcE\x12vn|\x8f\x1e*\xf8\xd3S\xd5\x99\x99)\x8bR\xce3\x91\x84!I\xe7\xe6\
+\xe4\xb5X\xc4\x84:\xe7\xfb|\x14Hb6(\x8d\xc7\xac\x930\x17\x9c>y|s{g{{\x8f\x95\
+\x86\xd9\x1c\xa6\xfe\x9c\xaaNNOU)%I\x17;\x94\xb4\x0co\xaf\xa8-\x01\x10@\xec\
+\xc1\xb6\x13\xcb\t\xca\x07ZM-Y\x87w\xd6\x01\x08\x10\xe4bO\xb5\x9dX\xee\xe1\
+\x03w0\xd4g\xd5\xc9\xd5^\\\xb1[\xbe2\xf5\xa3m\xef\xe4|\xf3\xcf}\xbe\x010\xd6\
+\xb0\x99\x08"\x10\xd2\xf1\xcf\xacU\x1f\xa8\x05\xef \x12-\xbd\x12\x8a\xc0\x10\
+\ru"\xc9\x12S\xb3)\xeb\xd8\xbff\xc68)n\x94>\xdd\x08\xee\x99j?Tm\x7f\xcb\x17\
+\xc6No\xc3\x03b\x8c\x1f\xc3\x87\xb9[\xed\xcf~\x1aO\x7f\xce\x9d\xbc\x9d"\xd0\
+\x11L\xd1l\x00cL\x08\xb1[\xfc@lW\x16\xeb\xff\xa1\xdc\x7f1\xd5\xdc\xb3\xd0l\\\
+\xe1}\xe5f\x9b\xaaO\x14\xa0\xf6\x0bTw\x8fN\x02P\x8c\x1f\x0f\xc6}\x11\xc3\'\
+\x92\xef\x84\xef\xabt\x1e\xa72\xcabk\x1a\xdf\xf9\xcc\x87\x9c\x1b\x05\x93\xd1\
+\xa2gN\x1a\xd6\x15\xb0\x12B8\'\xf5\xf0\xbe\xb6w\xdbd\xe7\xdbS\x9d\x87\xf2\
+\xd1U\x0223\xf7\x1a\xd4\x0c\x18s)B\x00\x91\xd9\x13\xf5\xf2\x87\xda\xd3\x9f\
+\xa2\x95\xbbrN\x0e\x0c8\x1b\xc55\xf5-p\x18\xfbw\x90\x01\xc5*T&\xca\xf90\xac7\
+\x1a\xb5Z\xa3\xd3\xed\xde\xb08\xc5bqz\xaaZ*\x15\t\x80\x82\xc5\xd1\xc9\xd7\ra\
+:=!C\x00\xa26\x13\xde\xff\xa9\xfdE\x15\xcbL\x13\x11\xc7\xce\xfc\xf4G\xc9\x8c\
+v\x00\xe0y\xde\xc2\xfc\\1\x9f\xdf\xdc\xde\xe9t\xba\x07\xccR\xb1\x90\x9f\x9a\
+\xaa\x96KED\x14B\x8cz\x82\n)\x0e\x05\xc4\xa3d\\\xed\xc8\xb1\x87O\x8b\x92\xbd\
+\xf6Z\x1a\x15\xd6\xb8\x02 \x01\x00\x8d02\xa3\x92\xab\x9c<\x94\xe0\x9eAv\x05\
+\xee\x88\xc8\x006J\x9f\xd9\t\xef\x9fn}\xad\xda}\xdc\xe5\xbb\x96\x8c\tp\x02R\
+\xb5S\xa4\xb6\x04GR?rgw\xca\x9fh\x94\xee\x97\xd4\xb7\xa4$DF\xee|-w/\xc2\xc0i\
+\x84\x12B-\xcb\xb2\xa8eY6\xc6P\x1c\x86\nQ@\x06\x00\x8e\xe3\x98\xd3v\xad_s\
+\xcec\xbax\xdd}`\xb5\xf4\xd9J\xfb\xf1\xc9\xde\x13\x01[\xb3e\x97\xca\x98\x80$\
+\xc0\x07~,\x08\x928\x92\xba\x82\x06\xb13\xd3.\xff\x95\xde\xcc\'\xbd\xd2|.\
+\x08\x9d\x91xL\xa3EV\xfd\xa7\x9d;{\xde\xbb\xad\xdc}f\xa6\xfd\x97\xb9\xe8\xba\
+\x051EFS\xa1\x10\t\x02A\xea"u\xc1\xf2q\xea\xdd\xe0O\x1a\x03\n!\x840w\xaa\x9e\
+\x7f7\x08\x8e\t\x88PB\xa8E)\xb5l\xdb\xb6!\x86\xd2\x1d\xe4F\xb0\x9bQ\xde\xd5\
+\x08\xd4,\xbew\xa3\xf7\xbd~\xbc\x86d\x18W\x11\xd4\x00B)\xa5\xc4&\x88\x85\x93\
+P}\xd7\r\xd5v\xfd\x160\xb0\xd5Dv\x95\x01\xce\xb9\xa0\x13\x1b\xf6\xa76\x0b\
+\x1f-\xf6\xcfM\xb7\x1f\n\xa3\xab\x0e\xb6\t2*cBp\xb0"\x01\x88\x04\x0b\xa9#\
+\x88\x1f9\xd3\xf5\xfc{\x9b\xe5\x0fB8\xe7y\xbe{\xa3\xdd62\x03|\xa6\r\xa8q\xd7\
+u\x9d\xe9\xa9\xeaTu\xb2\xd3\xe96\x9a\xcdN\xa7\xc79\x17R\xeaq\x85R\xe28N!\x9f\
+\xafV+\x85|\x9e&[\t\xaa\xc7\x8d\xb7\r\x0c\xb37\xc4\xc40\x17\x94\x8aE `QjY\
+\x94Zv\xe0\xfb\x8e{\x8bA\x8dT\xd9=\xcf-\x16\x0b\x04\x80RbY\xb6\xfa\xb8\xc5Ba\
+\x9f\nq]7\xf3]\x18cD\xcaR\xa9X*\x15\xdb\xed\xce\xf6\xeen\xb7\xdb\xd7\xb3.3\
+\x11J\xc9\xc0\xb5t\xaa:1Q\xb6(U\xc3\'!$\xcc\xe5\x84\x90T\xb51\xdb\xb6,+\x9f\
+\xcf\x1fD\x15x\xc3E\x07\x1b@\t|\x0f\xb5\xfd\x86{-i\x11\xff\x7f{\xef\xfe\x1b\
+\xd7q\xe6y?u\xae\xdd\xa7\xaf\xbc4u#u#%Y\xa2\xed\xc8\xb2\x13\xc7\xce&\x93\xcc\
+$c\xcf&\xeb\xcc\xcc\xee\xecb\x81\xc5\x02\xefO\x0b,\xf6\xcf\x19\x0c0x\xf1\x02\
+/\x06\x03\x0c2~\xd7\xef$\xefd\xc7\x8e\xb3\x13G\x8e-\xcb\x17I\xbeP\xb2l\x8a\
+\x92LR\x94\xd8$\xc5>};\x97\xaaz\xde\x1f\xaa\xbbX<}QK\xb6(\x92\xaa\x0f\x0c\
+\xa1\xdd\xacS\xa7\xaa\xfa\x9co=\xe7\xa9\xe7<\x15\xdce\xc1*\xc0=\xa6\n\xd3\
+\xcd\xa5r\xfbv\x9e\xb8\xcb+I:\xbe\xc5\r&.Gqo/\r\xff\xe5\xad\xa1?O\xc5\xcb^4\
+\x9f\x8eoY\xbcA\x00\xd1\xb0b\xb3\x18\xa4\x0eE\xa9\t\xee\x8e\x98\xa6i\xb5sgSJ\
+\xabC\xdf[\xcf\x7fWVeY\x96\xeb\xba"/\xa0x\x19\xbd\xb3\x19\xa2\x01\xb0\xd9/a\
+\x9a\xa6\x88\xa0\xe0\xdcdFa\xa5\xf8\'\xe5\xc2\x1f\x1b\xac\xe1\xb2\xb5tt+E\
+\x97-^\x07\xe0\x80\xc0\x8dTd\x8f6\xdd\t\xea\xee\x05wH\xa4!4\x8c\xeeQ\xde\x9d\
+\xbe y\xf30\xc3X\xcf}\xe7n\xf6\xdb&\xab\xa5\xe8r:\xba\xe5\xd2\xb2\x89\xedWH\
+\x0c\x07\xed<\xf7\x0e\x18\xc5c\xe9\xe1\xc3\xe9\xfc\xa8\xeb\xbaD\xc10\x8cf\
+\xfe\xe9\xeb\xee\t1a\x88:-%-b6\x9bM\xa5R\xa2\x97\x03\xfe("\x8cD\xdc\xe7\x0b{\
+\xfe\x8fD|\x8e8\xa9\xf8\xed\xd2\xe9t&\x93\xf1R^\x9f\xa5\xd4\xcesu\xbe\xe2$N\
+\x1d\x86a+\x84\x861\xceM\xdf<]\xf1\xbee`l\xd1\xf5t\xbc\x94\x8e\x97l\xb6n\x00\
+\x03\x04n8\x915\x12\xb8\xe3\x91\xbb\x9f;\xc3r1P\xae\xa3XJ6\xf9\xae\xcd\x90\
+\x13|\xa2\r\xe2\x02\x90\xd6k.\x97\xcd\xe5\xb2\xd0z\xeb\x12\xc5FE\xc2\x08\xb0\
+m[>\x8d\x89\xbe\x8b\xf1\x8fc\x8a(\xfd!-\x97\x0e1\xfa-2\x9b\xa696V\x1a\x1e\
+\x1e"\x848\x8e\x93N\xa7E\xea$\x91\xcfr\x90Q\xed\x1cO\xc30\n\xf9\xfc\x13\xc7\
+\xd3\x88h\xdb\xb6\xf8\xa5\xc4\xbd\xd0k\xceS\']\xb5\x9e\xf6/\xc2\xc5hp\xce\
+\xe3\x98\x06A\x10F\x91\x98\xc9\x08!\xb6m{^\xdaK\xa7\xc5\x8e\xaff{{E\x91Bj\
+\xdf\xde={\xf7\x8c\x99\xa6\xe9\xba\xaeH\x12\xe5y\xde}\xe5U~$lJ6\xc06=\xa8\
+\xab\x0c\xbc\xd7\x12\xc6J\x16\x13\xd6;\xbdEf\xe4(<\x94T\xe3[\x82\xfa\\\xac^I\
+ma\xe5\x88\x18\x9b\xfb+\xa9\xfd\x15\x00Pn\x03q`\xaa\x9d\x8d\x00\x00x{\xfbG)\
+\x9aB\xdd\xa4\xef\xb8\xd3\xa2TM\x15\xa9\x922J/\x8a"q{o8\x85\xad|\x84\xb9(}\
+\xa8\xa2\xd4\x908J\xac\x10\xb6v5\xea\xb6\x9f\xaa\xea\x0b\xc2\xf6n\xf1\xa6i\
+\xca;\x07\xadb\xe0\x14\x02\xef\x98\x1c\x10\x00\x90S\xa0\xe7y\xc4\xc9$d]\x1a\
+\xda\x88h\x18\x86\x14w\xf9R\x92\xd5;\xf0\xbc\x13\xa2,\xab\x8aIHT\x9b\xf0\x0f\
+\xa8\x13\x95\xab\xec1{_\x1a$*\x91\x17\x83*\xac\xe2\x1a\x90\x97\x01\xe7\x16\
+\xb3R\xb5\xd4\xde\x1a<\x93\x18|q\x94\xd3v%Ie\xbfg\x93H{7g\xd1\x86\xc4x\xaa\
+\x17\x80\xaat\x96E:\x0b\xcb\xf5gad\xb4\x1e\x05:^\x81\xf3\xd2\xe9\xce)-\xf1#\
+\x8ao\xd4\xebv\xf0\xf1T\xab\x95\xb7\x89e\xb5\xf4!q/t=\n\xda\x97\xa8Z\x8f\xfa\
+\xa3\xc8\tO\x8c[:\x9dR\x8f\xed\x1c\x13\xf1=\xa5T\\\xe4\x9csQ\xbfzK\xde\xef\
+\xbc\xb5\xc5\xc4\xfeM\xe1\x05\x15;rt-3\xf8^K\xb4~\x9bGU\x00 \x00q\xef\x85Y\'\
+S\xb2\xd3C\xb0\x13\x17T\xa1\xe3J\x92W\xb9eY\xeae$\xa4\n7\xafI&d\x0b\x00\xd4\
+\x8d\xe7\xd5\x8bO\xa8\x8f\xb4\xe0z\xb5A6@\xca\xb4\xf0H\xc8\tCu\xcb&|\x08\xf2\
+.\x92\xe1\x1f\x89\xbd\xea\x13g\x94\xcf\n\xa0\x18Jr>\xebt\x11@[\xdceD\x87\xa9\
+\xbc\xff)O-\xd2\xb1RJe\xf3\xd4\xee\x0f\xe2-\x81\xcdZ\xa3*\xbbt\x9a%:\xa2\xce\
+g\xfd\xdd \xbd.\x00YX\x15#!\xac\x89\xc1\x97W\x02\xc0\xa6iU]\xc6\x90\x8d\xb17\
+oo\xddG\xdfAI\x0f)\xc73q\x01\xa8\xbf\xbe\xfa\xc3%\xd6\'\x08!\xc2\xff \xb6(`\
+\x8c\'\xfc\xec\xb9\x0egHb$\x85\xa1\x03\x00j\xb2\xe2\x07\x982\x13\x17\x86\x98\
+\xf8\x13\xf7\xc2=\xf5\xbd\xebl\xa7\xdaO\t\x7fZb\xf4\xe4\x98\x88\tO\x15w\x19\
+\x8ds\xbf]\xdbzx\\\xa7\x8d\xd6{\xcb}v\xe4\xf0\x86\x8f\xf4\x0fX\x10 \xa7\x1b\
+\xe1\x8f\xd0s\xaa\x00\xc3\xf4FZ>\xe4\x1d)\xee\x02U\xfe\xa4jKqWWuT1\xb5\xd4\
+\xfc\xb4m\xa7\x9e\xaa\x05\xd2(\xb66\xc7\xed\xf6\xd1\xf7\xc4\xa5,\xd2U\xaaO\
+\x03\x9d\xb2\xab\xb6\xc7T\xde\xdd\x97O\x0c}\x8cw\xd8\xac\xec\x8a#"\xb9\xc0H6\
+\x9b\xd2\xc2\x0f`\xb4\x83\xe5\xc5\xf7"\xf0C\xd4\x00\xed\xb9Pu\xb0\x0c~#\x91\
+\xcd\x0f\xe6\x84\x10\xcb\xb2\xc4\x08\x80\xa2\xad\xb2#\xc2X\x96w\xf2\xfd\xca\
+\x90\x98<`\xf3\xe4\x9a\x98Y\x13\x93kb\xf0U;\xb1\xeb\xe0\xf7o\x92:\xc7t\xbd\
+\x00:\x7f}\xb5\xa9\xa2\xb5\xd2\xc8\x10\x87\x18\x86\xb1^\xa90\xa6\xbe\xb0\x03\
+\x84\x90|\xbe\x8b\xa7[*;\x00\x98\xa6)\xc4]\xeac\xd7\x8b\xf6\x9e\xa3\x9a\xb80\
+\x84\x16\xcb\x8b\xa1\xff\x03\x01\xd9l\xf1\xa8#\x9c\x98q;\x17K\xe4\x80\xc8\
+\xc9ULx\x8c11\xa4b\xf2\xeborm+b\xff\x86\xdcH\xaf\xd7\x8e\x1c\xb67,\xac\xec{B\
+\xab\xf3\xc8\x02\xb8\x97\xd9\x9e.L\xc8x\xca\x9d*\xee\x89{[\n\xa5\x0c\x9eI,\
+\xd9\xabf\xb2\xd9\x8e\xa1$m\xa7^\xc2\xc4\x03\xe5I\xbf\xff\xd3\xa8\xa0Z\xad]\
+\xbb6\xc7\x11\xbf\xf5\xf4\x93\xe2~\x90a\x03\xa2f\xf5\xf1\x1c6_\xd0\x89&\xa9\
+\x06W\xe2\x8c\t\xcbH\xde\x84\x9d"\xd2\xa9#\t\x83\x88(&\xb6\xa1x{\xe4\xb9\xd4\
+\xee\xf7\xbf\x91\xc4\xb9\xe6\x17\x16WVV\\\xd7=\xf9\xc4\t9\x03\x19\x86!\x03\
+\x16\x13G\xc9\x9b\xb9\xebL\xd6\xeb,\xbe\xef_\x9b\xbb\x0e\x00g\x9e9\r\x9b\'WY\
+\xa1\x18|1&\x97\xaf\\E\xc4}\xfb\xf6d=O\xb5\x9d\xe5\xc5 \xdb\xa0\xfe\xd0\xf2\
+\xb7\x1ep>Ce\xf7gU\xce\xd4\x9f>1\xb6\xaa\xbe\x9bm\xdf\xa0\xb4\xdc\xdbo\xedo\
+\x98z\xa9\x94\x9brS\x89!J\xfc\x88B\x8e\xa1}\x85\x0cr\xdd\xf6\xea\x8bza\xa8\
+\x0fs]}\x86\x9d\x95\x00\x804\xf0\xa5\x95\xa0*{\xe2vH\xfc\x16\xea\xf3\x01"\nq\
+\x97\xf7\xb2\x9c\x03\xee\xebQo\xeb\xe1\x91\xdfZ\xf9\x04\x88)v7\xdb\x07\xdfk\
+\x89\x06\xb4\xbe\x08\x00\xa4\xaf\x87\xc7\xb0R\xe9\xe2F:\xc9\x9d*\xee\xd0\xcd\
+p\x96vbW\x1f\x85zK\xcb{XX%\xa8\xec\xbc,\xcb\xab\xf6]\xe7\x05\xad\xbaY|\xdf?w\
+\xfe}\x00x\xe6\xf4\xd3\xf2\xf6^^.[\xb6\x95\xf1<Us\xb1\x1d\xdd\xa8\xb6GmR\x7f\
+e\xe9\x943q\xdd\xcb.\xaf\xae\xad9\x8e\x93\xcddd\x17T\xe1\xb3\x14\x07\xba\xda\
+\x0cKY\x04\xeb\xda\xfdN3V\x16\x16\x1f\xca\xcb\xe5s\xe7\xdf\x9f\x18? \xc4\x1d\
+\xdar\xd0\xe9\x94H\xd4\xdf\xdf{\xb0\xbc\\v]\'\x9f\xcf\x8b\x1a*\x15\xff\xdds\
+\xe7\x01\xe0\x99\xd3\xdf\x92\xe5eG\xd4\xc1\x11\xa7\xfel\xe62\x00\x8c\x8d\x95\
+\xb2\xd9l\xe7\xe0\x93\xb6gF\xfd\x89\xd5\xc1\x19\x10q\x15\x01\xc0\x97\xb3\xd7\
+\x0e\x1c\xd8\xef\xa5\xd3\xe2:T/\xc2\xae^\x08\xf5"\x14\xb1\xed\x88\xb8\xb2\
+\xb2\xdahe\xcb\xdah\xc3\xde={\xa4\x87:q%\x88\xd9Z\xf4W\x8a\xbb\xfa\xc3\r\xde\
+\x1192\xb0\xf9\xc2\x00e"\xe9\xf3cu\xb6M\x1e%\x05Z\x9a \x1dq2\x9bn\x04\xd9rq{\
+\x8a;\x14\x15\xff\xea\xfd\xce[[OT\xb9!"\xa3:3\xf1J\xdc\xdc\xde\x81\xf7Z\xba\
+\x8e\xbc\x15C\x15\xf7Y\x98\x1d>B\x8c\rI\xdf\xc1\xe2.\x90\x96\x82a\x18\xc2w,\
+\xaf\x9eN\xb5\x92w\xb5\xbc2\xa4\xb8\'\xd4M=\xa4\xd3@\xc0\xcd\xc8+U^\xd6\x9f_\
+\xfd\xe2\xec\xdb\xef\xb8\xae\xf3\xf2K?\x19\x1d\x19\x91\x95\xab\xfa\xd2\xd9\
+\x9e>\xb2\x9e\xe8\xaf*\x10\xb2\xd7W\xaf~\xf9\xee{\xe7\x1d\xc7\xf9\xd3\x1f\
+\xff\xf1\xe8\xe8HB\xc8\xe4m)\xeb\x97\xdfw\xf6\xbd\x7f\xf7;\x07\x81\xb7_\x1fL\
+\xdc\xd8\xea\x14\xd8\xbf~\xf9s\xc8\xca/_\xfe\xfc\xad\xb3o\xbb\xae\xfb\xef~\
+\xfag\xa3\xa3#\tE\xc0\xcd/\x01\xc8\x9fR\x8c\x86\xdaf\xe1\xfcQ\xbb\x90\x18|\
+\xf5z\xb8/\xbdH\xb4\xf6\xec\x1f\xfe\xb0\x7f\xdf\xbe?\xfe\xd1\x1f\x89(\xbd\
+\xc4E\xd2g`\xa5u\xef\xfb\xd5\x1b7\xe7\x13IT\x081&&\xc6m\xdb\xeel\x9bly\xa7\
+\xe9\xd0\xff\xb7\xeb\x83z\xc1t\xceI\x83W\x98\xb8P\xe5-\x99\xb0\xa2\xa0c\xc2K\
+\x9cBH\xf97\xd5\xbb\xad\x81\x05k<l%!\xef\xe3\x1cO\x17\x0f\rR\x1b\x8f*\xacY\
+\x06\x00"\x92\xb6\xf7\xf0\xf0X\xe9\xa2\x9b\x1d\xdb\xf4\xcd}4y\xbb"\x7f`q\x11\
+\xc8K\x01\x94\xdb/qYt\x1e\xdbK\x80\x12\x1f$\xa8\xbc\xc0\xc2\xda\xa2#\x9e\xac\
+\x11qa\xf1\x16\x00\x84at\xfb\xf6\xf2\xbe\xbd{;\xeb\xef\xda\x9e\xfb\xbdm\xc4\
+\x12\x93\xf8\xd20\x8c\xa5;w\x00 \x8a\xa2\xe5\xf2\xca\xfe\xfd\xfbd\xcd\xea\
+\x87\xc4Y\xc8fI\x1d\xb0\xfbrJS\xff\x95\x7fHt\xea\x9e\x95\xab\xcdP\xa5p~a\x01\
+\x00\xc20\xfcj~\xa1X,$\xc6\xd9\xe8\xb6\xe0\x9c\xb0\x07\xc5\x07\xcb2]\xd7M\
+\x94\xec?,\x83\xa0\xb6v\xe9\xf6\xed\xf3\x1f|\xc89.,\xde\xfa\x977\xde\xfc7/\
+\xbe\xb0\x7f\xff>\xb5\xfb\t-SO\'\x07\xb0\xd9l\xce\\\xf9\xbc\xdehl~\x82\'\xc5\
+b\xbe\xd4\x9e\xaa;{\x01\x1d?b\xd7\xcb{@z\xd5\xd9\xf9\xa7\xc1k#\xed\'\x1bu\
+\xb2\xef: \x89{A\xce+\xdfT\xef\xb6\x8c\xd8\xbf!>\xf41\xdb\xd3\x85\xf1\xc1\
+\xf6Z\xc2\xb8\xfd\x10\x80\xf7\xf0\xf0$\x17fw\x83\xb8\x0b\xd4{\xa6\x97\xa0@\
+\xef\x0b\xe2\xbe.\x14lo\xe2\xda\xf2!\xb6\xdf\x17\x17{m\x03\xc0\xd3ON\xaf\x94\
+W\xf2\xf9\xdc\xf4\xa9\'\xfa??\x0e~^\xd9\xa9\x99\xcbW\xae]\x9b+\x95J\xdf}~#\
+\xed;\xe7\xfc\xe9\xa7\xa6WVV\xc5I\xadv$Y\x9f\xb3<\xc0\xed\xaa6\x06\xdb\xa1{\
+\x1b\xe1(JlR\xffS\xf7\xa9V\x8a\xddSON/\x97Wr\xb9\xec\xb1c\x93"\x92G\x8es\xaf\
+\xdf\x17\x11\xe5R\xc7F\x03\x80HgT\x82\x07V\x079\xbdq\xce\xab\xd5\xda\xd9\xb7\
+\xdfi6\x9b\xe2\xd1\xa5\\^y\xe3\xcd\xdf~\xeb\xe9\xa7N\x9d<\x99N\xa7\xfa\x9cBV\
+\xc2\x18\xbbsg\xf9\xd2\xc7\x9f\x94\xcb\x89\x9d\xcd\xd14\xad\xa9\xc9I\xcf\xf3\
+zY\xa9_\xe7G\xec\xc57^\xe7\x83\xdd\x9b;B\xc7;a\x8de\x11\xb0(\xb4\xb8{!B\xdc\
+\xdc\xbe\xc1j+\xf3p\x1d\x00\x08\x81>\xc9\x06\xdc\xdc\xde\xcet\x92\xbbG\xdcU\
+\x1e\xea\xa5\xa0\xde\x93b\x8d\x88\xb2\x96\xe80\xc6\xc4\xa9\x87\x86\x8a\x7f\
+\xf5\x1f\xfeB\x86\x16|\xcd\xf6\xa8\xd6\x1f"\x86A8\xbf\xb0\x88\x9b[\x82\x88\
+\xc3CC\xff\xf1\x9b;\xe9=\x11\x13[{\x95\x8c\xb5\x1a\xfa\xa0\xef\xbbK+Xv\xa7X,\
+\xfc\xfb\xbfxE\x9dE\xa4d\xab\x0f\xe9\x89\x1a\xe4\xef"["\xdf\\\xff\xa6\x06D\
+\x9e\x88RZ\xad\xd6\xdey\xf7\xbd\xbbw\xd7\xc5\x19D\x81F\xa3y\xee\xbd\xf7\xaf_\
+\xbf\xf0xc\xbe\x00\x00 \x00IDATy\xf8\xf0\xa1\xc9\xa3G\x86\x86\x8a}*YZ\xba=w\
+\xe3\xc6\xdc\xb5\xb9F3\xe8H3@\xf6\xee\x1d;tp\xa2\xab\xbfb\x87\xb2\x0b\xba\
+\xd0\x0f\xe4\x91L\xed\xdb/\x14}t \xb3\x1d\x99|\x08@\xec9U\x10\xd3\xf6\x86\
+\x0ew~\xbf;\xc5}\x0bH\xe8\xbb\xf8R\x8a\xbb\xe0\x1b\xbc\x1bQYE\xe0b\x8f\x11\
+\xdcp\r\xa9\xb1.[#\x01B\x9bD\xf7\x13\x96{\xa7\xec\xdeW\xb5\xb2;r2\x93\xdf\
+\xa8\xe2\xde\xe7\xf0\xa4\xb8?\xe0t\xd3\xb3\x85R\xd9\xe38\xfe\xfc\xea\xd5\x85\
+\xc5E\xd5\x81 \xb9}\xe7\xce\xed;w>\xfdlf\xcfXi\xff\xfe}CCE\x11\xe3!\xc6-\x08\
+\xc2\xd5\xd5\xd5\xc5\xc5[\xabkw\x83@\xca\xfa\xa6\x1a\xf2\xf9\xdc\x93\xa7Nn\
+\xff\xc8\x10\x8ddSj\xdf\x9e;r\x18\xde\xd0\x91\x81j\xab\xddB\xdaDa\xb6\xf7\
+\xcfKcuI\xbd\xb9\x1b\xc4]\xde\xc6\xe5\xf2\xca\xfc\xc2\xc2\xc2\xc2"\x00\xe4\
+\xf3\xf9\xb1\xb1\xd2\xf4\xa9\x93j\x99\x0b\x17/\x01\xc0\xd4\xe4Q\xd7ug._)\x97\
+W\xc20t]\xb7T\x1a}r\xfa\x94\xf4\xcc\xde\xb3\xf0\x13\'\x8e\x8b\x95\xcc\x96\
+\x0c\xb5S)\t\x9f;\x00\xd4j\xb5\xf9\x85E\xc30D\xd0\x9e*F\xe5\xf2\xca\xec\xb5\
+\xb9r\xb9\xac6R\x16\x08\xc3p\xf6\xda\\\xb9\xbc\xe2\xfb>\x00\x8c\x8f\x1f\x98\
+\x9a<\x9a\xcb\xe5\x84f]\xfa\xf8\x13D\xb8\xb5\xb4\x04\x00\xbe\xef_\xb8\xf81\
+\x00\xda\xb6=y\xf4\x08\xe7\xbc\xcfI}\xdf\x9f\xbd6\xd7udz\xf5W\x16\x9e\x9a\
+\x9a\x9c\x18O&\xbeP\xfd\x12\x1b\xef(!r\xceo--\xcd\xcd\xdd\x10\xed/\x95J\x13\
+\x13\xe3\xf2py"B\xc8\xd4\xe4\xd1|>\xaf~?s\xf9J\xb3\x19\x0c\x0f\x15\xc7\xc6J\
+\xa2;7\xbf\x9aG\xc4\'N\x1c\x97\x81\x16\xea\xd9\xd5>\xce/,\xce\xcf\xcf//\x979\
+\xe2P\xb1p\xe8\xe0\x84\'S\xabo.\x1c\x86\xa1\xfc5\xc5P\x88.\xcb\x02\xf3\x0b\
+\x8b\xe5r\xd9u\xdd\xe9S\'\xe7\x17\x16\x17\x16\x16\xcb\xe5\xf2\x0b/<?V*\xc9\
+\xfa\x84\xb8GQT\xc8\xe7\xb3\xd9\x8c\xb2GG\xab\x88\x94\xe9z\xbd6w\xbd~\xfd\
+\xc6M\xc30TqFL\xec\x9aB\x12f{:\x9dzj\xfaT.\x97\xb3\xee\xe7%a\xcd#\x049\x8dk\
+\xf3\xe2s\x9f\xd4\xbenn\xaf\xe9x\xdd\xfe\xb2\xb96\x16\xc5\xd5yqMp\xdes\xf3&\
+\xd3\xf1z\xe5\xa5\xd9\xd9\xe2.o\xf2 \x08~\x7f\xf6\x0f"\x08\xba\xcd\xe2\xcc\
+\xe5+\x9f\xcd\\~\xe5g\xff\xd6u]Q\xec\xdc{\xef\x03\x00\xe7\xfc\xd2\xc7\x9f\
+\x86\xe1\xc6\x1e1\xb3\xd7\xe6.\\\xfc\xf8\xe7\xff\xee\xa7\xa5\xd2\xa8\xac\xb3\
+\x7f\xe1\x97\xfe\xf4O\xf2\xb9\\K\xe00\x19\xc7]\xab7>\xbap\t\x00\xce<sZ1!\xf1\
+\xf7g\xffp\xf9\xca\xe7\x9d\x8d\xfc\xe1\x0f\xbe?::2{m\xee\xec\xdb\xef\xa8\xe7\
+\x9a_X<\xf7\xde\xfb?\xf8\xfe\xf7\x8eMM2\xc6>\xf8\xf0\x82\xfc\x93_\xad\xbe\
+\xff\xc1\x87\x00\xb0\x7f\xdf\xbe\xc9\xa3G\xfa\x9c\xf4\xc2\xc5\x8f\xcf\xbf\
+\xffA\xe7I_\xfe\xd3\x1f\x8b(\xc3\xbe\xfd]\x9c\xb9|\xe5\x87\x7f\xf4\xfd\'\xa7\
+Ou\x1d\xfc\xb6\xc4\xb7\xd4\xf3\xec\xdb\xef\\\xfd\xe2K\xb5\xfd\x17.^\x9a>u\
+\xf2\x87\x7f\xf4}\xd9$q\xa2\xd1\xd1Q\xf1\xd6\xa5T\xdek\xd7\xe6\x16\x16o=\xf7\
+\xec\x99\xb1\xb1\x12\x00Tk\xf5\x8b\x97>\x01\x80\x13\xc7\x8f%B,ZO0\x9c\x8b\
+\x9f\xfe\xbd\xf3\x1f\xa8\xa3\xba\xb4t\xfb\xf2\x95\xab\xcf|\xebi\xb5\x9d\xa2\
+\xf0\xcc\xe5+\xe7\xdf\xff0\xd1\xbb\x8f.\\|\xf9O\x7f2::"\n///\xbfw\xfe\x83\
+\xf1\x03\xfb\x97\x97\xcb\xb2\xdag\x82P>\x91\xc8G\x96(\x8a\xb2\xd9\xcc\xd3ON\
+\x7f\xf1\xe5\xec\xea\xda\x9a\x8c\x18J\xb8V\xe4!\xea\xe0)j.5}\xe3\xa8l63}\xea\
+\x89\xd1\xd1\x11\xf5\x8d\x1e\xd0lohm\x11i\x00 \xf25\xde\x9f\x0b\xa5\x93\xb8z\
+\x13\xd5\xa4\xed=\xc3\x1f\x8f\xf6\xcaK\xb3\x83\xc5]\x15\x17JY\xa5\xe2\xe7r\
+\xd9\xa7\x9fz\xf2\x89\x13\xc7\t!KK\xb7\xdf\xff\xe0\xa3ryE\x88\xa3\xea\xb88\
+\xff\xfe\x87\xae\xe3<\xf7\xec\x99\xd1\x91aBH\xadV\xff\xf8\x93O\xfdj\xf5\x97\
+\xff\xdf\xaf\xff\xc3_\xfe\xb9Hlt\xcf\xc2\xaf\xbf\xf1\xdb?{\xe9\'\xae\xeb$\\\
+\x04\xad\xb5\xa3n\x8d<\xff~K\x83\x9e{\xf6Lit\x04\x08Y]]\xfb\xf8\x93O\x01\x81\
+qF)m6\x9ba\x18\x9e8~\xec\xe9\xa7\x9e\xcc\xe7sqL?\xbf\xfa\xc5\xfb\x1f|x\xf6\
+\xedwFGGR\xae\xfb\xf4S\xd3\x88\xb8\xbc\\\xbe\xb3\\\xcef\xb3\'\x8e\x1f#\x848\
+\x8eM:\x1e\xda\xe5y/^\xfa\xf8\xfd\x0f>\x02\x80\x13\xc7\x8f\x1d9|\x88\x18F\
+\xadV\xfb\xf8\x93O\xcb\xe5\x15\xd1_\xc7qT\x13\xf2\xfc\xfb\x1f\x8e\x8e\x8c\
+\xbc\xf8\xc2\xf3)\xd7\x8d\xa2\xe8\x93Og\xca++o\xfd\xfe\xed\x89\xf1\x03\x85B\
+\x97\r\xc0T\x17\xca\xd2\xed;K\xb7\xef\xec\xdf\xb7\xf7\xc4\x89\xe3)\xd7\x05Bn\
+\xdc\xb8y\xe5\xf3\xab3\x97\xaf8\x8e\xf3\xfcw\x9e\xdb4V\x8aA\x8d\xaarC2\xdef\
+\xa38l\x88\xbbxH\xe2\x9c\xbf{\xee\xfc\xe7W\xbf\x00\x80\xe3\xc7\xa7&\x0e\x1c`\
+\x8c\xf9\xd5\xea\xd5\xab_^\xfc\xf8\x93V\x0b\xdb\x1e\xad\x85\xc5\xc5\xb3o\xbf\
+#\xc6\xff\xe8\x91C\xf9|\xbeV\xaf\x7f\xfc\xf1\xa7W>\xbf\xfa\xfao\xde\xfc\xf7\
+\x7f\xf1s1\x14\x8cq\x00XX\xbc\x05\x8b\xb7FGG&\x8f\x1e\x89\xa2x\xfc\xc0~u`\
+\xa5\xf3\'\x8ec\xd34\x8e\x1e9\x94\xcdxw\x96W\xda9\xdc\xef\t\xc1\x8d\r\xbc\
+\x89j\xb1\x13B\xf6\x8c\x95\xa6&\x8f\x14\n\x05\x99\x9ba\xd78\xdcw1\xc8cZk\xed\
+\xd0\xdb\'GX\xaa0nX\xf7\xcew\xc6\xe3\x9a\xcc8\xc6\xfa\xbe\xe0\xeadF{U\xb2S\
+\xc5]\x15M\xc6\x98i\x1a?\xf9\xf1\x8f\x10Q\xbc\xe8L\x08\xd9\xb3g\xec\xb9\xe7\
+\xce\xfc\xcb\xeb\xbf\xb967\xf7\xc2w\xbf\xa3\xea\xb5\xe38\x7f\xf2\xc7?\x14)\
+\xf4D\xc9C\x87\x0f\xbe\xfe\xc6\x9b++\xab\x17.^\xfa\xde\x8b\xdfU=\x00\x9d\x85\
+\x0f\x1e\x9ax\xe3\x8d\xdf\xae\xac\xae\xce\\\xbe\xf2\xcc\xe9\xa7\xef\xd9N\xa1\
+,\xeb\xeb\x95\x8f?\xf9\x0c\x00\x9e\xff\xces\xc7\xa6&\xc5\x83\xf6\xbe\xbd{\
+\xf6\xed\xdb\x93\xcf\xe5\x1d\xc7f\x8cMM\x1e-\x95F\xc5+H\x94R\xc3 \xd3\xa7\
+\x9eXX\\\xbcukin\xee\xfa\xb1\xa9\xc9\xa3G\x0e\x8bP\x90;\xcb\xe5l\xc6;u\xf2\
+\x84|\xbfQ=\xa9\x8c\xc8\\_\xaf\x08e\x17\'%\x84\x18\x86\xb1w\xcf\xd8\xe1C\x87\
+\xfe\xe5\x8d\xdf\xac\xac\xac\x9e{\xef\xfdD\x7f\xb3\xd9\xec\x1f\xff\xe8\x07\
+\x8e\xe3\x88\xc2\xc3\xc3\xc3\xaf\xfe\xcf\xff\x17\x00\xe6\xe7\x17\xf3\xf9|W}\
+\xe1\x9cc\xfb\xd9e\xf2\xe8\x91\xef>\xffm1V\xa2\x83##\xc3\x7fx\xe7\xdc\xc5K\
+\x1f\x9f8>\xa5\xeey\xcf\x95_P5\xcc7\xe9\xfc\xbdF\xb5R\xf1\x85\xb2?\xff\x9d\
+\xe7&\x8f\x1e\x11\x82[,\x16\xc6J\xa3\xef\x9d\xffp\xbdR\x01\x00l;\xeb\xdf\xfe\
+\xc3\xbb\x00\xf0\xdd\xe7\xbf-\x86"\x8e\xe3t*\xf5\xe2\x0b\xcf\x87a8w\xfd\xc6g\
+3W\x9ez\xf2\x14\xe7\x9c\xb5\x97\xc7\x9f\x9c>\xf5\x9do?+\xe3\xacep^bN\x12-\
+\x19\x1e\x1e\xf2\xbc\xf4\xddu\x7f\xbdRi6\xbbJ\xbc\xe8T;\x10E\xcd.\xd06\xe1\
+\x0b\x85\xc2Xi\xf4\xc0\xfe}\xe9t:\x91\x9c\xb2\xff\x80h\x1e9\xb1\xff\x950\xb4\
+\xc5\x1b\xa4]\x7f0b\xb9\xe9\xc2@\xa9}\xe3\xcau\xb9X\xd4;\xfc\xd1\xe8\xff\x82\
+\xeb\xcev\xe4Iqg\x8c\t\xeb&\x8ec\x91\xa5(\x8a\xa2\xb1\xd2(\x00\x84a$\x9e\xa0\
+\xe5\xc3\xf8\xd1#\x87\xb2\xd9L\xa4`\x10\xf2\xd4\xf4)\x00\xb8\xf2\xf9Uql\xff\
+\xc2\xd3\xa7\x9e\x00\x80\xd9ks\x9d\xedi\xdd\xf0\xed\x1fF4/\x8e\xe3\xd9k\xd7\
+\x00`h\xa8x\xe8\xe0D\xdc\x86R:T,Z\x96)\x93\x97\xa5S)\xf1\'q\xae8\x8e\xf7\xee\
+\x19\x03\x00\xc6Z+xq\x1c\x0b\xd3\x12\xdba\x7f\x1b+\xaa\x9bOJ)\xbd67\x07\x00\
+\xc3CC\x87\x0f\x1d\xdc\xd4\x05\x83<\xf5\xe44\x00\xcc\xcd]\x97\xe7\x12\xc7\
+\x1e9|\x08\x11e\xc9T\xca\xdd\xbfo\x1f\x00\x04a\x17\xc1R\x05N|s\xea\xd4\x13r\
+\xfc\x05\x93G\x8f\x8c\x8c\x0c\x03\xc0\x97\xb3s\xa2\xfd\xadc\x95eR\xd1w)\x9a\
+\xed\x95\x8c\x9e)My;\x1d\x90\x1c\xd5\xc3\x87\x0e\xaa\xf9 \r\xc3\x98<zX-|gy\
+\xb9Z\xade\xb3\x19QR4R\x94?tp\x02\x00\x16\x17\x17\xc5\xf7\x942\x00p\x1c\xe7\
+\xe9\xa7\xa6e.9Q\x95\x1a\xd2\'\xdf\xa8\x94\x96\xb5\xeb\xba{\xf7\x94\x8e\x1e>\
+81~`h\xa8\xe0&\x13\xd2&\xd7K%\xae\xeb\x0e\x0f\x0f\x1d9|\xe8\xc4\xb1\xc9\x03\
+\xfb\xf7\xa5R\xa9T*\x95\xc8\x97\xa9\xf5};\x834\xa0\r%\xb5o\x8fb\x99\xcdo\x90\
+\xf6\x82\x05k\xac\xbd\x7fr\x9fH\xf9T~_\xff\x17\\w\xaa\xe5\x0e\x1d\x0f\xc8\
+\xcdfp\xf3\xab\xaf\xee,\x97\xd7\xd7\xd7\xeb\xf5M\xdb\xdfDQ\xa4\xc6\xb4\x8c\
+\x8c\x8c\xc8\x80th\xbf[q\xa0\xfd\xdc=\xbf\xb002<\xdc\xa70\xe7\\\xbe\xa2r\xe7\
+\xce\xb2P.\xd9$\xbe\xf9\xedj\xf1Z9\xa5\xf4\xd6\xd2m\x008\xb0\x7f\xbf\x88\xa8\
+I\x18\xa7\xb2#++\xab\xf3\x0b\x0bw\xefV\x96\xcb\xe5\xcd\x05\xb8\x92\x97\xa3\
+\x15\x9a",t\xe1\x9dP\x1fM\xc4\n\'c\xac\xbc\xb2\n\x00\xfb\xf7\xef\xa3\xed\x08\
+q\xd2~]P\xf8\x19\xc2(\xbasg9\x97\xcb\xca\xfe\xe6\xf39\xd9_\xd2z\xf5\x91\xcb\
+\xd1\xee\x94\x18\xd9e\x00(\x8d\x8e\x98\x86!\x9f\x03H;\xf1\xd3\xc1\xf1\xf1\
+\xd5\xd5\xb5\xc5[\xb7\x8e\x1f\x9b\x945pe=\xb6\xa5\xa1\x1c\x01\x80\xb1v>\x96\
+\xcd\x1ev\x15\xd1Z\xce\xb9\x1c\xd5V \xbc\x92cg\xef\xdeV\x1aU\xcey\x1c\xc7b}8\
+\n\xa3\x7f}\xeb\xac\xac\x87\x00!\x04\xa28\x06\x80[K\xb7\xd5\xeb\xa4X,\x08\
+\x8b\x01\x15\xe4\xb0$\x12\xc8\x88\x0bC\xf4\xc2u\xdd\x92\xeb\x8e\x0c\x17\x19\
+\xe7A\x10\xd4\xeb\xcd \x0c)\xa5\x9c3\xe4\xadH\'\x83\x18\xc4 \x96i\xa6Rn6\x93\
+\xc9d<\x99\xfdX\xec" \xc4\xfd\x01\xf2\xc3h\x1e\t\xb1\x7f\x038\x07\x02\xbc\
+\xf7\x1b\xa4\xa6\x93\x19,\xb5/\xc6\x95\x96\xd5\xd8?R>U\xb8\xc7\xb6|;X\xdcA\
+\xb1\x1c\xc30\xfc\xcdo\xff\xb5^\xaf\xdb\xb6],\x16\x0e\x1f:(T\xef\xd3\xcf.C;\
+\xdf\x9e\xba\xa2e\xb4\xb7\xe9\x10\x8a\xb0Y\x8e[\x86d\x9f\xc2\x8aBq\xd5\x8b\
+\xc0\xdb\xa9eQ\x11wy\x94\xf8\x86t{\xcdZT~\xf9\xca\xd5O>\xfd\x0c\x00D\x172\
+\x19\x8f\x10\xb2\\^Y^.\x8b\xa3I+\xf5\xc7\xa6wL\x94\xa0\x9d\xe4I\xe5\xf3\x87\
+\\\t\xec\xeco3h\xa6\xd3\xa9\xcd\xcb}\x1b\x9e\x07Ji;\x10f\x93\xc0%J\xaac%\x87\
+K\x88\xaca\x18\x8c3\x00@\x8e\xea4\x99\xb0\xdc\xf9F\xec\xa3L\xb6\xd53\xf0Qv\
+\xa1\xfd\xa7M\xaf\xc8\xcb\xd6\xca\xd1\x88\xda\x9bBDq\xbc\xbc\\\x86\x1e\xb4\
+\x93E\xb3v\x95\xa0V+\x95\x9d\xb4\xf3\xae\x88\x18\x1b\xa2$\xd6\x97\xb9\xb1\
+\xc4\x04\xe0\xd8v\xa1\x1d\x11\xd4\x15y\xac\x9aP>\x95JIo\xbb\x96\xf5\xed\x0f\
+\x0b\xee\xd2f\x19\x00\x00\xfb\xbdA\x9a)\x1d\x87\x01~\xcd\xd8\xbf\xc9\xe3V\
+\xf0\x15\xa5\xd8s7\xed\xfc\x81{F\xca\xeflq\x87\xf6\x9d\xff\xc1\x87\x17\xea\
+\xf5\xfa\xd8X\xe9\xdb\xcf>c\xb6\xf7O0\x0cC\x88;\xdb\x9c!\xb2\xd9l\x8a\xb4\
+\x85mC\x189\xe72\x9a-\x9dJ\xa9Z\xdcY\x981\xd6h\x88\xd4N\xe0\xa57\x854Iq\xef4\
+\xa23\x9e\x07\x00\x8dFC<hwF.\xaf\xae\xad\te\xff\xce\xb7\x9f\xdd\xb7w\x8f\x90\
+\'!\x94\xcb\xcbeB6t\xd30\x88\xec\xa00\xae\xf9\xe6HA)\xee\xc5Bay\xb9\xdch4d\
+\x02U\xf9`Q\xab\x89\xd4\x83\x90\xcf\xe5\xd4\xfe\x1a\x84\xa8\x99\xd48\xe7b\
+\x19S\x95K\x15U\xf8\x1a\xcd\xa6\xa5d\xc9\x1750\xc6\xaa\xd5\x1a\x00x^Z8LZ?\\{\
+\xbe\x90\x12/\\C\x9c\xb7\xa6\x1f\xec\xd8\xabS\x9e_\xfej\xedQm\xcaL\xc8\xb2\
+\xa9\xf27\x12n\x19qU\x94FG^|\xe1yy\xe5H\xa5\x96\xc3\xb8\xb1zA@\xa6ZK\xfcRD\
+\xd9\'D\xb5\xe2\x13\xe9\x97\xf9\xa6H\xc7.\x83&\x1d;B\xd9\xd5\x84\xfe\x83$\
+\x94\xd7l\x0f0\xf6\xe7\xc4\xfa)\xa5}\xde \xdd\xd7\xf9\x06i\'\x9c6h\xb5\x15L\
+\xc99P\xd6\xbd6\xc3Jy\xc3\x87\xefY\xdbN\xf5\xb9K]\x10\xff~5\xbf\x00\x00\'\
+\x8eMY\xca\xb6\xc5\xabkkjay\xec\xe2\xad%K\xd9\x01G\x14\x98_X\x04\x80L\xc6K\
+\xa7S\xea\xfad\xd7\xc2\x0b\x8b\x8b\x00\x90\xf1\xbct:\xa5\xd6\xbc\xa1V\xb8!\
+\xee\xe2V/\x16\x0b\x00\xb0\xb0x\x8bs.w\\2\x95\xec\xd8\xb7o/\x03\xc0\xd8X\xe9\
+\xc0\xfe}\xd2L\xe6\x9c\xcb\xb7\x1f\xd5\xb4|\x00@\xda\xf9\xb96\xce\xab\x9cT\
+\x8c\xcc\x90rR\x99\\W\xedo\xb1X\x10R.\xbb\xa0\xa6\xe1\x15%\xa1e\xb9\xf7\xfc-\
+\x08!by\xb0^o\xac\xac\xae&\xa2\xf7\xc20\x14\x99v\xf2\xf9\x9c:\x03U\xfd\x9a\
+\xda\xcdZ\xad~w]\xf4\xb4\xfd\xb3\xb6\xbb\xd39\xaf\xc8\x87\x95ba\xa3\x83\x89}\
+6\x96n\xb7\xf6I`\x9c3\xc6\x86\x87\x86\x00\xa0\xbc\xb2\xda>\xcbF\xcd\xd5Z-\
+\x0cCuJ\x86\xb6jK\x97\xfa\xa6\xce*\xe6\xb60\xb4\xe5\x16t\x12\xcf\xf3\xd2\xe9\
+\xb4X\x17\x95\xbb;\xc9m\xfc\xe4Q\x9e\xe7%\x0e\x91\t\xee\xb5\xb2\xef\x08hc\
+\x99Gu }\xc3\x1f\r+]<8Hmq\xe5\xba\x8cM\x88Y\xcf{\xce\x1b><\x88\xef~G\x8a;\
+\xb6\xc3\x9c\xa5\xc5\xea86\x00\xc8\xfb\x16\x11\xc30\x14\xd1)\xd0\xe1/\xbesg\
+\xf9\x83\x0f/\x08\xbd\x13Z\xf9\xc5\x97\xb33\x97\xaf\x00\xc0\xe1C\x07\xf9\xe6\
+u\xbc\xce\xc2_\xce^\x9b\xb9\xfc9\x00\x1c:4\xd1i\x9a\xb5\xf5*\xf1\xbfx\xe4\
+\xf0\xa1L&\x13E\xd1\xff\xfe\xdd\xef\xc5\xd3\x80\x90\xbf\x0f?\xbax\xf5\x8b/\
+\xa5\x95W\xaf\xd7\x85\x01+\x8e\xba\xf9\xd5\xfc\xe2\xad%\x00\x10\x96\xbb\xd0\
+\x1aB\x0c\x00X\xbb\xbb.\xbc\x1c\x8a\xbeo\x9cTTx\xe0\xc0\xfe\xa1\xa1b\x14E\
+\xff\xfa\xd6\xd9 \x08\xe5I\xaf~1\xfb\xd9\xcc\x15\x008~lJ\x1c"\x07\xc7\xdc\
+\x9cY^\xd4\'\xbb\xd2\xf9[\xb4\xec\xf6\xf6\x0e\x9f\x7fx\xe7\xbdryE*l\xbd\xdex\
+\xe7\xdd\xf3q\x1c{\x9ew\xe8\xe0\x84\xe8\xd4\x9e\xb1\x12\x00|\xfa\xd9L\x14E\
+\xe2\x9b0\x8a\xce\x7f\xf0a\xbb\xf1r\xdc\xfa]\x00\xadQ=r\xc8q\xecD\x07\r\xc3\
+\x98\x9b\xbb!\xc3\xed\xc5E\x92J\xb9\xe2]\xaas\xef}\xa0\xa6p\xb9\xbb\xbe\xfe\
+\xc1\x87\x17\xfe\xf0\xee{\xeb\xeb\x15)\xdc\x00@\x80$\xccg9D\xaa\xbe[\xed\xcd\
+f\xa5Rg\xb3\xd9l6+>\xc8\x7fU\xb2\x9b\x91\xb2\xaezc\xb4\xb2\xef\x0c\x90\xcb\
+\xdd\x91\x18\xeb\xedB\x19,G\x18\x0b\xd7Y\xb3ue\xf6YG\x1d|[\xbe\x9d\xea\x96\
+\x91\x16\x9f\xf0\xd8\x1e?v\xec\xb3\x99\xcb\x9f\xcd\\\xa9\xd5\xea\x9e\x97\x0e\
+\xa3hi\xe9\xb6m\xdb\xc5Ba\xbdRI\xe8\xc4\xf0\xf0\xd0\xd5/\xbe\xbcq\xe3\xe6\
+\xf0\xc80r^\xad\xd5\xeb\xf5:\x00\x1c>t\xf0\xd8\xd4\xa4\\\x0c\xec_\xf8\xd0\
+\xc1\x89\xa9\xc9\xa3\xd0\xcd#\xdc\xd9N\xf1\xf9{/<\xff\xd6\xd9?\xac\xae\xae\
+\xfd\xe2\xd5\xd7\xc4\xfa\xad\xefW\xab\xd5*\x00\xa4\\\xf7\xf0\xe1\x83\x9f\x7f\
+~\xb5^o\xbcu\xf6\x0fB\x07\xd7+\xfe\xd2\xd2\xed#\x87\x0f]\xbfqS\xea\x8ba\x18{\
+\xc6J3\x97\xafDQ\xf4\xcf\xff\xeb\xf5l6[\xadV\xff\xec\xa5\x9f\xf4j\xc0\x8b/<\
+\xff\xfb\xb3\xef\xac\xae\xae\xfd?\xaf\xfd\xd3\xbe}{\xd5.L\x9f:\xb9\x7f\xdf^\
+\xd8p\xe5\x03(;\xb5b\xf2\xbd\x9b{\x93\xcdf\xa2(~\xfd7\xbf\x1d\x19\x19vl\x9b#\
+\xde\xb9\xb3\x0c\x00\xb6m?w\xa6\xf5^\x15"\x1e9r\xf8\xcer\xb9Z\xab\xbd\xfa?\
+\xffidx\x88#\xae\xad\xdd\x05\x80\x8c\xe7\xd5\x1b\x8d\xfe\xa7\xe8\x1c\xd5\x17\
+\xbf\xfb\xfc\xbb\xef\xbd/;(<N\xf5z\xa3\x90\xcfW|_\x96\x07\x80\x13\xc7\xa7\
+\xfcj\xb5R\xf1\xdf}\xef\xfdb\xb1 6,\x14B_,\x16\xb2\xd9\x8c\xf4\xaa\x03\x001\
+\x88\x1a\t\xd3\xd9\x06\xf1\xa5\x98,\xe5\xbc+\x97X7\x16B:\xa6)\xd5\'\xa3\xc6\
+\xdbt\x9dH4\xdb\x19Z_B\xda\x04\x02\x88\xd8\xeb\rRb\xb9\xea\x06\x1a\xbd\xc1\
+\xb8\xd2z\x07\xb3\xdf:*@fdj\x10\xdf=\xechqW-\xf7cSG\x11\xf1\x8b/go\xdclM\xa4\
+\x07\x0f\x8e\x9f<q\xfc\xc2\xa5O\xd4C\xc4\x87o=\xfd\x94\xef\xfb\x9f~vyi\xe9\
+\xb6\xf8\xc6\xb6\xed\xe3\xc7&\x8f\x1f\x9bB\xe5-\xc4>\x85\x8fM\x1d\x9d\x9a<:\
+\xc8\x1d\xa8\x96)\x14\xf2?\xfa\xe1\xf7?\xf9tfi\xe9\xf6\xe2\xe2-\xf1e6\x9b=\
+\xf9\xc4\xf1\x91\x91a\xce\xf9\xf7^\xfc\xee\xcc\xe5+\xcb\xe5\x95\xcbW\xae\x02\
+\x80\xe7y\xcf=\xfbL*\xe5^\xbfqS\x9a\xc8\xa2\x9e\'N\x1c\xff\xfc\xea\x17\xd5jM\
+\xb8\xb3\xbb\x9eTt!\xe3y/\xff\xe9\x9f|\xf2\xe9\xcc\x17_\xce\xca.d2\xde\xf4\
+\xa9\x93\x07\xda1?\xaa~\x11E_HGTOW\xa4~e2\x99\x1f\xfc\x9b\xd3\x97>\xfe\xe4V\
+\xfbD\x00P*\x8d\x9e:y\xa2X(Hs{\xff\xbe\xbd\xcf\x9dy\xe6\x93\xcff\xa2(\x12\
+\xce\x93Ri\xf4\xe4\x13\xc7\xaf|\xfe\xc5\x80\xe2\xaev\xb0T\x1a\x95\xa3*;x\xf0\
+\xe0\xf8\x89cSo\xfe\xef\xb7\xa0\xfd\xd0\x03\x00\x8e\xe3|\xf7;\xcf]\x9b\xbbq\
+\xf3\xab\xf9\xf5\xf5\xd6^\xe5\x8em\x8f\x8f\x1fx\xf2\xc9S\x8em\xb7\x9f\x9f6Y\
+\xe8}~e\xd2\x8e\x89\x84\xf6J2\xaak\x15\n\x89\xa3\xd4\xa9\xda\xb8\xcf\x84\xfe\
+\x9am\x02r\x1a\xb7\xfd\xe3\x94\xf6~\x83t\xe8\xd0 .\x14Z\xbf\xc3\xa3\x96-\xd2\
+\xe7!\xc0\xcd\xed\xb5R\xfd\x96\xe8U\x06\xba{\xb7\x1b\x88(\x82\xbeE@\xba\x9a%\
+\xaa\\^A\xc4|>\'\xec2\xf9\x8e\x8f0B\x7f\xfd/\xbf\x01\x80\x1f|\xff{\xe3\x07\
+\xf6\x13Bn\xddZb\x9c[\xa6Y(\xe4\xa5\x96\x89\xf57\xce\xf9\xffz\xfd\xcd^\x85\
+\x13\x8d\x11f\x97\xfc_a\xfb\xab\xbb\xc9\xf0\xcd\xfbn3\xc6\xee\xde]G\xc4L\xc6\
+K\xa7\xd3r\'eQ\xbe\xdeh4\xea\r\xd32\x0b\xf9\xbc\xd1\xde2\x8d\xb4\xb7\x1c\x13\
+a<bia}\xbd\x02\x84\x0c\x15\x0b\x84\x10\xd1A\xe9K\x91\x93\x9fj\x12.-\xddf\x9c\
+{\xe9\xb4\xe7\xa5U\x7f\x8e8\xb5\xbao\xb8\x08\x1f\x8c\xa2\x88sn\x9a\xa6\xdc<\
+\xdaR\xb6-\x16\x83\x1f\x86\xa1\xf0\xae\xc8\rHM\xd3\x0c\xc3pee\x951V,\x16\xe4\
+R\xa7\x1c\x07\xb9r\xb0\\.#G\x11\xf8\'\xbeW[E\x94u\xcb^\xa3*;h\x9af\x1c\xc7++\
+\xab\x94\xd1\\6+\x05W\xf1YmD\xd4\x18\x86Q^Y%\x04\x0cb\xec\xdd\xbb\'Q\xa1\xd9\
+\xde/T\x86\x99\x0fxM\xaa\xff&d]\xbd\xcb\xa4\x82\xab\x93\x87\x96\xf5\x1dG\xec\
+\xdf\x88\xfd\xaf\x80\x00r\x0c\xa2\x9e\x89_\n\xe3\xcf\t?j\x1f\x90\xd3\xe0\xce\
+\x87\xc8B\x00@\x84 \xc6\xaeS\x051\xac\xc2\xf8s\x83e\x81\x07\xd8\xb9\x96\xbbD\
+\xbd\x1f\x08!\xa5\xd2(\xb4\xef\xa5\xc4\x9d\xa3F\xb0\x88\xb7XGF\x86\xc5\x1d(\
+\xfd\x12\xf2\x86\x94wcgaP\xb6\x00N\x1c\x0emU\x82\xcd2\x04J\xd8\x8cP1\x91\xc9\
+\xa4\xf3\xc9\x9d\x10\x92\xf1<\x11\x04"\xa6\ri\xdc\xc9s\x89\x0f\x96e\xed\xd93\
+&E_\xaa\xa1jq\x8b\x92r\x19sttD:\x9dT\xe1\x93\x16\xa8\xb1\xd9lOHdb\xa8\x13\
+\x06\xbe\x9cA\xc5T!\xcf%\xeb\x94-\x91*?:2"\xdd\x17\xf2\x8c\xb2Ur\xe9\xb8\xcf\
+\xa8\xca\x0e\x8a\x02##\xc3b\x05[\x8eF".S\xb6\x7f\xac4\xaa\x8e\xadz\xcd\xa8_\
+\xde\xefu\xa8V\x05\x9b5\xbdky\xd0\x82\xbe3A\x1e\xd3Z\xeb\xe1;f\xc9L\xcd\x12o\
+\xe8\xc8=\x95\x1dDR\x1a\xd6\x8aZ\xa6\xac\xbb\xb2\x03@\xba81\xb8\xb2\xc3\xce\
+\x15w\xa2l\xa5h\xb6\xf7}\x87\x8e{FJ\xa1z\xac\xb0\xcd\x8d\xf6\xbe0\xa4\x1d\
+\x17\x01m\xb5\xbdg\xe1\x84I\x98\x10wQRU\x169\xbbH%\xda\xe4\ti\xbfX\x94\xd0P\
+\xa1w\xedE\xd4\x96^K\r\x15\x82%\xf57\xd1\xb6\xc4I\xd5\xf1!\x84\xc8`\x0cP\x8c\
+bU\xec\xe4\xf0\x12e\xa3\xd1\xce\x9f@\xc6\x93\xa8UI\xd9U\x7f#\xd9$9\xd3H\xdbV\
+\xceI\t\x07\xf7=GU=\xa3\x1c\x13l\x078\xaam\x93\xf3\x8a\x9c\xdbd\x1fe\xd7\xc4\
+\x8f"\x86\xf4\xc1\xf4]\x1d\x99\xc4\x07\xcd.#\xf6\xbfBN\x81\x88\xc8\xdd\x9e\
+\xfb\xde\xf5I\xfc"A\x16\xd2\xea\x82\xf8\xcc\xb1w\xf8\xa3\x9dN\x15\x06\xf1\
+\xdd+\r\xb8\xaf\xd2\xdb\x07\xa2\x84\xa3A[\xc2\xe4\x9f\x04\xe2\x7f\xa5\x1d\
+\xd7\xcb\xf0\x94+Z\xd2*\xbfga\xd5]\xa0\xda\xf2\xd0M\x86\xe4_\xd5@@\xb5N\xe9\
+\xaeMt\x01\xda\xcb\x9b2\x04\x13:\x0cm\xa9\x9b\x86\xb2\xe3\xb3\xfc\x06:b\xfc\
+\xa5\x13CUd\xd5\xa5#EM\xcev]\xd7\x15\x89\x12."\x07Y\xfe)Q@\xb6_|\xa9\x8e\x83\
+,\x9f8\xfb\x80S\xa6:[@[\xa0\xe5\xd9et\x90\xe8\x85:\x14j\xf3\xd4\x876\xe9\xe7\
+I\\E\x1a\xcd\x06\xc8\xc5\xa6\xa6\x00\x10\xd3>f\xfb\xe1\x81\xdeZ\xaa\xdc@\xa4\
+\xed\xdaz\xbc\x03\x05\x90\xe9\x9d\xfd\xb1\x17;^\xdc\xa1\xfd\x9a{Wq\x97F\xa2j\
+xZ\xa6i\xdb\xb6\x14q\xa9t\xd2\xa6\x96B\xdf\xabp\xa7\xe8\xa8* \x85I\x1c\x92\
+\x90!9\x19\xa8\xb3H\xa7\xdf@\xd6\xa0\xca\x998Jh1\xe9p \x90\xcd\xebr"\xcfA\
+\xc2b\x15\x87$\xe6\'i\xfe\xab\xa2&\xeb\xe9<\x11\xb4\xcdvDt\x1cG\x18\xbc\x89\
+\'$\xf9\x03%\xe6\x1b\xe96I\xfc^\xaa\x11\xadV\x92\x18UU\xf1\xe5ht\x0e\x1dQ\
+\x1e8\xc8\xe6\xf7\xbc:\x87B\x96\x91\x95\xf4\t\x92\xd1hhc\x19Y$\xccv\xce\xbb\
+\x9b\xedN\xa6d\xa7\xbb\xec\xc0\x95\x80GU\xda\x90/d\xf4\x0c\x7f\xb4\xbda\'[\
+\xba\xdfv\xeeHq\x97\xa6+\xb4\xefd\xf9\x8c\x0f\x8a\xb8K\x1f\x88H\x12"\x0f7\
+\x15\xbdNh\x8a\xea\xfc\xedSX\x15\xf7>\x8d\x94\xea uD\xb5\x1c\xc9f\x17s\xd7.$\
+&\t\xdc\xbcx\xab\xd6\x908JN0Ry\xd5\x93\xf6\x9a\x9fTA\xef\xfc\xac~#\xfe\x15\
+\xeb\xab\xea)T\xc9\xee\x1c.9\x0e]{\xaa\x9e\x02;\xf2\x1c\x0c2\xaa\x9dC\xa7Z\
+\xe5F;\x9aE=<1\xc5\xca?\xa9\'\xd2h6@&\x83d\xfa\xe6k<2HeQeNf\xba\xe8\x9dFf\
+\xd0\xda\x12\xecHq\x07E\xdf\xa5\xb8\xc0\xe6uTB\x88\xf8R<h\x8bbcc%B\x88\xe7y\
+\xea\xd6e\xa4\xed\xf2N({\x9f\xc2\xf2\xb6\xef/\xee\xf23\xb6\x17B\x13:\x9b\x90\
+\x95\xc4s@\xa2\x8cZ\x8fz\x16\xb2Y\xdc\xd5\xb3\xcb\xae\t\xd4\xf6\'\x9a\x978\n\
+7;\xb2\xba*\x9d\xd1^\'\xc0\xcd\xc8C\xe4\x89\x04\xb2N\xb5=\xd01\x91\x0c\xf2\
+\xbbw\x8e*(\xf3\x01\xd9\x0c\xf4\x16\xf7\xae\xbfBb\xfc\xfb\xb7G\xf3\xb8\x11\
+\xd7n\x89\xd8v\xc6\x90\xf7\xca\xd78\xd8^K\xac\xb9"6\xbf\x06\x00\xda\xe7\x1d\
+\xa8\xfc>\xcb\xcd=@Swd(\xa4D\xb5\x16\x13w&\xb4\xd7B\xd5\x94\xb6\xa6\x92\xc7C\
+\xd58B\x88\x08\xfe\x1b\xb0\xf0\x03\xb76\xa1\xcb\xf2_\xf9\xbd*\xee]\xcf%;\xab\
+\xfe\xa9\xb3\x18Q\x02f:\x07\xe7\xc1\xba\x908J\xedK\xa2\xfd\x89\x13%&\xb0\xce\
+b\x0f\xdc\xa4\xfb\xaa\xf0~\x87B+\xbb&\x01\xf28\xb8\xf3\x11\xb2\x08\x00\x82\
+\x88w\xd5Nb\xda\xc5\xf1o\xdf{G\x0e\xe4\xcd;\x1f!m@\xff\xf0G\xd3)N<g\x98\xf7\
+\xde\xdf\xa3\x93\x9dj\xb9\x0b\x06\xb9?I\xdb\x11\x81\x88r-Q\xfa\x97\x13%\x07,\
+\xfcuZ{\xbf\x7f\xfa\x9a%\x1f\x9eB\xf5\x9f]\xb6\xac=\x0fc\xe84\x9a\xae\xd0\
+\xda\xa2\xf0\xb6S\xd6\xd3*N\x0f\xb6\xd7\x12\xad\xdd\x12\xca\x0e}\xc3\x1f\xbd\
+\xa1\x83\x0f\xa6\xec\xb0\xd3\xc5\xfd\x9eH\xb1\x96\xaf\xc0\xf4Y+\xbb\xaf\xc2\
+\x1a\x8d\xe6\xb1\x02Y\xd8\xdaH\x0f\x81\xf6\xf0\x8f\x1bV*5\xd0^K\x18\xb7\xf7\
+\xe4\xeb\x13\xfeh:\x197\xbf\xff\xc1Z\x0b\xbb^\xdc\xe5\x9a\x9b\xfa\xbf\xbd\
+\x96\xcb\xee\xab\xb0F\xa3y\xac\x88\xab_!g"H\xa6\xa7\xd9>X\xb2\x01\xd6\\E\xd6\
+\xda\xda\xac_\xf8\xe3\xc8\xe4 \xef@\xf5b7\x8b\xbb\x10e\xb3\x9d\xda\t\xdb\xa1\
+\x84\xbd\xcc\xf6\xc1\x0bk4\x9a\xc7\nN\x1b2f\xb1Wl\xbb\xe9fS\xb9\xbd\xf7\xae\
+\x0b\xb9\xcc\x11\xc6x\xcfUY;3j{\xc3\xdd\xfe2(\xbbY\xdcA\x89\xd9P\xa3\xf1zY\
+\xe2\xf7UX\xa3\xd1<>\xc4\xfeM\xb1\x91\x1ec=c\xdb\x07|k\x89\xd6nq\xe9m\xa7=\n\
+\x11#\xd3w\xf3\xebA\xd8\xcd\xe2.W\xf0:C\x0c\xbffa\x8dF\xf3\xf8\xc0#\xbf\x95i\
+\xbd\xf7\x8e\x1c\xb67<P\xb2\x01\x1e\xc7\xd5\x9b\xe2\xb3\x08\x7f\xecJ\xba0>H0\
+e\x7fv\xb3\xb8C\xb7\x90m\xe8\xad\xd7\xf7UX\xa3\xd1<&\xc4\xfeW"\xa5/e\xd8\xeb\
+%Ro\xe8\xf0`U\xdd@N\x01\x00\x11h\x8f\xed\x12\x0c\xcbM\x0f\r\xb4sS\x7fv\xb9\
+\xb8\xc3}\xaa\xb3\x96r\x8dF\xa3\xc2\x82\xbb,X\x03!\xc7\xb4\xbbC\xc6\xcd\xed\
+\x19$\xcd:\x8f\xeb\xb4\xde\xdar\xa0\xcf[K\xe9\xa1\x81v\xd1\xbb\';r\x9b=\x8dF\
+\xa3\xd9\x1aZ^\x14\xd2\xdaC\xa3\x13b\x98\xe9\x01\xcd\xf6\xcau@\xf16u\xbf]\
+\xf4\x06Z\x95\x1d\x00-\xee\x1a\x8dF\xd3\x1d\xd6,\xf3\xd0\x97\xfb_\xf70\xdb\
+\xf7\x99v\xfa\xdeU\x05wY\xb0\xda\xfa\xdc+\x98\x92\x90\xcc\xc8\xe4 \xab\xb2\
+\x83\xa0\xc5]\xa3\xd1h\xba\x82r\xff\xeb^\x8b\x9f\xc4t\x06\xf3\x8fc\xec\xb7\
+\xb7H\xed\xedmw2%+Ux\x90\x96vC\x8b\xbbF\xa3\xd1t\x81\xd6o\xf3\xb8.\xf6\xbf\
+\xeee\xb6\xa7\x8b\xe3\x83\xa4\x07\xa0\xf5\xdb<\xaa\xb6>\xf7t\xefX\x99\x91\
+\xc9\xaf\xd3\xe0\x04Z\xdc5\x1a\x8d&\t\xf28\xae\xb6\xcc\xf6\x98BW/\x8a\xe9dR\
+\xf9{\'\x1b@\x16\xc5\xfe\r\xf1\xb9O\xb2\x81\xf4\xd0!\xc3r\x1f\xb0\xb9\xdd\
+\xd0\xe2\xae\xd1h4Ib\xff\x06\xd2P\xac\xa3v\xdfH\x8f\x90l\xe9\xc4 \xbb#E\x95k\
+"\x91$\xb4\x93\rtb\xa7\x8b\xe9\xe2\xc4\xd7jq\x07Z\xdc5\x1a\x8df\x13\x9c6h\
+\xfd\x0e@\xeb\xad\xa5\xaer\xecx\xa3\x03\x85?\x86\x15\xd6X\x06\x00\x02@Y\x8f \
+\x19B\xbco\xd4!#\xd0\xe2\xae\xd1h4\x9b\x88\xfd\x9b"f\x91\xf6\xca\xfd2\xe8\
+\xeeH\x18\xb5\xd3\xc8p\xe8\x19o\x93\xca=\xe0v\x1c\xfd\xd1\xe2\xae\xd1h4\x1bl\
+$\x1b\x80\x9e\xa9}S\xf9\xfd\x03\xed\xb5\xd4(\xf3\xa8\x02\xc2l\xa7\xd0k\x1du\
+\xc00\xf9\xfbE\x8b\xbbF\xa3\xd1l\x10\xfb7\xc5\xfai\xcf\xdc/\x84\xa4\x06I\xb3\
+\x8e,j\x87?\xf2\xdea\xf2\xe9\xa1C\x83l\xee\xf1\x00hq\xd7h4\x9a\x16,\\g\xc1]\
+\x00\xc0\xde^\x14;=4\x88\xd9\x1e\xd7\x16\x91\xb6\x93\xb63\xe8:M\x98\x8e7\xd8\
+\xe6\x1e\x0f\x82\x16w\x8dF\xa3i!3\xad\xf71\xdb\x07\xf1\xb6#\x0biu\x1e\x00\
+\x08\x00\xe7\xd0=\xde\x06\xc0\x1b\xfeZ\xdbq\xf4G\x8b\xbbF\xa3\xd1\x00\x00\
+\xd0\xc6\xb2x\xd5H\xbc\xb5\xd4\xb5\x8c\x9b\xdd3\xc8\xe2g\xec\xdfle\x7f\x04\
+\x88{\xc5\xdbdF\x9d\xcc\xc8\xd7ip\x7f\xb4\xb8k4\x1a\r\x00\xa0\xb0\xb5\x01\
+\x802\xe8\xbac\xf5\x809\xc2x\\\xa3\x8d\xdb \xd6Q9|\xbdx\x9b\x07g\xf7\xa7\xfc\
+\xd5h4\x9a{\xd2J6\x00\xc0{\'\x1bp\xf3\xfbM;\xd5\xaf\x12\xca(e\xdc\xbfA\x90\
+\x03\x10\xec\x13oS8`:\x99o\xa0\xdd\xbd\xd1\xe2\xae\xd1h\x1e{\x90\xc9d\x03\
+\x94u\xdf"\x95\x98\x8eW\xec\x99#\x8cQ\x1a\x06QH\t\x89W\x9ch\x15\x81\x10\x80\
+\x98A\xf7\xa4\xed\x84\x0c\x92\xb7\xe0k\xa2\xdd2\x1a\x8d\xe6q\'\xae-"\r\x01\
+\x80c\x8fd\x03\x00\xe9\xe2\x041\xed\xae\x87s\xc6\xd7\xcb\xe5 lzi\xf4\xe0\x0e\
+ \'}\xc3\x1f\x9dL\xa9\xff\x13\xc07\x82\x16w\x8dF\xf3X\x83\x9c\xd2\xda\xa2\
+\xf8\x1c\xd3\xee1\x8b\x86\x9d\xea\x13\xdb\xde\xa8\xd5\xd6\xca\xcb<\xa0f|\x97\
+\x06>\x10\x03D\xf8c\x8f\xcd=\xbc\xaf\xbd\xf9\xf5 h\xb7\x8cF\xa3y\xac\x89\xab\
+\xf3\xc8b\x00`\x1c\x19\xefnkg\x86\'\xfb\xe4\x08C\xc0\xc2\xd0(\xd2 \\\x9f\'\
+\xc4 \x00\xacw\xf8c\xaa0\xb1\x05f;h\xcb]\xa3\xd1<\xce \x0bi}\t\xda1\x8b]\xcb\
+X\xa9\xbc\x93-\xf5\xa9\xc42\xadT~\xc4\xb5j\x04C\xb1\x8e\xda+\xfc\xd1\xb0S\
+\xdfx\xf6\xc7\x9e\xad\xda\x9a\xd3h4\x1a\xcd6$\xf6o\x02\xa7\xad-R{\xeck\xda?f\
+\xb1Y\xab\x87\x11\x02\xad8\xb8\x06`\x12\x00\xca\xb0\xd7\x16\xa9\xfd\x9f\x00\
+\xbeY\xb4\xb8k4\x9a\xc7\x14N\x1b\xb4\xb1\x0cb\xeb\xbb\x1e1\x8bN\xa6d\xa7\x87\
+z\xd5\x10\x06a\xa3\x11"\x18._!\x18#\x98\x1c!\xee\xb1\x1d\x87\x9d\x1e\xea\xff\
+\x04\xf0\xcd\xa2\xc5]\xa3\xd1<\xa6\xc4\x95\x1b\x80\x1c\x080\x8a\xbdb\x16\xd3\
+C\x87\xba\x1f\x8cP\xaf\xd5\xe3(\xe6`:F\xd3\x8c\xca\x08\x06!\x10Sd\x8c\x13\
+\xb1.K\xc8Fv\x01B\xbc\x91\xadXG\x95hq\xd7h4\x8f#<\xf2Y\xb0\n\xad\x1d\xab{$\
+\x1b\xc8\xed\xb3\xdcl\x97? \xd4k\xf5\xa0\x19\x12\xd36\rfE\x8b\x04\x11\x89!^\
+\x80\xb2\xd3\x05;]4\x80\xc7a5\x0e|\xa1\xf3nn\xef\xc3H\xda\xde\x07-\xee\x1a\
+\x8d\xe6q$\xf2o\x88$\x03\xb4\x87\xd9N\x0c\xcb\xeba\xb6W+~\x18\xc6\x86esF\x1d\
+R!\xac\x82\xc4$\x00\xf5\x80\xbb\xf9\x83\xf9=\x93\x00\x040L\x03m\xac|\xd5\xac\
+\xdc&\x96\xe3\r=\xdcd\x03\x9d\xe8h\x19\x8dF\xf3\xd8\xc1\x82\xbb<X\x07\xd2\
+\xcflO\x15\xc6\xbb\xeeX\xdd\xac7\x9aAlZ6c\xd4\xb6\r;\xbe\r\x84\x10\x80\x88b\
+\xcc\\@oc\xa6 \xe0zC\x80\xb67t\xf0!%m\xef\x83\xb6\xdc5\x1a\xcd\xe3\x06\xc6\
+\xfe\r\xf1\x89R\xec\x9e#\xccr\xd3\xc5\xf1\xce#\xeb~5\x08"\xcb2)\xa5\x8e\x9b\
+\xb6\xa2\x9b\xc0\x9b\x04\x0c\x00\xa8\x87h\x18N\xbd\xd6LGq\xc4 l\xc6\x801\x01\
+34FF\xf2]\xaaz\xd8h\xcb]\xa3\xd1<^\xd0F\x99GU \xc0yO\xb3\xdd+\x1e$F\xd2\xf6\
+\xadU\xaa\xcd &\x86\xc59\xda\xb6c\xa1O\xe2\x15\x04\x02\x04\x02\na\xcc9R\xcb\
+\xb5\xeb\x8df\x18\x04\x1c9\xe5\x06\x037=r h\x06\x0f\xbf[I\xb4\xe5\xae\xd1h\
+\x1e/d\xb2\x01\xca\xb0k\x8e0\xd3\xc9\xb8\xf9}\x89/\xabw+a\xccM\xd3\xa0\x94;\
+\x8e\x814\x8c\x9b\x8b\xae\x11\x03\x18\x88Po2\xcb\xb2mo$\x8cXpw\r\x10\x01\x90\
+\x00!\x86A\x88Q\xa3\xf1\xf8\xd1#\x84t\x8d\x90|Xhq\xd7h4\x8f\x11<\xaa\xf2\xb8\
+\x06\xf7\xd8 \xe9Hb\x83$\xffn%\x8c\xb8m\x19\x1c\x88m\x03\x8f\xa3\xb0y7gT\x01\
+\x0c \xd0\x088\x07\xb30z\xacY\xa7\xf5\xda]\xc30\x81\x00\x08\x8f>@kG\xd6(\xb6\
+\xdd-u\xbbkq\xd7h4\x8f\x11qu\x1e\x11\t@L\xbb\x9b\xedV\xaa\xe0dF\xe5\xff"\xe7\
+\xfe\xba\x1f3b\x1a\x18sp,0\x90E\x9c\xdaP!\x06\x00\x10\xcaXH\xcd\xfc\xc8d\x14\
+\x134m\'\x9d\xe6\x8c\x8bC\xdbU\x80i\x99\xa6\xbd\xd5b\xab\xc5]\xa3\xd1<.\xd0f\
+\x996W\x08\x00\xed\x95#\xcc03\xa3\xc76\xca\xc7q\xbd\xda\x88)\x02p4L\xd7"4hR\
+\x00\xdbA\x88\x1a\x04\x00\x91S\x92\xf7\x8a{\x83\x08\x18gn\xcaK\xb9V\xadQg\
+\x8c\x03\xe7\xad*\rc\xa4T2\x8c\xad^\xe0\xd4\xe2\xae\xd1h\x1e\x0f\x90\xc5\x95\
+\x1b\x00\xd0o\x83\xa4\xfc~\xf9\xd6R\x14\x84\xd5J\x8d\x986!`\x98\x8em\xf2\xb0\
+Q3m7?\\\\\x9b\xff(c! \x82=b\x18{\x1a!g,v\xbd\xbc\xe3Xa}\x1dXL\x0c\xe2\xa4\
+\xd2\x04\xc0yg\xfe\x95\x00\x00\x1cPIDATq\xdcl>\xe78[\x1d\x07\tZ\xdc5\x1a\xcd\
+cB\\\xbf\xcdi\x93\x00\xc4\xac\xc7[K\x96+\xf7Z\n\x1a\xcdf3DB\x90S\xc3r,B\xc3z\
+\xc3J\xa5\xf2CC\xcd\xda\x9a\xc1\x1a\xc4\x02L\xed\x8bx1\x88\x90\xb3\xd8\xcb\r\
+\x19@\xa3\xba\xbf\xbez\xdb@\x7fhd\xac\xb8\xe701\x8c-^DU\xd1\xa1\x90\x1a\x8df\
+\xf7\x83\x9c\xc6\xd5\x05\x00@\x00\xd63\xfc\xb1\xb5\xd7R\xd0h\xd6j\x01r@\x04\
+\xc3\xb4\x1d\x935\xeb5\xcbM\x15\x86\x87\x01`\xed\xf6\x97\xb6\x85\xdc\x1d\x8f\
+`\xb4\x112\xc6\xa8\x97\x1b\x06\x1e\xb1\xa0\xb1V\xfe\xca\x84j&m\x16\xc6\x8e\
+\x18\xa6\xf9\x08\x95\x1d\xb4\xe5\xae\xd1h\x1e\x07hm\x01Y(\xbc\xed]\xcdv\xd3N\
+\xb9\xf9\xfd\x00\xd0\xac7\xeb\xb5\xa6a\x1a\x8cq\xcb\xb2,B\x1b\xd5z\xca\xf3\
+\xf2\xc3\xc3\x00\xb0\xbe\xb2`a\xd3H\x1f\x8c\xa0Xo4\r\xd3N\xa7\xb3\xc8\x02\
+\x8c\x9a\xab\xab\x8b\x96\xd1\xcc\xb8\x98\x1b\x197mo\xcb\xbb\x98D\x8b\xbbF\
+\xa3\xd9\xe5 \x8f\xe3\xda-\xe8\xebmO\x0f\x1f%\xc4\xa8W\xebA\x10\x1b\x06A$\
+\x96e9\x164j\x8dT&\x93\x1f\x1a\x02\x00F#\x7f\xe5F.\xbf\x8f\x99#\xcdZ\xc5rs\
+\xb6e\x01F4\xa8\xfb\xeb\xb7,\xd2\xcc\xa5\xc1r\xd2\xe9\xde\xfbho%Z\xdc5\x1a\
+\xcd.\'\xf6\xbfBN\x01\x80\xf5\xf0\xb6\xdb\xa9\xbc\x9b\x1d\xabUjAH\t0N,\x83\
+\x80mb\xcd\xf7\xbd\\.W,\x8abkwnx\xb9=\xa6;\xd2hT\xad\xf4\x10pj\x12\xacW\xd6\
+\xea\xd5e\x934\x0b\x9e\x01\x00\xde\xd0\x91\xceW[\x1f\t\xdb\xa2\x11\x1a\x8dF\
+\xf3\x90\xe0\xb4\x19\xd7\x97\x00\x10\x90tO6@ 5<U\xab\xd4\x1a\xcd\xc84\x10\
+\x0c\xcb@n\x12h6\xea\xd9b1\x93k\xe5\xe9\r\x83\xbaA,+=\x145\xab\xa6\x93G\x16\
+\xa5\\\xbb\xbav\xa7Y_\xb1\x8cf\xc13\x11\xc1J\x15\xdc\xdc\x9e-\xed^o\xb4\xb8k\
+4\x9a\xddL\xec\xdf\x04\xce\x80\xf4\xf2\xb6s;\xb3?\x0c0\x8c\x99i\x12 \x96A8\
+\x01\x8c\x82F\xb68\x9c\xce\xb4\\\xe7\x88\x18\xd4\x1bv\xaa\x184|\xe2\x14\x01i\
+\xca\xb1*+\xb7\xc2\xe6\x9am\x86\xb9\xb4\x89\xf8\x08\xb6\xe3\xe8\x8f\x16w\x8d\
+F\xb3k\xe1q\x8d6\xca\xd0sG\x0e\x04bq\xa3\xc8\xb9A\x08%\x86i\x00\x07\xce\xa2\
+\xa0^\x18\x1ds\xd3\xa9V!\xce\xa3 \xe4\x8c\x04Q`\xbbE\xce\xa8k\x93\xbb\xe5\
+\xc5(XM9\xd4s\r\x91e\xc0\xcd\x8e\xd9\xa9\xc2V\xf6\xae?Z\xdc5\x1a\xcd\xae%\
+\xaa\xdc\x04@ \x84uM\xed\x8b\x1c\x9d\x12\'\x19\xe4\xcc0L\xc3@Nc\x1a\x05\xc3{\
+\xf7Y\xb6-\x8ap\xce\x9b\xb5F\xb3Q\x8d)\xb1\xec\x14r\x96v\xad\xca\xcab\xd0,g\
+\xd3\x98\xb2\x8c\xd6\x86z\x86\xe5\ro#\xb3\x1d\xb4\xb8k4\x9a\xdd\n\x0b\xd7\
+\xdb\x1b\xe9aW\xb3\x1d\r\xd7J\xefc\x80\x84\x10\xd3\x04\x16\x854\x8e\x86\xf7\
+\xee7M\xb3U\x03\xa5A\xbd\x194k\x0c-\xd32\r\xd3\xb4\x0c\xbe\xbe\xb2\xd4l\x94\
+\x0b\x1e\xda\xe6\xc6d\x91.Nt\xdd\xd9\xe3\x11\xa2_b\xd2h4\xbb\x93\xd8\xbf\t\
+\x00\x04\x802\xe8\x96#\x0c\xcd\xf4\x1e\n\x0epf\xdb\x06\x8b\x9a4\x8eJ\xfb\x0f\
+l({L\x83z\xc0y\xcc\x88\x8bHl\xc76\x90\xd6\xd7n7\xebwr)\xae*\xbba\xa7S\xc5\
+\x89\xad\xea\xd6\xa0h\xcb]\xa3\xd1\xecBXs\x85\x85\x15\x00\xe0\xd85\xb5/"Iqs\
+\x048u\\\x9b\x065JY\xe9\xc0\xc6~I\x9c\xb2\xa0\xd1\xa4q\xcc\xc0\xe4,J\xa7\xd3\
+4\xac\x07\xd5\x95Z\xbd\x9c\xf7\xd017\xd5\x97\x19\x99J\xa4\x08\xde\x0ehq\xd7h\
+4\xbb\x0f\x8c\xfc\xaf\xc4\xa7\xae;r "I\xef\x05\xc3t-3n\xfa\x1cI\xe9\xc0\x01\
+\xf9W\x1a\xc5A3\xa01\xe5`Fq\xec\xa5\xd3aP\x0b\xab\xcb\xf5\xc6j\xc1\x03{\xb3\
+\xb2\xdb\xe9!\'3\xf2\xd0;t\xffhq\xd7h4\xbb\rZ\xbf\xc3\xe3\x1a\x01`\xdd\xccvD\
+N\xec\x1cq\x86,\xd3\x88\x1a\xeb\x86\xed\x8e\x96J\xf2\xafq\x10FQ\x14\xc7\x94\
+\xa3A\x19M\xb9N\xd8\xf0\x83\xear\x14\xaf\x17=\xb06+;\x10\xe2\x8dLnE\x97\xee\
+\x1f-\xee\x1a\x8dfw\x81<\xae\xceC;\xd9@\x17o;!\xc4\xddc\x1af\xdc\xac\x98N\
+\xaa8\xba\xb15G\x1c\x86\xf5Z\r\x89\xc9\x90 \xf2\xb4k\xc7\xcdZ\xdd\xbf\xcd\
+\xa8\x9fM\xa1m\x12\xdc\xbc.\xab\xa6\x08\xdenhq\xd7h4\xbb\x8a\xb8vK\xa4\xf6e\
+\xddw\xe4\xe0\x86]4\xed\x02m\xfa\xb6\xd7J\x1a#h\xd6\x1aQ\x10049\xe7\x061L\
+\x93\xc4\xcd\xea\xfa\xda\x12\xf2Z.\xddE\xd9\x89i\xa7\x87\x0e=\xfc\x0e= \xdbn\
+\x11@\xa3\xd1h\x1e\x18\xe4q\\k\xa5\xf6\x8di\x97\x02\x1c\tqKQ\xb3\xeaf\xf3\
+\x1b\xca\x8e\x10\x05a\x14\x04\x14\rJ\x99eZ\x048\x0f\xaa\xab\xe5\x85 \xaaeS\
+\xd0\xa9\xec\x00\xe0\r\x1d6\xccG\xb0\x0b\xc7\x80h\xcb]\xa3\xd1\xec\x1e\xe2\
+\xaaH\xedK(C\x8eI\xb3\x9d#R\xf0\x08%\x99b\xd1\xcb\xb6\xdd)\x88A#\x08\x82\x80\
+\x83I)u\x1c\x1b9\xe5A\xb5\xea/5\xc2\xe6p\x968\x16t*\xbb\xe9f\xdd\xfc\xbe-\
+\xe8\xd1\x03\xa3\xc5]\xa3\xd1\xec\x12\x90E\xb4\xbe\x04]\xdfZ"\xc094#\xb4S\
+\xd9\xec\xf0H*\x9dn\x1d\x82\x10\xd6\x1bA\x18RfPF]\xc7\xe2,\xc6\xb0\x1a\x07K\
+\xf5 H;\xc4s\xbb(;\x00d\x86\x8fn\xc3\xf0G\x15-\xee\x1a\x8df\x97\x10W\xbfB\
+\x16\x03\x01\xcaaS\x8e0\x02\x8cC\x10!\x92Tvx|C\xd99\x06\xf5F\x18\x86\x0c\r\
+\xc6\xb9\xebX\xc8\x19\x0f\xab,\xb8\x83<\xb0-\x92Mu\xc9\x0f\x0c\x00N\xa6d{\
+\xc3[\xd2\xa7\x07G\x8b\xbbF\xa3\xd9\rp\xda\x88\xeb\xb7\x81t\xe4\x08#\xc0\x18\
+\x041"\xc2\xe8\xf8\xc9L\xbe\x95\xdb\x8bs\x1e\xd6\xebA\x183\x0e\x9cs\xcb\x00d\
+\x94\xb0\xa6\x01U \x8d\x98\x13\xdb\x04\xc7\xec~\xae\xf4\xd0\xb6\xd8\x8e\xa3?\
+\xdb\xfa\xb1B\xa3\xd1h\x06$\xf6o\x022\x00`\x0c6r\x84\x11\xa0\x0c\x9a1"\x82\
+\x97\x1b\xc9\xe4[+\xa8\x9c\xb1F\xc5\x0fBF9A0L\x13\x08R\x03\xe2T&\xc5\xe3\x8a\
+m\x19\x8c\x83c\x82\xd9M \xadT\xc1r\xb6i\xf8\xa3\x8a\x16w\x8dF\xb3\xe3\xe1Q\
+\x956V\x00\x08"P\xbea\xb6\xc7\x14\x82\x18\x01\x81\x18\xa4P:\xd2*\xccxP\xab\
+\xc5\x9c\xc4\x94\x13 \x06\xe1\x843\x02,?<\x1c5\x96S\x16C\x04\xc6!\xe5t\xf3\
+\xb6\x8b\xa4\xed\x8ft\xe7\xeb\x01\xd1\xe2\xae\xd1hv<\x91\x7f\x13\x00A\xe4\
+\x08k\x9b\xed\x11\x83\x90\xa2\xc8\x19\xe6\xe5\xc6\x9ct\x0e\x00\x90\xb1f\xad\
+\x1eD<\x8a\xa9e\x9a\x04\x18a1\x00/\x8c\x96h\xdc\x84\xb0l\x99\xa4\x19A\xca\
+\xee.\xe0nv\xcf\xb6J\xda\xde\x07\xeds\xd7h4;\x1b\x16\xac\xb2`\r\x00\x10Q&\
+\x1b\x88(Db/l\x02\x86a\x15\xc7\x8e\x02\x00\xa3\xb4Y\xad\xc5\x0cb\x86\x96i\
+\x02p\xc2c\xdb&\xd9\xa1Q $X\xfb\xc2\xb1\x88\xf8k\xc6\x15\x93\xc5&\x88\xe9x\
+\xc3G\xb6\xb4o_\x03-\xee\x1a\x8dfG\x83\xd1\xfa5\xf1I\xbc\xb5\x84\x00A\x04L\
+\x86\xcb \x14\xf7LZN\x8aEQ\xbd\xd6\x08)p\xc6\\\xc7b,\x8e\x1b\xb5\xa1\xd2\x90\
+\x93)\x00@\xb4~\xcd\x82&\x004BL\xd9\xdd\x83d\xb2\xa5\xe3\xdb-i{\x1f\xb4\xb8k\
+4\x9a\x1d\t\x8di\x18#\x84\xcb$\xae\x13bR\x86\x9c#G\x08b\xe0J \xa4\xedz\xb9\
+\xa1\xfd\\({\x8c\x9cs\xdb6\x19\x8bI\xdc\x18\xde3b\xa7s\x00\xc0i\x83\xd5\x97\
+\x00\x80q0\t\x18\xdd\xa4\xddN\x0f9\x99\xd1.\x7f\xd8\xaehq\xd7h4;\x0cD\xf4\
+\xd7+\x14,\xdb\xe0Fc\x1e\x88\x01\x00\xac\xa5\xec\xc8\xb9L\x15F\x90\xb3\xd1\
+\xfd\'Y\x18\xd4\xebA\x18#\xe3\xcc\xb1L\xe4\x0c\xe2F\xb14j8\xad\xfd\xaf\xa9\
+\x7f\x13\x91\x13"b(\xbb\xbd\xb3\xb4\xcd6\xbf\x1e\x04\xbd\xa0\xaa\xd1hv\x18\
+\xeb+\xab\xeb\xe5\x15\xd72\xd2d\x8d\xf0&\x01\xc2\x18\xc6\x14\x9a\x91\xaa\xec\
+\x80\x9ce\x0b{\x08\x10\xbf\xda\x0c)0\xce]\xdbB\xe4\x845\x8b\xa5\x92Tv\x16\
+\xae\xcbM\xb4\x11\xbb\xaf\xa3\xa6\xf2\xfb-7\xb7E\xdd\xfb\x86\xd0\xe2\xae\xd1\
+hv\x18\x8dz\x1d(\xc7\xb0F\xeb\xb7\x01\x0c\x04\x08c\x14\xaf))\xca\x8e\xa6e{\
+\xb9\xb1z\x00\x94\x01r\xee\xda\x06\xe7\x94\x05\xd5\xe2\xe8\xa8\xe9\xa4\xdb\
+\x95a\\\xb9\x0e\x00\x84\x00\xc7\xaeY$\xb7{\xf6\xc7^hq\xd7h4;\x0c/\x9f\x07\
+\xcb\x8a\xaa_!\x0b\x88A\xc2\x18\x1bQB\xd9\xb9e\x99CcS\x11s\xe3\x98\x02\x80c\
+\x1b\x8c\xc6\x185\x87\xc6\xc6\x0c;%\xab\xa2\x8de\x1eU\x01\x00\x11b\xda\xcd!\
+\x03\xe0\r\x1d\xda\xce\xd9\x1f{\xa1}\xee\x1a\x8df\x87Q(\xe4ic\xdd\xe1u\x00\
+\x83q\xa8\x07\xa8\xbaS\x90s\xdbv\xf3\xa3\x93\x11\xf7(e\x86A,\x93\xd0(D\x16\
+\x8e\xec\xd9\xa4\xec\xc8i\xec\xdf\x04@BH\xcc\x90\xf1.A2\xa6\x93q\xf3\xfb\xb7\
+\xa8c\xdf(Z\xdc5\x1a\xcd\x0e\xc30\xcd\\:dM\x00\x02\xcd\x803\x8e\xaa\xb2;\xae\
+W\x18\x9dl\xc46\x00\x9a\xa6A\x08\xf28B\x1e\x8f\xec\xdd\x93\x08d\xa4\xb5\x05\
+\xa4M\x10\xa9\x80{\x98\xed\x99\x91\xc9m\x9e\xfd\xb1\x17Z\xdc5\x1a\xcd\x0e\
+\x83GU\xd6,\x13 \x94b\x10mR\xf6T:\x97\x1b>\x1a\xc4&g\xdc\xb6-\xc3@\x1a\x04\
+\x96\x89\xf9\xd2\x98amr\xad \x0b\xe3\xda\xa2\xf8L\xd9\xe6,\x92m\xec\xcc\xe8\
+\xf6\xcf\xfe\xd8\x0b-\xee\x1a\x8df\x87\x11Un\x00r \xd0\x08\x91s\x0e\x00\x84\
+\x18\x88<\xe5\x15\xbc\xc2\xa1Fdr\xce-\xd3\x00`\xb4\x19\x98\x16\x14Jc\xc4Hj]T\
+\xb9\x0e\x9c\x02\x00"t7\xdb\x89\x91\xd99\xef\xa3v\xa2\xc5]\xa3\xd1\xec$Xp\
+\x97\x05k@ \xa2\x18QpRY\x00\xa0q\xd3\xf3F\xd2\xf9\x83\x8d\x90 2\xc7\xb1\x019\
+\r\x1an\xca\xc9\r\x8f\x12#\xe9W\xe1Q\x955\x97\xc5\xe7\x98A\x97M\xb4\x01\xd2\
+\x85q\xd3\xc9<\xf4\xfe<4\xb4\xb8k4\x9a\x9d\x04\xad\xdf\x06\x00@\xa4\x98\x1a;\
+\xf4\x84\xeb\xe5y\xdc\x8c\x9a\xf5(6\x1a!!\xc0\x1d\xd7F\xceh\xb3\x91\xce\xa62\
+\xc5\x11\xd2-p=\xaa\xcc\x89\x94\x8f\x9c\x83LG\xa3B,7]\x9cx\xd8}y\xa8\xec\xc8\
+\x85\x02\x8dF\xf3x\x824\xa0\xc1] \x103\x12\xb3\xa2\xe9\xe4\t1\x10L\xcaS!5\
+\x01\xb8i r\x167k^\xce\xcb\x0euWv\xd6\\\xe1aE\x18\xeb1\xeb\xba\x89\x1exC\x87\
+\x89i?\xe4\xde<\\\xb4\xe5\xae\xd1hv\x0c\x91\xff\x15\xf0\x18\x01\x83\xc8\x8c9\
+\xe1\x8cr\xd3\x89cdH,\x0b\x80#\x02\xa1\xf5jv\xb8\xe8\xe5z&\xe6\x8d\xab\xf3\
+\x00\xad}<\xba\x86?Z\xa9|*\xb7\xf7!vcK\xd0\xe2\xae\xd1hv\x06<\xae\xd1\xc6\
+\x1d \x10E\x10RN\x08\x8f\xa38b$\n8 \xb1\x08DqL0\x1e\xda3b\xa7z\xee\x94\xc4\
+\xa3*\x8fk\xd0g\x1d\x15\xc0\x1b\xde\x19\xdbq\xf4G\x8b\xbbF\xa3\xd9\x19D\xfeW\
+\x80\x1c\x01\x1a\x11"\x07\'\x97\x8e(E\xca\x18r\x02\xc0\r\xd30\xa08<j\xba^\
+\xbfJ*\xd7\xc5v\x1e\x94b\xd7\xf0G7\xb7\xc7N\x17\x1f^/\xb6\x0c-\xee\x1a\x8df\
+\x07\xc0B\x9f5V\x80@\x18!e\xc8\xc1\xa9\xd7\x9aa\x18\x03\x80A\x08\x00\x10\xc3\
+\x04d\xc5\xd1\x91~\x954Wx\xb4\xdee\x13\xed6\xc4\xb0\xd2C;8\xfcQE\x8b\xbbF\
+\xa3\xd9\x01\xc4\xfeM\x04$\x08\x94A\xca\x86\x18\xdd\x80\x12\x1a\xc7\x00\x04\
+\x00\x01\x01\x01\x10\x91\x06u\xd3\xee\x91\x07\x06Y\xe4_\x07\x00\x02\x10Q\xc4\
+nf{\xaa8a*\xf9\tv4Z\xdc5\x1a\xcdv\x876Wi\xb0F\xc4f\x1a\x06\x18@L\xc2\xb8\xed\
+2\xca\x84\xb2\x03 "\xb1,b\xb9\xe9\x9e\x95\xd4\x97D\xb2\x01\xd6#\xfc\xd1\xb0\
+\xd3\xe9\xc2\x81\x87\xd8\x8d\xadE\x8b\xbbF\xa3\xd9\xe6`\xec\x7f\x05\x00\x08\
+\xc08\x02\x00\x021\xb0\x91K\xd5\xa87\x1c\x86\x9cs\x06\x00\xa6AFG\n\xa6\xd3\
+\xdd\xeeF\x16\xb5\x82d\x00b\x8a]\xdfZ\xf2\x86\x8ft\xbe\xc8\xbas\xd9==\xd1h4\
+\xbb\x12\xdaXf\x91/\xccv\x19\xb9\x88@ XqS\xa1\xe3flo\x8fiY\xb6\x932\xad\x9e\
+\x89y\xe3\xea<\xf2\x18\x00\x10\x81wK\xdan\xa5\x8bnv\xec\xa1u\xe2\x11\xa0\xc5\
+]\xa3\xd1l_\x10Y\xd46\xdb\xd5%P\x02\x00@\xe2f\xd5\xb4\xe3\xcc\xde\'\xba\x19\
+\xe2\xb2\n\x86q\x85\xd6n\x89"\xdd\xcdvB2#\x93\xdf|\xeb\x1f)Z\xdc5\x1a\xcd\
+\xf6\x85\xd6\xef\xf0\xb8A\x00(\xef\x92\xb8\x91\xb4\xb66\xed\xa6\xec<\x00ZCZ\
+\x8d\x9a\x15\x1e\xd5\xc5\xce\xa8\x9ccWo\xbb\x9b\xdb\xb7\xe3v\xd1\xbb\'Z\xdc5\
+\x1a\xcd6\x059\x8d\xfcy\x10\xde\xf6n\x91\x8bf\xaa\xe0f\xf7(\x070\xe0M\xa0U\
+\x16\xf9a\xb3\x1a4\xa30\xa4\x94\xf1\xa1,1\x0c\x02\xd8\xddl\'\xa6\xed\r\x1f~\
+\x98\xfdx4hq\xd7h4\xdb\x94\xb8\xb6\x88, \xbd\xf2\xad\x13\x92+\x1d\x03\x00\
+\xe0!\xf0:F\x958\xac\x05\x8dz\x18\xd2(b\x94qD@\x00\xdb$\x86A\x00\x80\xf2\xee\
+{-\xa5\x8b\x07w\xe2.z\xf7D\x8b\xbbF\xa3\xd9\x8e \x8b\xe3\xea-\x10y\x02x\x17\
+\xb3\xddIgY\xe4\x87\xd5y`\xf5\xa0\x19\x85\x11\xa51\x17\xe14@\x80\x00\x18\x06\
+\xc4\x0c,\x8b\x10h\xbd\xb5\xd4m\x17=/\xb5\x8b\xc2\x1fU\xb4\xb8k4\x9a\xedHT\
+\xb9\x8e<\x02\x80\x98w\xbcpD\x802\xb8s\xbb\x16\xce\x7fQ\xf4\xc04\x90\xf3\x96\
+\xa0\xab;\xe2q\x04\xc6\xc1\xb5\x10\x10\x82\x18\xc2\x08\x88\x01&\x01\x00@\x04\
+\xc3\x00B\x8c\xcc\xe8\xb1\x1d\xba\x8b\xde=\xd1\xe2\xae\xd1h\xb6\x1d,\xac\xc4\
+\xf5\xdb\x00\xc09p\xd6\xe1%\x07X\xab\xe1J\x85\x8e\xe6\r\xd3 \x88\x9b4]\xbe\
+\xd5\x141b\xdbF\xdas,\xcbD\x1b\x89IM\x03\x08gB\xdb\xc3\x98\x071)\xda;x;\x8e\
+\xfehq\xd7h4\xdb\r\x8c*7Z\xe9\xbdXr\t\x94\x10\x08bX\xafq\xcf52)\x82\x002\xf4\
+\x1d\x11\x00\x90\x18\x86m\x99\xaek9\x8e\xe9\xda\x06A\x16\x061\xa5\x0c8\xa71"\
+\x10B\xc04\xb9k\x11\xbfA\xe38\xec\x13\x1d\xbf\xa3\xd1\xe2\xae\xd1h\xb6\r\xac\
+\n\xbcJ\x9bwY\xb0\x0e\x04X\xb7\xf0G\x00X\xabr\xc6a8M\x0c\x02\x1c[\xb2nZ\x86\
+\xebZ\xaec9\x8ei\x12\xe4\x9c\xd1(j\x04\x8cq\x04D \x04\x89\x83\x04\x0c\x8c\
+\x01yL\xc120\x93",\x0e!\xbd\xdb\x82 \x05Z\xdc5\x1a\xcd6\x80\xc7\xf1\xdd\xcf\
+\xeb\r?\x8c\xd01\xa8m\x11\xc0.\xe1\x8f\x84@#\xc4J\x03\xbd\x14I9\xc0\x18p\x04\
+\xc71\x8aE\xcf\xb1\x08pN)\x8d\x9a\x11\xa3\x8csq\x00\x10@Nl\xf0\xc6M\xb7\xc8\
+\x18\x1a\xd8\xc4\xfau\xc2#\x86\xc4$@\xe3p\xeb\xfb\xba5hq\xd7h4\x8f\x1c\xac\
+\x95/\xaf\xdf\xbdK)"\x80\x9b5\xba\xbf\xb5D\x00\x00\xd6j\x08\x00Y\x97\x10Bl\
+\x87\xd8&\xb1-\x03\xe3\xb0\xde\x10Fz\xfb\xed\xd5\x8d#I-\xc8\xf0(6\xcd\x15B\
+\x08Gbc:mE\xa2$\x8d\x9a[\xd9\xcf\xadD\x8b\xbbF\xa3y\xc4D\xcd\xca\xfa\xdd\xbb\
+\xc2N7\x0cb\x99\x80\x08Ld\x80i\x07\xb7p\x0e\x8c#\xe3$\x932F\x0b\xc4\xb5\r\
+\xc3\x00\x82\xc8\x11\x19\xa54nE\xcbt:q\x10\xc0\xcb\xa6\xea\xa1A)\x05@ f\xda1\
+\xc5\x9f\x0c\x00\x1a\x07[\xd8\xd1-E\x8b\xbbF\xa3y\xc4\xc4Q$b\x19)\x03\xcf\
+\x06\x02@9"\x02G`\x0c\x18\x07\x04 \x84X&q\x1c\x925\x00\x119g\x9c\x82\xf0\xda\
+\x10\xe8\xbf)\x1e:\xc4\xb7\x0bc!\xcdp\x8e6\x89,ZC\x06\x00@\x08p\x1a"b\xd7}\
+\xb4w:Z\xdc5\x1a\xcd#\xc6I\xe5\x80\x10\xe4H\x19\xba\x16!\xa6\x19\xc5\x18D\
+\x94\x10b\x1a\xc4\xb1\x89i\x00!\x88\x1c\x90s\xca\x01\xda\x06\xfa \x92L\x80\
+\xb0\xa8a\xb0\xf9\xb4\x9d\x02 H\x03\xce\xa8<\x14Y\x84\xc8\t1\x1fV\xdf\x1e\
+\x1d\xbb3z\xff1\xc1\xf7\xfd\xf9\x85E\xdf\xf7\x07/\x10\x86a\xe7!\xf3\x0b\x8b\
+\xcb\xe5\xf2Cl\xe8\xfd\xb3\\.\xdfo\xabf._\xe93\x14\xfd\x0f\xb9p\xf1\xd2\xfd\
+\xb5\xef\x9b8\xfb\xf6\xc1\xf7\xfd\x99\xcbW\x1ea\x03l7\xedx#\x84\x90\x91\x91L\
+a\xb4\xe0d2\xe9\x94\x95v\x0c\xcf%\xae\r\x06\xe1\xc89c\x88\xd8\x8a{\xbc_3\x9b\
+\x10\xc29\xa7A\x9d\x865\xc6\xd8\xa6\n\x90\x89\x08\xca\xdd\x87\xb6\xdcw$a\x18\
+\xbe\xfe\xc6\x9b\xae\xeb\x8e\x8d\x95fg\xaf\xf9\xbe\xff\xf2K?q]W-3s\xf9\xca\
+\xef\xde:;1~`\xb9\xbc\xf2\xec\x99\xd3g\x9e9\xed\xfb\xfe/^}m\xac4\xba\\^\xf9\
+\xd1\x0f\x7f05y\x14\x00\xfe\xf1\xd5\xd7\x00 \x08\xc3\xa9\xc9\xa3/\xbe\xf0<\
+\x00\xfc\xf5\xdf\xfc\xad\xac\xe4\xe7\xaf\xfclb<\xf9r\xb6\xef\xfb\x7f\xf7\xf7\
+\xff\xd0\xf5O\x9d\xcc^\x9b\xbbp\xe1\xd2\x7f\xfc\xab\xbf\x1c\xb0k\xcb\xe5\xf2\
+\xebo\xfc6\xe5\xba\xae\xeb\x84a\x14\x84\xe1\x9f\xbf\xf2\xd3|>\xaf\x96\xf9\
+\xc7W_;s\xe6\xb4h\xff\xc6\x89f\xaf\xe5\xf3\xf9D\xc9\xfe\xcd\x96\x87\xbc{\xee\
+\xfc\x99gN\xab\x85\xe5 \xb8\xae+F\xaf\x7fG\xeey\xf6^t\x9e\xe8~k\xf8\xfaT\xfc\
+\xea\xec\xec\xb5\xe9S\'\xb7\xfe\xd4\x92\xa1\xe1\x91\xc8X\xb5l\xde\xf0\xeb4\
+\xa6\x88H\x00\x90\x03\xb6=._\xd3oB\xa0\xbb\xef\xc6\xb4\xcc\xfe>\x9d\x9d\x8b\
+\x16\xf7\x9d\x87P\xf63g\x9e)\x97\xcb\xf3\xf3\x0b\x13\x13\xe3\xd3\xd3\'_\x7f\
+\xe3\xcd\x84\xbe\xcf\xcf/\xbc\xfc\xd2O\xa6&\x8f\nM?\xf3\xcc\xe9\xcff\xae\x08\
+\xf9\x98_X<w\xee\xfc\xd4\xe4\xd1\xd9ks\xae\xeb\xfc\xfc\x95\x9f\x85a\xf8w\x7f\
+\xff\x0f\xcf\x9e9-j\xf8\x1f\xff\xfd\xbf\xf5i\xc0G\x17.\xe5\xf3\xf9\x99\x99\
+\xcb}\xc4\xfd\x97\xbf\xfa\xe7\x9f\xbf\xf23\x00\x18d\x02\x90\xf8\xbe\xff\xcb_\
+\xfdZN<\x000\xbf\xb0\xd8\xa9\x98g\xce\x9c\xbe\xafj\x07o\xb6\x8a\x18\x04\xdf\
+\xf7\xff\xe9W\xbf\x9e\x9a<\xfa\x00g\x94\x83p_\'z\x80\x19b\xa7\x83\xb4\x19U\
+\xaeG1\x86a\x00\x00\x84\x00\x1a.Gb`D\x80\x7fma\xef}^\x00\xcb4\x8d]\x9a~`w\
+\xf6jw3s\xf9\xca\xc4\xc4\xf8\xfc\xfcB\xa5\xe2\x9f9\xf3L\xa5\xe2/,,NMM&\x9e\
+\xac\x85\xb2\xab\xdf\xcc^\x9b\x13\xdfL\x8c\x1f\x08\xc2\xd0\xf7\xfd\xf9\xf9\
+\x85\xa9\xa9I\x00p]Wh\xbd(\xb9\\.\xf7r2\x08\xc7\xce\x9f\xbf\xf2\xd3\xd9ksj\
+\x99\xf9\x85\xc5\x0b\x17/\xcd\\\xbe"\n\x88\xffD\x81|>\'\xbeT\x0b\x87a(\x9at\
+\xe1\xe2%\xf9\'\xd1B\xb5\xd9RRE\x93.\\\xbc\xe4\xfb~>\xbf\xf1\xd6\xc9\xcc\xe5\
++j\r\xbd\xe8\xd5\xec{\x92\xcf\xe7S\xae[\xf1\xab\xa2#\x89\xce\xfa\xbe/k\x0b\
+\xc3\xf0\xc2\xc5K\x17.^\n\xc3\xb0s\x10DO\xe5\x08\xf7?Q\x18\x86\xa2_\xb2\xf2\
+\xe5rY\x0e\xaf\x1c+\xb5\xe3r|\x84GKV+\x87Z\xd6 \xff$\xca\x8b\x06\x0f> \x0f\
+\x83\xda\xdd[A\x10\x01\x02!\x04\x810g\x1f\xc9?!\xfe\x03+\x8f\x0f\xcfm\x82\
+\x00H\xb9X]\xdduhq\xdfy\xcc\xcf/\x08/\xc1\x8f~\xf8\x83\x89\xf1\x03/\xbe\xf0\
+\xfc\xf8\xf8\x81\xe9S\'\xe7\xe7\x17\xba\x96\xff\xdd[g\x9f=s\x1a\x00|\xdf\x97\
+Va!\x9f\xab\xf8\xd5M\xdf\x14\xf2\xe2&w]\xf7\xdc\xb9\xf3\xff\xf4\xab_\xff\xf2\
+W\xff\xdcY\xdb\xcc\xe5+\x13\xe3\x07\xf2\xf9\xfc\xf4\xa9\x93\x9f\xcd\xb4\x94b\
+\xf6\xda\xdc\xb9s\xe7E\xdbf._\xb9p\xe1"\x00\\\xb8pq~aq\xb9\xbcr\xee\xdcy\xd7\
+u\x7f\xf7\xd6Y!:\xbe\xef\xff\xee\xad\xb3\xae\xeb\xbe{\xee\xfc\xec\xec5QRx\
+\xbd\xc5\x83\x88\xa8SJ\x8f8J4)\x08B\xf1y\xb9\xbc\x02\x00j\r\xe2\x9b^tmv\x7f\
+\xc4\xd9_\x7f\xe3M\x00\x10\xde-\xd1G\xe1\xef\x02\x80\xe5\xe5\xf2/^}M\xea\xf5\
+\xbb\xe7\xce\x8b/_\x7f\xe3\xcd\x8a\xef\xab\x830\xbf\xb0x\xe1\xc2%\x00\x98\
+\x99\xb9\xdc9\xb5$N\x04\x00\xbf\xfc\xd5\xaf+\x15\x1f\x00^\x7f\xe3\xb7B\x9d_\
+\x7f\xe3\xb7b|\xc4ht\x0e\x9d\x1c\x9fT\xb7\xa1\x9e\xbd6\xf7\xd6[o\xcb\xe6A\
+\xfbA!\x08\xc2 \x08E\xcb\x1f!Q\x14\xb5\x9d/\x181\xaf\xe2\x13\xbf\xbc\xd2X[\
+\xad\xde\xad\xf9\r\x0f\xe0\x1bZ\xedD\x8e-\xf8\xc6w,fq\xf4\xcd\xd4\xbf\xcd\
+\xd0n\x99\x1dL\x18\x86\t?{\'B\x86\xee\xcb\x93\xfb_\xff\xcb\x7fv]7\x0c\xc3_\
+\xfe\xea\xd7\xd2\xd8\x97|6s\xe5\xe5\x97~\x0c\x00\xd3\xd3\'\x7f\xf9\xab_\x0bO\
+\xce\x85\x0b\x97^~\xe9\xc7r\x9e8\xf3\xcc\xe9\xbf\xfe\x9b\xbf\x15\x1e\tiE>9}r\
+v\xf6\xda\xc4\xf8\x81\xcff\xae<9}2\x0cC1?\x01\x80\xea\xf5N\xf4H\xccXB\xf2\
+\x9e=sZ\xf5\x0b\x8b\x1a\xfe\xeb\x7f\xf9\xcf\xe2\x8c\x7f\xf7\xf7\xff\xd0\xa7S\
+]\x9b}\xcf\xa1\x98\x9d\x9d\xcb\xe7s?\x7f\xe5\xa7\xea\x97\x1f]\xb8\xd4\xb9\
+\x0c\x00\x00/\xbe\xf0\xbc\x18\xab\xbf\xfe\x9b\xbf\xfdy\xa9\xf4\xf3W~&\x07\
+\xe1\xc2\xc5K\xae\xeb\x8c\x8f\x1f\xe8\xf5C\xa8\'\x9a\xbd6\x97\xcf\xe7\xe4$7;\
+{\xcdu\x1d1J\xe2\xf0^C\'\xc7\'1\xd4\x00p\xe1\xc2\xa53gN\xbb\xae[*\x95~\xf7\
+\xd6Y\xdf\xf7\x85\x8fN\x94/\x14\xf2b\xaaxT\xd8\xa9|\xd0\xbcc\x12\x00\x04\xd3\
+6m\xcbaq\xcc(\x03BR\x8ei\x18\x06r\xf6u\x9d3\x84@j\xaf\xe1\x0c1\xc6Mv\x17\x83\
+\x96)@\x009\x8b\x00\xbco\xa0\x1b\xdb\x0c-\xee;\x8f\x89\x89\xf1\x99\xcbW\x9e\
+\x9c>\xf9\xee\xb9\xf3SS\x93\xb3\xb3\xd7\n\x85|\xb9\xbc"\xe5@\xf2\xbb\xb7\xce\
+\x96\xcb+R\x9b\xf2\xf9\xbc4\xd5+~\xb5\x90\xcf\x89o\x00\x0e\x00@\xa5\xe2\x8f\
+\x8d\x95\xa0-\xaf\xae\xebNM\x1dM\x98\x99\xc2\x11!\xd6`\x05\xb3\xd7\xe6\xa6O\
+\x9d\\.\x97\xef\xe9)\x9e>u\xf2\xff\xfc\xbf\xfe\xef\x17_x~\xe6\xf2\x95\xff\
+\xf4W\x7f\xb9\\^\t\xc3P\x98\xb7\x00P\xc8\xe7D\xd7\x84*\x81\xa2e\x92\xc4)\x96\
+\xcb+\x05\xc5?\xa3~N\xd0\xab\xd9\xfd\x1b|\xe6\x99\xd3S\x93G\x7f\xf1\xeak\x89\
+I4\xf1\xb8#\xbf\xef3[\x88s\t\xeb\xbbsbH\x9c\xc8\xf7\xfd\xe5\xf2J\xd8\x1e\x99\
+R\xa94V*={\xe6\xf4\x85\x0b\x97~\xf7\xd6\xd9\x1f\xfd\xf0\x07b\xeaM\x0c\x1d(\
+\xe3\x93\x18j\x00X.\x97gf.\xcb\xf2A\x18\x96\xcbey\xc1<r/\xbf\x97\x1f\xad\xaf\
+\xcd\x99\x06\x03$\x16\xd6\n\x99\xb4\x93\xceS\x06H)\x89\xd6h\x18\x7fm\xb7;\
+\xd6\xc3,\xe7\x9e\x15S\xc30BV0Y\xdd1\x1b\xe2\xc5\'\x1a5]\xaf\xf8\xcd\xf4d;\
+\xa1\xc5}\xe71}\xea\xe4\xebo\xbc\xf9\xc2\x0b\xcf\x03\xc0\xcc\xcc\xe5\xb1\xb1\
+\xd2\xf8\xf8\x81\xb7\xdez;a`\n\x9b]\x8d\xee\x10^u\xb1\xa0\x9ar\xdd|>?11>3sy\
+\xfaT\xcb\x8e~\xf1\x85\xe7\xe7\x17\x16\xcb\xe5\xb2P\xd5\xf9\xf9\x85\xe9\xe9S\
+j\x9d33W~\xf4\xc3\x1fHY\x9c\xb9|\xe5\xa3\x0b\x97\xa6O\x9d\x9c\x9a<:\xbf\xb08\
+1~@:v:\x9b\xed\xba\xaeh\xb9p\x8f\xe4\xf3y\xd7u\xc5"p\x18\x86\x15\xdf\x17-\
+\xfc\xc5\xab\xaf\x15\nIY\xef\xca\xc4\xf8\x81\xdf\xbduV\x08b\x18\x86\xd2-3{mn\
+b\xfc\x80\xda\x86^\xcd\xbe\xe7)\xf2\xf9\xfc\xb3gN\xbf{\xee\xfc\xcb/\xfdD\x1d\
+\xc6\x0b\x17/\x89\xe8#i\x1a\xdf\x93\xe9S\'\xcf<s\xfa\xdds\xe7\xc5O\xd0\xe7D\
+\xe3\xe3\x07\xe6\xe7\x17\x84\xc9\xbf\\.\x17\xf2y\xd1\xd9\xe9S\'g\xaf\xcd\xcd\
+\xcc\\\xfe\xf9+?\xeb\x1c:\x95\xc4P\x8b6OO\x9f\x12\xb3\xe6\xfc\xc2\xe2X\xa941\
+1^.\x97\xc57\xe5v\xc8\xa9\x88=\x1d+\x95\x06\xe9\xd17\x88e\xbb\xe9\xe2\xa1\
+\xa82g\x8a\x97N\xebw\xe2h\xdd0MNcF\xbf\xbe\xb2\x03\x00q\xd3\x99j#\x8cCN\x00\
+\x11\xcd\xac\x9b"\xa4\x81"\xa5\x98\xb1\x0b\x83\xdcA\x8b\xfbND\xdc\xd8\xaf\
+\xbf\xf1f>\x9f\x1f\x1b+U*\xfe\xfc\xfc\xc2\xcb/\xfd\xb83\x14R\xfe\x0b\x00\xff\
+\xe3\xbf\xff\xb7\'\xa7O\xfe\xe2\xd5\xd7\xe6\xe7\x17D($\x08\x9d\xbap\xe9\x1f_\
+}-\x08\xc3\xe9S\']\xd7-\xe4s\xaf\xbf\xf1\xe6\xfc\xfcB\x18F\xa5\xd2\xa8\xea\
+\x93\x99_X\xac\xf8\xbe\xfa\xcd\xd4\xe4\xd1w\xcf\x9d\x9f_X<s\xe6\xf4/\x7f\xf5\
+\xeb\xb1\xd2h\xc5\xaf>9}\xf2\xcc3\xa7\xc7J\xa5\x7f|\xf5\xb5\xe9\xe9\x93\xaaU\
+855\xf9\xcb_\xfd\xb3\x14\xcag\xcf\x9c\xfe\xbb\xbf\xff\x07q\xd4\xb3gN\x8f\x95\
+J\xf9|\xfe\xe7\xaf\xfc\xf4\xf57~;;;\'|\x11\xf3\x0b\x8b\xa2\xa9]Qk\x90\xdd\
+\x17\xdem5\xde\xa6W\xb3\x07\x19m\xe1\xa3W\x0b\xff\xe8\x87?x\xfd\x8d7\xdf=w>\
+\x9f\xcf\x8f\x95F\xfb\x1c+\x07!\x0c\xc3\xcff\xae\x88u\x8e?\xdf<\x07w\x9eH(\
+\xf2\xdf\xfd\xfd?\x88\xf2/\xbf\xf4\xe30\x8c^\x7f\xe3M\xd1M\x11\xae\xda9t\x89\
+\xda\x12C-\x7f \xf1\xb3\x8a\xa9\xe2\x97\xbf\xfa\xf5\xeclk\xc1@\x8c\xb6\xf8\
+\xdf\xad\x17w\x00(\x8cN\xac\xd10\xae-Y\x06\'@X\x1c\xb2\x18\x00D\xe8\x0c\x00\
+\x01\xf8\x1a\xab\xaa\x88\xe8X\x8d\xc2\xd0X\x10\x01"\xda$v\xb1)\x96Q9\xd8\xbb\
+\xd2l\x07\x00\xf2\x10W\xa25\x0f\x19\xdf\xf7\xa5we\xc0C\x84\x85\x9b8d~a\xd1u\
+\x1dyK\x8b2\xea7\x0fPs\xd7\x13\r\xd8\x1e\x00X.\x97\xc30\x1a\xa4\rb\x10\xc6J\
+\xa3\x83\xf8\xd0\xbfq\xde=w\xbeP\xc8\xf7z\x08P{\'z4x;\x13\xfd\xea\xfc\xad\
+\x07\x1ca\x95\xc4\x0f\xdd\xf5\x9bGK\x14\xd4\x83\xc6:\x8b\x1a\x80\x94\xc5!"\
+\x03N\x018g\x8c\x00\x07\x10q\xefHHWc\x9e\xb4\xfe\xe9&i\x88h:)\xc3\xcer\x8e\
+\x18W\x91E\x00\x84q\xf0FOd\x87\xf6=\xdc^="\xb4\xb8k4\xf7\xc7\xebo\xbc96V*\
+\x95J\xbe\xef\x7ft\xe1\xd2\x7f\xfa\xab\xbf|$\xf3\xca\xe3\x02""g,\xa6\x8d2k\
+\xdc\xaa\x86\xf98\x8a)\xe7\x06A\x038\x10$\xc0\tp\xd3@\x03\xa8a\x00G\x93\x10\
+\xf1\xde)kW\xd0zK\xc9 \xc2\x0b\x03\x00\x84#A\xc3\xf5\x86\x8fd\x8b{\x1fa\xe7\
+\x1e*Z\xdc5\x9a\xfbc\xb9\\\x9e\x99\xb9"\x96U\x9f=s\xfa\x91\xafF>&D\xfeM\x08\
+\x97\xc1\x1a[\xb9\x1b\x07\x14L\x83\xb0v@#\x01\xdc3d\x86\xe1\xdd\x8cMy\xe6h\
+\xdc\xac\xc4\xcd5\x1a\xd5\x11\xc1 \xe0\xb9\x04\x01\xb85D!E\x90\x11\x02\x1c\
+\x0c\']\xf0r#\x86i?\xd2>=\\\xb4\xb8k4\x9a\x1d\x80\xbf\xfc\x85Co\xbb\xe9\x92\
+\xdft\x10\xa0\x1e`\x10#!\x04\x11-\x83\xec\x1f6W\xd7\xcb\x9e\xd5\xe0h\xd0\xf6\
+\x16\x1f\x08\x90u!\x9d&\x80\x00V\x01\x8a\xdfz\xb4]\xd8b\xf4KL\x1a\x8df\x07\
+\x10Ea\x18s\x1e\xafy\x0e-d,\xdb\xb6,\x93\x98\x06\xa4\x1d\xa3\x901\xa3(\xe6,\
+\xa86QUv\x93@\xca!\xc0\x01\x10 \xae@\xe3\xfa\xa3\xed\xc2\x16\xa3\xa3e4\x1a\
+\xcd\x0e\x80\xd1\xb8\xd6\x00\xcb\x88\x11VjA\xb1\x90\xc9\xa7m\xe4\xc8-\x93\
+\xb0\xb8Y\xad\xdf\xe5\x9c!\x92\x8d\xdd\xb4\x11R.\x10CY_\xad/\x80=\x02\xf6\
+\xe3\xe2F\xd3n\x19\x8dF\xb3MA\x1ec\xdc@Z5h\xe5\xf6\xf2j\x10q\xcb\x00\xcf\x85\
+\x88"\x80E\x0c\x0b\x08AN9\xa3\x00\x88H8\x82\xe7\x12h\x9b\xedC\xd9\x8eM8L\x0f\
+\x86\x9e\x81\xdd\x98\xbd\xbd\x13m\xb9k4\x9am\x04\xf2\x18i\x83\x87\x15\x1e\
+\xf9\xad\x98E\x02\x88\xc0\x18\n\xa1nF`\x19\x04\x80\x02\xa7\x00@\x00,\x93\x00\
+\x90\x88n\xe4\xeeE\x84t\xc2l\x17\xb0\x06\xd4o@vrK\xbb\xf4\x88\xd0\xe2\xae\
+\xd1h\x1e)\xc8\x90S\xa4\r\x1eUxT\xc5\xb8\x86<n\xa9r[\x9a9\xdf\x88h\x14\x1b\
+\xa5\x9a\x84\xc8hw\xde*\x80\x86A\x08\x01\xce\xc12 \xe5\x90\xee\xef=5oAz\x1f\
+\x98\xbb0\x99L\x02-\xee\x1a\x8df\xcb\xe1\x11\xd0:\xc6>\r*\x9c6\x81\xc7j\xa6\
+\xc6\x04\x04\x80#pT\xfe_\x01\x01\x00A$\x120\xdao0eR\xdd\xccvyD\xf5\x0b(<\r\
+\xbb4\x8d\xbb\xe4\xff\x07_\xffI\xbb\x17\xf3\xcc{\x00\x00\x00\x00IEND\xaeB`\
+\x82' 
 
 def getSplashBitmap():
     return BitmapFromImage(getSplashImage())
@@ -1995,30 +2854,2073 @@ def getSplashImage():
     stream = cStringIO.StringIO(getSplashData())
     return ImageFromStream(stream)
 
+#----------------------------------------------------------------------
+def getIDESplashData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\xf4\x00\x00\x01\\\x08\x02\
+\x00\x00\x00\xb1\xfb\xdb^\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\
+\x00 \x00IDATx\x9c\xec\xbdg{\x1cIv4\x1a\'\xcb\xb4G7\x00Z\x90\x1c\xb3\xb3\xab\
+u\x92V\xaf\xfc\xfd\xff_\xde+w\x1f\xadV\xd2:ifg\xe8\t\xd3\xbel\xe6\xb9\x1f\
+\xd2TVu7\x087C\x80\xac\x18\x0e\xba\xcbg5\x1a\x91QqN\x9e$fF\x8b\x16?8\x98\xd5\
+\xeb\xff\xfdgU$\x00\x18`\x06\x11\x88\x00\x80\xf4\x0e\x00\x01Df\x93 \xbd\x03\
+\t\x02\x01B \x0c\x83N\'\x8ez\x03t{\x10\x02y\xaaV\x8b"O\x95Tl\xcf\xc9\x0c\xc5\
+\x90\nJ1\xdb3_\x1f\x04*\x14\xa79\x1f>\xfd\xf3\xd1\xf8\xfe\r\x9d\xb5E\x8b\x9b\
+D\xf8\xa1\x1b\xd0\xe2\x13E\xb2<\x91E\xa2\xd9\x96\x00\x06\x13H\xbf\xd7\xcb\
+\xfa\x8d\x95\x1ed\xa8\x99\xa1\x00AP\x8c\xb2\x94\xe0\x9c\x15G\xb2\xa4N\x17"\
+\x10\xddA\x04\x94y&\x95\x04\x83\x08\x0c\x10\x81\x00E\xa4\x14\xd4\xcdI\x19\
+\x02\x02\x81\xf9\xc9\xcb\x96\xdc[\xdcN\xb4\xe4\xde\xe2\xc3`q\xf2\x9d\xe5r\
+\x80A\x9a\x83a\x165\xc8*z\xbdR\xd3\xba~C\xccL\xc4,%\xab\xb2,\xc3,\r\xa3X\x88\
+@\x880\x08\x99\xcbB)\xc9\xcc\xfaX!@\xac\xbb\x04RF\xce3\xae*\xe4\x89\x88\xcd\
+\xe1\x94\xae\xce\xf2t\x1dw\xfbW\xfe\x1cZ\xb4\xf8\x9e\xd0\x92{\x8b\x0f\x80,\
+\x99\xe7\xc9\\Xr%\xf7\xc6\xee\xc0\xd6\x901\xdb\xb5\xb6g(f"\'\xf7\xa1\x00\x96\
+\xacTYJ\x15\x16e\x18\x04$\xc8\x1c@\x02P`\x08\x02\x13X1\xeb\x07\x02\x063\x84a\
+\xf9+y5\x0c\xae: ^/\xa7-\xb9\xb7\xb8\x85h\xc9\xbd\xc5\x07\xc0j\xfa\x1a@\x18 \
+\x0c\x90\x16\x96(\x19\x10\x865\xc9x3\x15\xef3X\xef\x02M\xc8d\xdf\x00\xcc\xcc\
+\xac\x94RR)m\xca\x9bC\xd8\x9e\x83H\x04`fR\xac\x8c\x15\xaf;\x0f\xd2\x0bl\xfb\
+\x91\x8b\x10=\x83\xddQ\x00\xb2dqc\x9fK\x8b\x167\x87\x96\xdc[\xfc\xd0P\xaaL\
+\x16\xef\x08P\x8c8$\x02\xa7\x85g\xbf\xd8Pj\xe5\x8e[\x0b\x9e\xedV03 \x88\x98\
+\x8dS/\x98\x15\x11C\x911\xd9\xf5\x7fL\x04f\x16B\x08\x11\x88\x80\x02\x86b%\
+\xa5RJ)f\x023\x81A\x9a\xe5\xf5\x897]y\x9f\xf1u\x0f\xc3\xde\xbf<O\xbf\x9f\xcf\
+\xa9E\x8bk\xa1%\xf7\x16?4\xd6\xf3c%\x0bAP\nE\xc9\x9d\x88\x88x\x9dU;\x98$\x19\
+#\xdb\xa9F\xf4\x004\xfb3\x14X\xebv\x10\x14\x00\xb0P\xc6\xc0!\xb0\x16\xf76\
+\xdfF1#@\x18\x86A("\xa5X\xca\xb2\x94RI\xa54C\x1b\xc3\x9f\x98\xc8\x08r\xd8\
+\x87\x05\xef\xe2\x8c\xca\x93Q\x0c\xa57+\xf5}}R-Z\\\x03-\xb9\xb7\xf8\xa1\xb1\
+\x9e\xbdr)1\x85D\x1c"\x0e\t\xc4If\xa8\xf3b\xde\x08\x1c\xf5\x92\xfd\xa9\x00\
+\xe1\x8c\x1b\xd7=0\x88\xa0X).\x14s\x14\x86a\x14\x86Q\x1c)%eY\x16E\xa9\x95\
+\xbc9\x0eV\xf4\xbbv\x98\xf0)[\xd2W\x0c\x9dx\xa3\x14\xb6\xe8\xfc\x16-n\x07Zro\
+\xf1\x83"O\x16\xd9\xda\x86R\t\x92Q(\x8e\x03\xd2\xfe\xcc:\x03\x18$\x1c\xb5\
+\x92\xd5\xed\xdbI\x94\xeb\xfc\xaeC\xa8l-{\x97l\xc3\x0c"V\nJ\x16R\xcaP\xca(\
+\x8a\x830\x8c\xc2^\x14\xc5eY\x96eQ\x96R\xbb\xf6\xda\xc2\xaf\xba\x18\xc7\xecl\
+r\xe7\xa5&wE|N\xcbZ\xb4\xf8\xd0h\xc9\xbd\xc5\x0f\x8a\xd5\xec5Y\x07]\x13w^ \n\
+@\x8c8$\x06\'\x99\xa5L\xcf\x82\xdf\x0eg\x9ap\xb5B[$\x04\x90\x97CI\x04\xd2\
+\x14M\x90\xacJY\x14\x85\x0c\xc2 \n\xa3 \x0cE\x10\x84$\x84\x90\xa5\x94(K\xa5\
+\x14\xab*!^\x814\xdbkrW\xca\x182J\xb1^\x13\x84\xd1\xcd\x7fL-Z\\\x1b-\xb9\xb7\
+\xf8\xe1\xa0d\xb1\x9e\xbfu\xb1Q"bp\xa9\x90\x15\xdc\x8b\x89\x19\x9d\x90\x989\
+\xcd\xf5\xee6\xe9\xf1\x02\xe2\xd8\xd82\\\xd9:~\xf6\x0b\xd9\xfc\x1a\xed\xd6\
+\x13XIU\x96\xb2\x08J!\x02!\x88HX\x81\xaf\xf3u\x04\xb32\xf1[\x86M\x8d7\xfa]*\
+\xd6\x14\xaf\x17\xbb\xbd\xd1\x8d~H-Z\xdc\x0cZro\xf1\xc3!Y\x9c\xb0*\x9c\x0f\
+\xae-v\x02\xb2\x02a\x80(\x00\x03\xdd\x88\x94\xe2\xbc4\x878\x05\xedj\x12\xf8\
+\xf0\x17m\x86\xa3If\x07\x81X\x87\\-\xc5\xdbc\xaaG\x02%\x89t\x82\r\x99\x9e\
+\x84H)\xe5\xa4:\x00\xc5\xec3\xbb-f`\xae\xae\x18\xbd\xc1\xde\r~D-Z\xdc\x14Zro\
+\xf1\xc3a9}\xe5\xdek\xd9\xae\xdf3\x90\xe6\x1ctM\x8az/&\xc5,\x95\xdb\xb8\r\
+\x1b\xab\xab\x14\x17\x9b\xceH\x80fw\x9bBSY=\xde#\x81~\x88`7@\xd6\x1d\xee\xfb\
+\xec\xfag\x15G\x85\x89\xfd\x8a0\xea\xf6\x86\x97\xfe Z\xb4\xf8\xfe\xd1\x92{\
+\x8b\x1f\x08y\xb2(\xd29\xb9\xd4\x16T\x04-\x08\xa5B\x92\xf3\xa0c\xb8\xb8\xdf\
+\xa1u\x06\xcb\xef\xdbe{\x13\x0cP\x15bu\x89\x8c\xdeh\'\xed\xbc\xefH\xc6!\xa3\
+\xf2\xad`\x07\x0c\xd1\xeb|KR\xccRV\xbd\x86\x023c4<h=\xf7\x16\xb7\x13-\xb9\
+\xb7\xf8\x81\xb0\x9a\xbdv\xfcL\x1b\xc9\xeb\x04\x14%\x12B/\x06\x83\x05\xa1\
+\x1f\xd3*c\xa5j\xc5\t*\xa9\x7f~\x02\r\xe0hZ[?\xc4\xe7\x1fG\xfe\xa9\x19`[eL\
+\x0by]\xf9\x80Y\x17\x961;*\xc6\xe4\xf0\xf1%?\x86\x16-~ \xb4\xe4\xde\xe2\x87\
+\x80\x19\x95je;md1\x02 B^B\x08tB\x00\x10\x02\x83.\xadRV\xbcEl7\xcd\xf7j\xf4\
+\xaa\xf5Y\xcc\n\xf6^\xb6\xa1\xb1\xdd\x9e\xa12d\xb4\xd5\xae\xfb\x08\xaa\xad\
+\xef\r&\xc3\xbd\xfd+}\x1e-Z|\xefh\xc9\xbd\xc5\x0f\x81dq\xa2dnc\x96\x15\x99\
+\xfa\x15\xdb5\xeb\xa7\x05\x08\xd4\t\xc1@@\x18t\xb5?S\xed\x7f\xce\xb8!\xf6I\
+\xdc\xcb\x91\xb4\xa5\x05v\x1e\xd58\xa8\xa2\xf5\xc69QU)P\x8c\xfb\x8f>\xbf\xc4\
+G\xd0\xa2\xc5\x0f\x8b\x96\xdc[\xfc\x10XM_\xdaLD\x93\xc6\xb2u7\xcd\xddI\xce\
+\xf0\xf8\xbd\xdf\xc1*\xb5&\xf8\xb6\xa3\xb8\xce\xe8N\xb6\xd7\xd6\xd5\xf9\xbd\
+\x91f\xe3\xbfq\x8f\x14\xca&\xccx\x16\x123\x13L\x92\xccx4>x\xff\x9d\xb7h\xf1\
+\x81\xd0\x92{\x8b\xef\x1dE\xb6\xca\x93y\x95\xb2\x82\x8a,\x1b\xb2\xdd!\xc9\
+\x99A\xdd\x9a~w\xf93\xdb\xc1h\xcav\xde\xb6\xd5e\xc2\xc0\xe3q\xf7(\xe1\xd6{\
+\x8b\xcc\xa6\xfa\xb0\xb5z\x98\x15\xf3\x83\xc7_\\\xeaCh\xd1\xe2\x07FK\xee-\
+\xbew,\xcf^\x19\xfa\xa4Z\x06d\x03\xfe\x88T\x02e\x05\x98\xd1\x8d\x00\xcd\xef\
+\x1dJ\x0b\xce\n4B\xb1\x1e\xa1o\x93\xed\xf5!\xac\xfe1>\x8f3W\x14oK\xf9\xda<|x\
+\xdd\x84N\xbda\x0c\x86\x93V\xb6\xb7\xb8\xe5\x10\x1f\xba\x01->r\xb0\x92\xc9\
+\xe2mc\x18\x91\x86_\xfa\xd1l\xb16\x88^\x91\x15Xgf\xa8(\x11z1\xf5b\x7f\xee={6\
+\xaa\xcbv\xff"\xdc|\x8f\xba\x8aw\xff`\xb3b\xec\xbf\xc6b\xd5@F+\xdb[\xdc\x01\
+\xb4\xe4\xde\xe2\xfbE\x91\'\xaa\xac\xea\t4e\xbbG\xf4\xd5\xb27CS!\xb1\xca\xaa\
+\x84\x99nD\xc3.E\xc2*nw\xd0fT\xb4vz\xcf\x93\xe1\xc6\xb2\xf3pH\x13\xb7}\x00hd\
+\xe8\x90+k\xd0\xca\xf6\x16w\x02-\xb9\xb7\xf8~\x91,\xde\xd9\x02\x8f\x00j\x02\
+\x9b\x1b\xf3`T\xc4^\x9bKI*\xacR.\xa5\x99W)\x10\x18t\xa9\x17Ws1y\xb2\x9d|\xd2\
+\xde\xc2\xe3u\xba\xf7d\xbb\xd7\x82m\xd0\x8d\xd7\xb3/=8\xfa\xe2\xc2w\xdf\xa2\
+\xc5\x07CK\xee-\xbeG0\xab\xd5\xec\x8dY\xa8\x0f\\\xf2\x86\xaa\xda\xb2.fC\xfd\
+\x0c\x80\xe6\xf7e\x86\xb4`wl7\xa6a\x97\xe2\xc0X(\xe4\x1f\xb0\xc1\xed\r\xd9\
+\xceM\xd2w\xb2\x1df@\xaa.|\xe3\x8d\x87\x82\xcd\xf0\t\x88B\xd1\xfe\xd5\xb4\
+\xb8\x03h\xbf\xa6-\xbeG\xa4\xcbSY\xa4.\x17\xc6\xc6)\x81\xcd\xa4F\x06je\xbe6\
+\xc0X\xe7Xe,\x95\x89u\x86\x01\x06=\x1at\x10\x08=\xdb\xf5Ud\xbb\xb7\xcf{d\xbb\
+\x8e\xb4\x86\x01\x92\xd5\xf4\xfc\xbbn\xd1\xe26\xa0\xcd\x96i\xf1=b5{\xedB\xa9\
+\xb5I\xeb\xaa\xc2\x90\xd4\x0c\xb3z\xe0Z\x8e9\x88\x90\x17(%w#\x8a#s\\\'\xa2(D\
+V \xc9\xab\xb1Nh\xb2\xba\xf7\xa6N\xfa\xec\xc9vx\xb2}\x83\xeb\x8dl\x17\x84<[_\
+\xf2ch\xd1\xe2\x03\xa0%\xf7\x167\x06f\xc5\xb2T\xaa\x94\xb2`Y\x14y\x9a,O\x88@\
+\xb4e&T\xf2\xdf\xb82\xec~\x18\xb3>\xe2\x88\xadq\xaf\x18\xeb\x8c\xf3\x12\xbd\
+\x98\xc2\xc0\xac\xec\xc5\x14\x87H\x0bd9JU?\xd0\xbe\xbf\xa0l\'\x7f\xab\xf5\
+\x8ct\xac5\x08\x08\x80,\x8b\xab}>-Z\xfc\x90h\xc9\xbd\xc5\x15\xc1\xacd\x91\
+\x95\xf9\xaa\xc8\xd6e\xbe.\xf3\xa4,2\xa5J%%\xa0*\x0b}S\x98Wy\x91n\xdb\xfbe\
+\xbb;\x87^YH\x94\t\xc7!\xba1\x05\x02\x00\x84@\xbfC\xdd\x08YAi\xc1E\xc9\xb5\
+\xdeA?;4e;|\xd9\xee7w\xb35\x82\x10\x98\x0e\xa653[\xdc\x01\xb4\xe4\xde\xe2\
+\xa2P\xb2(\xd2E\x9e-e\x91\x95ERf\xeb\xb2\xccX\xd5\x86\x8dz\xe1L\x10Y\x02\xb7\
+Vz5\xf3\x86M\x94q\x82\x9e\xea#T\xb7\xcav\x1fz\xd0h\x9asVp\x1cR\x1cQd\xca\x8d\
+Q\xaf\x83nLy\xc9E\xc9y\t\xc7\xf2~|u\x8b/\xef\xdd\x82\xeb\x16\x8clg\x10!\x0eI\
+_4\xee\xf6/\xfe\xa1\xb5h\xf1\xa1\xd0\x92{\x8b\xf7\xa0\xcc\x93lu\x9a\xaeN\xf3\
+d.e^\x97\xd9d\xd9\xdc/\xd3\x0e\xd8\x05\xf2\x18\xdb\x99\xed\r\x98\xe9\x92\xb6\
+%\xc9\xf8\xd9*z$\x11\xf9\xa5y\x99u\x01\xf7\xb4@Zp\x14\xa2\x1bQ\x14B\x1bA\x9d\
+\x88:\x91P\xccE\xc9\xba\x0f(\xa5\xab\xd2nO`\xfd\x16\'\xdb\tP\x9eE\xa3\xefN\
+\x08\xc4\x01\x84\x1dr5\x9a<\xb8\xca\xe7\xd8\xa2\xc5\x0f\x8b\x96\xdc[l\x87\
+\x92y\xba:K\xe6o\xd3\xd5)\xb3\xf28\xddIpo\xd8)\x19u\xed\xbb\xdcU\xb0\xd4\'e/\
+\x03\x12U\xb5\x99\x06\xe7\xd7\xb3[\xcc\xe0!/S\x9e\xc0\xf5\x8b0#/9/9\x14\xd4\
+\x8d)\x8eH\xd8pm\x1cR\x1cB*-\xe49/\xb8\x90(\x95.\x11CF\xa5\xb3\x97\xcf\xe3NL\
+$\x08a\x88\x80\xaa+v\x07\xfb\x9dv\xd2\xd4\x16w\x01-\xb9\xb7\xa8\x839[\x9f\
+\xad\xe7o\xd2\xe5\x89\x94\x85\xc7\xd6>\xffRC\x8f;;\x86\xbc\xa8h%\xdb=\x8a\
+\xf7\xce\xe1\x9dq\x1b\xb7\xfb<\xabG\xfd\xd7f\xd4\xf0\x03\xa45/\x9e\xf35\x07\
+\x82:\x11u"\n\x03\xe3\xa5\x08\x81NDqD\xdc\x85b\x14\xa5*%\x15\x92KI\xb59Q\x15\
+\x88 \x88\x84\x80\x10\x10\x96\xf1\xf5C\x83b:x\xf8\xe5\x85?\xca\x16->$Zroa\
+\xa0d\x9e\xcc\xdf\xae\xa6\xaf\x8al\xc5\x9eW\xb13\xf1\xdc\x89i\xa3\xbd\x9b\
+\xbb\xf9\xf90~Y\xddJ\xaa;\xcd\\;\xab\x9b\xe6\xba~\xb6\xa6l\xf7=\x9bjQ\xb7G*^\
+\xa5\xbc\xce\x10\x05\x14G\x14G\x14\nbb(\x00\x08\x04(\xa48\x04@\xca\xf6\x13\
+\x8a\xc1\x8aK\x05\xa5 \x19J\xe9\xc4y\xd3\x1a"(\x85\xa8\xbf\xdf\x1f\x8e\xcf\
+\xfb\x10[\xb4\xb85h\xc9\xbd\x05d\x91\xae\xa6/W\xb3W\xb2,\xfcq\x99h*o\xae\xaf\
+\xddE\xfa\x8d\xa3ky(u{}\x83\xd9}XO\xc6\t\xe7sd\xbb\xdb\xddKa\x043\xb2\x82\
+\xd3\x82\x05!\n)\x0e)\n\x10\x04\x04=Y\x1e\xdb\x07\x02\x00\x80   "\xe6\x80t\
+\xe1\x1a\xa5 \x15I\xc9\x92QJ\xe4\x12O\x1e\xb7\xb2\xbd\xc5\x9dAK\xee\x9f4\xca\
+<Y\x9d}\xbb\x9e\xbfe%\x01\x04\x02\x9bU\x00\x94\xad\x92\x88\xba\xeb\xf2~p\x95\
+*cVp\xa5\xf2\x9b\x95y\xeb\x07mf@\xba7M[\xdf\x9c\xd8\xdb\xd3\xef\x9d\xc8\xdcB\
+\x92s\x921\x11\x02\x810\xa00@ \x10\x08\xf2\xa3\xbel\xbb\x04\xf2,\xfe\x92\x91\
+\x15P\n\xc3\xbd\x83\xfep\xef\x82\xb7\xde\xa2\xc5\x07GK\xee\x9f(d\x99\xad\xce\
+\x9e\'\xf3\xd7,\x0b\x02t\xea6\xd9\x14\x97M\x93\x85A\xac\xfd\n~\x8f\xe0\xd6{;\
+\xf8\x9e\x8cY\xb6\xbb\xd0f0u#\x03\x92\xacl\xdfq\xfa\xdab-\x8b\xddu\x02\xce\
+\x91\'(\x86,\x91\x15\xcae\xc7\x10\x19c]\x10\x84 \x06\xa4d\x06\xa4\x82R\xac@`\
+\x021\x11=z\xf2\xa3s\xef\xb9E\x8b\xdb\x85\x96\xdc?=0\xafg/\x97\xa7\xdf\xaa23\
+kh;\xad\xbb\xb8\xa8\xc9\xf7\x0e\x10\x01\xacP*\x96\n[\xe7\xad6Wp>\x8e\x9f\xcf\
+\xee\x9fu\xc7\xb1[3 m\xab\xab\xf6\xbb\xe4\xf8\x9a\xf9\xbe-i\xdd\x8eT\xf2@6\
+\xbf\x86I)(\x9b-\xe3\xfc"\xcf}"\xb2y2\x83\xf1~o\xd0&\xc9\xb4\xb8Kh\xc9\xfd\
+\xd3B\xb6>[\x1e\x7f]\xa4s\xb7F\x9b\x12\xef\xa1u\xbbJk\xfc\x8e \x05H\xc9\x85\
+\xb4\x14_wRj!NOWo!\xf4\xdd\xb2\xddm"\xafY\xfep\xa4\x8d\xd3{?\x1b\xbb\xd5\xb6\
+i9o\xdaHdGT\xd9J\x90\xd5\xd5\xbc\x1b\x9b\x1c<\xdcl\xfbN0\x17\xab\xd7\\\xcc\
+\xa4\xa2\xb0\x7f?\xea\xb5\xc5\xdf[|\x00\xb4\xe4\xfe\xa9@\xc9bq\xf2M2}YM"gi\
+\x9d\xacr7\xb0v\x89Mi\xacgA\x02\x00\x04!\x08)\x0cPH.e\xe5\x9c\xf8J\xba\x96\
+\xdb\xee\'\xaa\xdb\xa5\xad\x03\x97\x1akL(\x95\xabew\xfa]\xb2}\x17\xf5\xf3\
+\xb6E\x1b\x06\xd8\xcc\xcf1maF\xdc\xe9O\xf6/1pi={Q.\xbea\xc5\x00\x17\xcb\xd7y\
+w\x12\x8f\x9eE\xbd\xfd\x8bG+Z\xb4\xb8>Zr\xff$\x90\xad\xcf\xe6o\xffP\xe6k4h\
+\xdd\xcfF\x07\xe0rZljKC\xcb7\xd8W\x10\xba\x11\x95\x01\xf2\x82\x95\xb2\xfb\
+\x93\xe7t{\x1c^\xd5\x80\xe4-y\x93\xb5\x89\xec\xaa\x95[d{\xed\xa0\x8d7n\xc1\
+\xb5a\xb3\x9eLM\xde{\xb7\xed\'\ny\xb2\x9d\x1f=\xf9\x92.\\\xc3\x9dY\x15\xab7\
+\x90\xb2\x94\xac\x18D\x08\xd6S\x99N\xd3\xce\xb83\xfe"\xeeM.x\x9e\x16-\xae\
+\x89\x96\xdc?v0/N\xbf]\x9e|\x03+\xd8\xa9.\xd8\xbdL\x11\x18\x1b\xa6\x1e\xe6\
+\xac\'/n\xe9\t\xa2\x00\x81 =\xf2\xd3\x9c\xc7s\xba\xdd\xfeF\x98s\xf5\xb6\xd6\
+\xcc\xc6\xb2\x16\xfb>\xb9_@\xb67\xec\xf5\xeb\xcbv\xa5T\xa7?\xee]&\xb7}\xf9\
+\xf6w\x9d\xb0`\x11\x05e)\x15K\xc9\xa5d\xa9\x10\xa8\x19g\xff\x9ew\x0f;{O\xa3\
+\x96\xe2[|\xff \xde\x94C->\x16\xb0\x92g\xaf\xfe+\xd5uw\xb1!\xd8\x1b\x94M\xf5\
+\x19\x91\xea\xb4\xbe\xc9\xe9\xd8X\x93\x17\x9c\x15Mzu3.5\xc6\xab6\xdc\xf6\xaa\
+S\xe0\x8a\xd9\xab\xf4v\xa3\xb8k\xe4\xee"\x9f\xcc\x1b?\xed!n%\xdb\x9fv=W\xe4\
+\xbeQRF\x07R\x99\x15\x89\xa87\xfeQ\xd4\xe9\x1eNz\x83\xe1\xfb\xeb\x85\x95y2{\
+\xfe\xcf\x04\xa5C\x11B\x98\x8a\x95Z\xc5\x03\x08\x04\x05\x02A\xf7 \x1a=\x89\
+\xfb\xad\x17\xdf\xe2{D\xab\xdc?Z\xc82\x9b\xbe\xfam\xbe>s\xcc\xae\xb3\xd8\xc9\
+\xbc!\xc0\x0f\x1e\xd6\xca2n\xa7\xf5F\xc1\x00\xf6v`\x00\x88#"\xc1i\xeeU\x7f\
+\xb4\x9b4\xa5\n\xf2\xc8\xdbC3\xf2\xa9\xdf:\xd9n]\x94+\xbb\xed\x8d\xc5\x8b\
+\xc8v\x06\x83h\xb4\xff\x99\xa4\xeebU\xe4y\xb9\x9fe\x93\xf1^\xa0K\xc8\xef\x80\
+,R\xa5\x94\xb0\x1f\x94RJ)\x12\x02a@\x0c\x94N\xc5\xafO\xcb\xf44\xefL:{\xcf\
+\xa2\x96\xe2[|?h\xc9\xfd\xe3D\x91-O_\xfc\xa7,\x12a\xd3`<+F\xffW\xc5=\xe9R\
+\xb4\xee\xb1\xe1f|0\x0eH\xc4\xbc\xce\xab\xa1@\xf6"(%\xb3@\xd0x:\x80u\xe7\xad\
+:7\xeb\xb6P\xf7vl\xee\xb0\xe9\xb6{\xda\xbf~v\xd8\x87\x8eM\xb7\x9d\xe5p\xf2\
+\xb8;\xdcO\xd32\x8a\x82\xbcT\xefN\xf3uzv0\xee\xf5\x07}\xda|x\xd1\xc7\x8a\x90\
+\xcc\xa3\n\x03P\x1c\x00\x0c%\x95\x12BP\x1c\x92bh\xa3\x86\x14\x94\x9a\xcal\
+\x1av\'\xd1\xe8i\xd4\xdbo\xcb\xc4\xb7\xb8Y\xb4\xe4\xfe\x11"[\x9d\x9e\xbe\xfc\
+oVE\xc5\xec\r\x9f\xddS\xdd\x8e\xd9\xdfK\xeb.\xc4\xb8E{\xdbe\x06\xc2\x90\xfa\
+\xc4\xeb\xcc&\xb9\xdb\xbd\x03\x81\xbc\x04\x85h\xc4&]\xbd]\xbf\xd6\xe4y\xb2\
+\xddo\xff\x86,?\xdfd\xf4e\xbbkx\xdd\xa97\x86L\x18\xf5\xc6\xfb\x8f( \x82\x08\
+\x02\xcar\x95\x17r\xb1,\xb3l5\x1ef\x93\xc9(\x8a\xa3\xcd\xf3\x07a\xcc\x10\x84\
+\x92\xc2\xbe\x8c\x1f\xa7\xb2W\x14e\xcc\xd3\x0e\xbfe\xa5\x94\xa2 \xa00\xa4\
+\x90\x8d\x8a\'\x05\xb9>+\xd3i\x16\r\xa3\xd1\xd3\xce\xf0~K\xf1-n\n\xad\xe7\
+\xfe\xb1!]\x1e\x9f\xbe\xfc/\xb0\xda\xc6\xec\xe4\x91p-\x8d\xdd1\xfb\x16Zw\x99\
+\xe0\xd5dx\xee\x1c\xdbc\xadD(\xa4\xe5w\xbb\x06\x003e\x05wc\x08\xaa\xaa\x0f\
+\xb8\xd4r\xb33\x113\xfbn;\xacE\xae7kO\xc6\x97\xe0\r\x9f\xbd\xe6\xb6\xfbV\xfb\
+\x0e\xb7\xdd;y\xe5\xb6G\xd1~o0\xee\xef\r\xa3NWJ\xces\x95\x15*\xcfU)\x95 t;t\
+\xb8?\x18\x0cz\xa2\xdeS1\xab\x93o\xfeo( \xf6~,\xc50\x10"\xcbr\xc9"(O\xc4\xfa\
+k\xd8\x9en\x9b\x17\x0f!HD\xc3x\xf44n)\xbe\xc5M\xa0%\xf7\x8f\n\xeb\xd9\xab\
+\xb3\xd7\xbf\'\xf0\x0e\xcd\xae\xf9\x9b\x018b\xdf"\xd8\xb7\xd1:\\tT\x837\x8e\
+\xaa\xa0{\x0e*%V\x19\xbb\x81\xac\xbak)$\x17\x12\xbd\x98\x04U1\xd2z(\xb5\xfaN\
+\xeam\x9a\x8c\x8d\xaagT\xfe\x8a\xef\xb7x$\x8e\x06\xa7\xd7\x03\xaa\xcc\xee\\ \
+\xa2\xea\xdc\xb6\x8d\xcc\xdc\x89;q\xe7 \xcbe@\xd4\x1b\r\xfb{#FP\x94\xaa\xc8U\
+VpQH\xc5*\x0ch<\x8a\xf6\xc7\xc3\xb8\x13\xfb7\x7f\xf2\xed\xbf\x04A\xcc\xbd\
+\xa7:\x0f\xd2\x0cr%!g\xbf\xa7b\xae\xeb<\xe8\xeb\xe9\xe26\xf0(^\x10\x82\x80D4\
+\x88\x86\x8f;\xc3G$\xce\xf3\xf7[\xb48\x1f-\xb9\x7f<X\xcf\xdf\x9c\xbd\xfco],\
+\xc5gv\xb7\xe8\xe7\xac4j4\xfa\xa2\xdb,s\xcd\x8e\xf6\xfb\x00\x87\xfa\n6\xc73@\
+\x0c&".%\xd6\x19\xa4a.C\xe7\xa5B\x92c\xd8E H\xe7\xa8\x903\xcau\rHu\t\xd9\xde\
+\xd0\xe9\x97\x96\xed\x1e\xb9k"V\xac&{\x87\x93\xbd\xd1*)\x97\xebRI\x15w\xe2\
+\xe1d\x1cu{e\xc9E\xa1\xf2\x82\xf3B\x95\xa5\x02T\xb7#\xf6\xc7\xdd\xd1\xb0\x1f\
+\x84\xc6\xe1<{\xf1\x1f\xc9"Y\x15C\x11\x08!\x88D\x00\xb0R\xe8\x88i7X\xfa\x9f\
+\xd9{(>\xecE\xa3\'-\xc5\xb7\xb82Z\xcf\xfd#A\xba<>{\xf5\xbbMf\xd7\xc2\xd1\xc0\
+cv\xa7\xcd\x81\xea\xfd\x96\xb0*_\x98\xd6m\xcfaL\x16b\x06\xa2\x00\x83\x0e\x96\
+\x19T5\x95\x13\x05\x02\xbd\x98\x97)z1G!\x8c\xc2\xb0\x04\x0bW\x00\xc0\xc9vl\
+\xb9\x98\x9f\x84S\xad\xe0m\xbb\xda\xfc\xf7\xedn{\xf3\x02\xcc\x8c\xac@Q\x8aa?\
+\xec\xc4b\xbe*\xb3\xac\x98\xbd;\x19\x8c\xf7\xba\xc3A\xd0\t\x82@\x05!\xe59\
+\x15\x05%\x99*N\x92$\xc9\xf7\xf7\x87\xddn\x17\x00\x828\n\xd7\x91\xe2LJ\xa1\
+\x08\x90\x00\x14\xa3\xdbQ\x8d\xbc\x1c}\x9bRA*\xd6\xb5*\x01H]\xb7\xa7d!\xd7\
+\xaa\xf8c\xb9x\x11\x8d\x9eD\x83\xfb"\x88\xd1\xa2\xc5e\xd0*\xf7\x8f\x01y2;\
+\xfe\xee\xd7`\xb9\xc5\x8d\x81emg\xafocv\xe7\xb7\xd4\xa8|\xc3UGmE\xcdP\xdf\
+\xe1\xc3C[1\xeb\x0c\xa5\xaa=\x1fH\x85U\x86n\x84^L\x8a\xf9\x1c\xd9n\xdf\xee\
+\x94\xed\xd80a\xb0\xd5\x99a\xe8\xd2\xc5\xe7\xc8v\x80\xf3\x12?\xfd\xe5\xdf\
+\xf6\xfa\xfd\xc5\xf1[.V"\xa4U"W+\xa9\xa4\x8c\xbb\x9d\xc1x\x1cu\xbaRqQp^\xa8\
+\xbcPE\xa9\x02\xc1\xa3\x9e\xe8\xf7\xe2\xc1h\x90-\xdf\xad\x8f\x7f\x8f\xf0\xfe\
+"\x8b\x94\xaeqF"\x12r\x10\xbc%.\xb7|\x9a\xde\xe7\xe6T\xbc\xa6x0\x84\xaeK\x1c\
+\xc6\xe1\xe0\xa8\xbbw$\x82-Q\xdc\x16-\xb6\xa2%\xf7;\x8f2O\xde\xfd\xe9\xdf\
+\x94*\x04m\xe1t/\xf7\xd1S\xee\xde{xVL\x8dx\xb8FD[\x8du\x9f\xd6\xcf\x01\x01\
+\x92\xb1\xce8/k\x01[\xa5\xb0\xca\x10\n\x0c\xbaNG{\x82\xbd\xe6\xb6\xa3F\xee\
+\x1e\xa7\xa3\xce\xe6\xfe\xca\xcb\xb8\xed\xa6\xefcFwx\xf8\x93\x9f\xfd\xa5^\
+\x99\xae\x96\xab\xe9q\x1c\xca\xbc\xe4\xd9\xa2,\n\x19\x10u\x87\x83\xfe\xde\
+\x88DX\x96\x9c\x17\xaa(\x94R\xaa,U\xbfK{\xc3\x18r\x99\x9d\xfeN\x84=\x15\x1ed\
+\xaa\x0b!B*\xa2\xf2\x18r}\x81\x8f\xca|\xa8\xbe\x8ag6\xa4/\xa2^\xbc\xf7Y<|\
+\xd0\x86[[\\\x04-\xb9\xdfm(U\xbe\xfb\xd3\xffW\xe6+\xd1Lv\xb4\xef\xbd\xb2\x8e\
+\x95C\xb3\xc9\xec\xe7j\xf6\x1a\'9\x89\xbe\xa5@\xccNh\xeeNrNsx1Z0#\xc9!\x15\
+\x8fz\x14\x06P\xd2\x9c\xdf\x1a\xe5\xdbe\xfb\xf6P\xea6Z\xaf\xc9v\xfb]\xa7\r\
+\xd9\xee\x1ek\xa4\xc2\x8f\x7f\xfe\xb7\x83aU\xdd\x97\x95Z\x9e\x1d\xcblA\x02\
+\x8b\x95LR\xc9R\x85q8\x18\xefuz}\xc5\xc8\x0b\x96R\x819M%\x88\x86\x9d<H\xfe@`\
+\x90\x10A\x07B@fJ\xee\xd4\xec;?1M\xf1\x84\xa2\xe4\xa2\x04\x11\xa2\x00a@\x14\
+\xf6\xa3\xd1Qg\xf8\x90D\xeb\xa9\xb68\x0f-\xb9\xdfm\x9c\xbc\xf8\xcft\xf1N\x88\
+:\xb3o\xe6>\x9e\xaf\xd9\x1b\xef=f\xf7\x85\xb6\xbf\xe9rD\xe5\x9d\xa0\x90\xbc\
+\xca e\xe5\xa7\x13!\xcd9-\xd0\x8f\xa9\x17\x1bE\xefd;\x8cWnskpi\xd9\x0e\x86\
+\xaa\xcbv\xbf\xde\x80.9id;\xd0\x1f\xde\xfb\xea\xa7\x7f\xb1\xd9\xf8t\xb5\\O\
+\xdfE!\xe7\x85\x9a\xaf\xca"W\x04\xee\xf6\xfb\xfd\xf1\x9e\x08\xa3\xb2\xe4\xb2\
+T\xa1@\x92S\x9a\xac\xf6\xe9\x8f\x82lK\xb9\xea9.\x0b\x06\x84U\xf1E\xc9\x85\
+\xd4\x8b&\xdc\x1a\x8f\x9e\xc4-\xc5\xb7\xd8\x8d\x96\xdc\xef0\x16\xa7\xdf\xcd\
+\xdf\xfe\x8fvc\xe0\xaa\x0b8Z\xf73\x1a\xcdk}q+\xb3{\xf0\xad\xf9ss\x1f/\x01"(\
+\x85$\xe7\xb4\xb0i\x90\x00X[\xf0L\x04-\xe1\x99\xa1T\x15"eP%\xb37d;\xea\xe4\
+\xee\xa4\xba[\xef\xdcv\xd4e\xbb-&l\xd8W1\xbe\xfa\xd9\xdf\x0cv\xcc\xa5\xa7\
+\xa4\x9c\x9f\xbc\xe3b%\x02Z\xae\xcbu*Y\xaa \x08\x06{\xa3\xce`\xc0\x10E\xa9\
+\xe2@\x80\xb9\x9c\xfeF \xbf\xde\xe7T\xc1\xa7\xf8\xacd\xe9Q|\x10v\xc3\xe1\x93\
+\xce\xe8q\x9bQ\xd3b\x13-\xb9\xdfUd\xc9\xec\xf8\xdb\x7f\'4\x07+\x81 \xaa\x12`\
+N72\x00\xf24\xe4\xe5\x98\xbd\xb1r\x07\xce\xdf\xea\xbeg\xba\x91y\xc9I\x06=\
+\xdd\x07\xacQ\x93\xe6\x9c\x15\xe8\xc6\xd4\x8b!\xaa$\x9a\xdd\x03\x97,\x83\xd7\
+B\xa9\x1b\xb6\x8crs\xc0\xda\xbb\xe5m\xb2}4y\xf4\xc5W??\xf7&\x90\xaeV\xeb\xd9\
+I \x8a\xb2\xc4b]\xe6\xb9\x04s\xa7\xdb\x1d\x8c\xf7\x828V\x8a"\xa1\xf2\xe9\xef\
+\xe8\xc2\x0e\xfb\x05\xe1(\x9e\x81\xa2\xe4RA\x00\x81@\x18R\x10\x8fz\xf7~\x11D\
+\xdd\x1b\xbc\\\x8b\x8f\x00-\xb9\xdfI\x94E\xfa\xee\x9b\x7feU8+\xa6\xc6\xec\
+\xd0\xc4\xc2\x1bA\xd4*a\xc6\x81v\xd1\xf7n\x9d\xbe+1\xe6\xb2\xd0<\xb5\xce\x91\
+\x97\xc6\x84!"\xa98/\x91\x97\x08\x03\xf4;\x08\x03\xf2\xedr_\xb6\xf3\x8e\xc5\
+\x0b&\xc94\x98=\x8a:?\xfe\xc5\xdf\x85\xe1\x05\xd2Q\x98\xd7\xcbe2?\t\x84,J^\
+\xae\xcb"W\x82\x10\xf7\xba\xfd\xd1(\x88\xbb\xe5\xec\x0f\xa2\x98\xe2\xc6\xc2\
+\x9eLP\x00\x18B\xdf\x80\x10D\x04\xc5(JV\x8a;\x91\xa0\xcedr\xf4\xab\x1b\xba\\\
+\x8b\x8f\x04\xadaw\'1}\xfd{\x93\x1e\x03/L\n\xcb\xec^6\xb5\x95\xf5\\%\xc5\xec\
+\xe6c;\xe1\\u\xec\x96}`d\xf6f7\xb0\x13\xdb\xf4\x83\xbeT\x1cQ\x14rV`\x9d!+\
+\x01\x06\x11u"\x84\x82\xd3\x02gK\xc4\x11\x0fb\x04\x81\xc7\xe0\xee|\xbcqF\xef\
+\xa7\xf3t\x9c!\xe3\xf6\xda"ht\x11\xc8\x0b\xf6TD\xfd\xd1\xa87\x1c\xceO\x8e\
+\x85\x9c\xef\xef\xc5\xabD\xae\xd32]\'E\x9a\xf5\xf6\xf6B\x847\xa7\xda\x15S\'\
+\xc5X\xb1\x88\xb0\x8a\xb0`\x16\xa5d\x02\x82\x80z1\x95\x8a\xd2L\xa1\\\x8c\x8a\
+,\x88:7u\xd5\x16\x1f\x01Z\xe5~\xf7\xb0\x9a\xbd\x9e\xbe\xfa\xad.j"\xb4\xfdbG\
+\xa2Za\xaa\x19\x9d\xc8\x16m\xdf\x1aAm,\xfa\xcc\xbeK\xad_\x9d\xb3v\xf0\xbb;\
+\xabb\xa4\x05\xaf3\xad\xe2\x8d\x85"\x15\xd2\x02\xa5\xd2\xe9\xf0\x08\x84/\xc6\
+\xaf)\xdbI\xff\xd4=\x153\xd6\xa9z\xf6\xec\xe9\xd1\xe7?\xbd\xd4m\xe5i\xba<{G\
+\x9c\x97\n\xcb\xb5,r\tF7Z\r\xa2\xc5M\xd82J\xc4\xe3\xb2\xf3y\xd0\x19eY\xa1d\
+\x11\x15/\x83\xe2\xady.\x03\x08\xe8\xc4A\xa9h\xb9.\xc2(\xeeO\x8e\x86\xfbO\
+\xda\xe1N-4Zr\xbfc\x90e\xfe\xf6\xeb\x7f6\x86L\xcd\x8d\xd1\xa1B\xf3\xdb$\xa1\
+\xcb\x82\x01u\x8e\xd9e\xc84b\xad>\xea\xfd\x01\xd59\xb9y~\x07g\x86o\xdd\xb0\
+\xf1\xd6\x9cGS\xfc2\xe5\xbc\x80\x8b\xb6J\x85\xac`\xa9\x10\x87\xd4\x8d\x10\
+\x05&\x97f\xcb\xc0\xa5\x1a\xbf3\x83\xd4\x8e\xdcv"b[_A*\x94\x92\xc1\x90\x8c\
+\xbf\xf8\xd5\xdf\xf4\x06\x97\x98wIcqv\x9a-\xa7A\x88u*\xd7\x89\n\xb1\xda\xeb\
+\xcc\xaeM\xeeL"\x0c\xc6?\x91\xa2\x1f\x08\x98Zj$\xe4\xf4\xb7(\xe6@\xe5\xf9\
+\x88@\x9c-d\x18 \x10\x10A\xdc\x1f?\x1c\xec?\r[\x0b\xfe\x93GK\xeew\x0c\xd37\
+\x7f\\M\x9f\xfb\x82]\xcbsAT\x99\xec\xf5Z\x8f[e\xbb\xf5\xe5\xe1\xbdn\xf3\xdf\
+\xa9\xf9\x96}\xd2\xda\xcd\xeb\xde[>wk\x13\x8e\xe2W)\xa7\x85\xce\x99!\x10\x94\
+\xe2\xb4@)\x11\x08t#\x8aC\xe8\xc2\x8a\xbe\x96\xbf\x94l\xd7w+%\xb2\x82\x15s\
+\x14\xa0(qx8\xf9\xc9\xcf\xff\xfa\n\xb9\x8beQ\xcc\x8e\xdfA%RQ\x9a\xae\xfat|\
+\xd5\x04H\x07f\xc4ky\x9f\x830\x10\x02\x00\tb\x04\xa2<\xe9\xe0\xb4\xfa\xc5\
+\x10\xd2\x02\xb35\x8f\xfbU\xbe\xbf\x10\xe1`\xf2\xb8\xa5\xf8O\x1c-\xb9\xdf%\
+\x14\xd9\xfa\xed7\xffBPU\x1c\x15\x96\xd9]\xadGQ\x91J-\xa0\xba\xc3\x90y\x1f\
+\xf5S}\xb1\xb6\xcbn4Y\x9d\xb7\x91\xfa9\xdf<"R\x8c\xac\xe0u\xcai\xc1\xa54\xd2\
+U*\xce\x0b\xe4\x92\x05Q\x14R\x14\xe8\x19\\\xed\tk\xb4\x8e\x86l\x87\x97x\xae\
+\x87}\x02\x98\xafM\xef\xe1\xcaR\xfe\xecg?\xdf\xbfwt\xee\xdd\xed\xc4j6/\xd6ge\
+\x99p\xfeF\x9cw\x7f\x17\x013G\x8bt/\x97B\x98tW\x96\x12\xfd(\x19v\x17\xba\x00\
+\x8f\x0e\xab\xbe\x9b\xb3 \xdc\xdf#\xc5(%\xa4\x9d0P\x88p0~\xd4\x9f\x1cE\x9d\
+\xc1\xf5Z\xd2\xe2N\xa2%\xf7\xbb\x84\xd3\x97\xff\x95.\xde\xfaN\xba\xae\x14\
+\xe6H\xbc9[\x9eg\xcb\xbcG\xb6o\x11\xf8N\x1bn\xc8\xf6\x8b\x12\xbbO\xf1\xde\
+\xf7\xec\x02\xe4\x0e\xab\xb6\x19\xc8\x0b^\xa5JS\xbcR\xac\x18\xa52\xe36\x15C\
+\x08\x84\x82\x82\x00\xa1 !L\x10\x02V\xa4k\xd9\xae?\x16\xa5L\x0f\x11\x08\xc4\
+\xa1\xf9\xdc\x96)\xaf3v\xd4\xcf\x8c\xd1\xa0\xf7\xcb_\xfd\xbd\x08\xae\x98k\
+\xc0J\xad\xcf\xde\xae\xa7\x7f\x10\x90W;Cu*P\xa6\x0e\xd6EL`"\x1d\xc3\xa6Qt\
+\x1aR\xa2\xef\xa9\x948[q\x9a\xf3\xfd\xb1\xe8FUb\xa8O\xf1D\xa2\xbf\xf7p\xb8\
+\xff4\xea\x0e\xaf\xd9\x9e\x16w\x0b-\xb9\xdf\x19\xe4\xe9\xe2\xdd\x9f\xfeM\x0f\
+}\xacd\xbb0\xe6+\x99\xf8)\x00\x90\xcb\x8d9W\xb6\xfb\xee\x8ag\xe3P}\xa57\xc8\
+\xd5K\xb9\xd9\xc2\xef\x15e\xfbt\xbe\x8d\xdf\xdfO\xee\x15\xb3\x9b&1r\xc9Y\xae\
+\xd2\x9c\xf3\x92\xa5b\xa5P*\xe4%\x8a\xd2T\xcau\xb7&\xec\x00\xaeM_D\x08\x8aCt\
+"\x08\xaal\xfa\xd9\x9a\x0b\xc9\x95x\x07\xbe\xfc\xea\xabGG_\xecl\xdd\x05p\xfc\
+\xa7\x7f\xa2r}\x9d3\x00\x00XQ\'\xc3\xbd\x82c\xdd\xf8.\xcdCu\xa2ok\x9d\xf1t\
+\xc5\x8aq0\xa4~\x87\x1a\x7f\xc7\x0c\x94\nR\xd6(~t\xf8Y\x18\xbf\x7f\x9a\xef\
+\x16\x1f\x07Zr\xbf3\xa8d\xbbcg_\xb6{\xb3,\x19\xad}\xae\xdb\xbe\x8d\xd9\xab\
+\xb5N\xac\x13\xd5\xd6o\x9c\xac\x06\xae\x11<7\xde\\\x98\xdc\xfdKV\xa3l]\xf0\
+\xb3(U\xa6\'\xcd\x90,%J\xc5E\x89R\x19\x9d\xee?\x1f\x90\x1e\xa7\x0b%\x04\x05\
+\x840$\xdf\xc3\xd1\r"\xa0\x90\x98\xadM\x01G\x1d\xc5\x8d\xe3\xf8W\x7f\xfd\x8f\
+\x17\xcay\xaf\xce\xa5dv6;}\xcdL"\xea\xe7\x8bW\x11e7\xf1\xb7\xc5\x10\x11\xc2\
+\x11D\x0c\x99P9\xd7\x1f\xc2l\xcd\xcb\x94\xbb\x11M\x06\x14\x87\xd8u!\xd6%\x85\
+%+\x00\xad\x17\xff\x89\xa1%\xf7\xbb\x81"[\xbd\xfd\xe6_D5\x89\x92\x91\xed\xd6\
+vo\xba1\r\xd9\xeeGAk\xb2\xbd)\xcf}Fw\xeb-\xd5\xfb\xc2\xdd\x9d\xae\xe6\xae\
+\xd7(\xbd\xb1\xe0o\xf6\x0em\xc0\x1bE\xeb]\xbc\xf1\xa4\xc0\x0c\xc5\\\x96\x9c\
+\x97*/\xb9\x94\xacK\xaf\x94\xb2:\xa5\x96\xf0\x0c\x10X\x93\xbb\xae\xc0\xc3\
+\xf5\xf30 \x08\xeb\x0c\xcbT\x19\xf1\x0e\x00\xf8\xfc\x8b\xaf\x8e\x9e~\xb1\xa5\
+\x81;\xb0>\xfbvu\xf6\xed:-\xf5\xdfS\x1c\xc2\xf9$\xd7\x06W\x1f=Q\x92\xe3l\xa5\
+\xa4\xc4\xb8O\xa3\x1e\xd1\xb6\x92\xf7\x9b\xc7\xeb\x8c \xddu\t\x11\xf6\xc7\
+\x8f\x86\x07\xcfZ\x8a\xff\xb8\xd1\x0eb\xba\x1bX\x9d\xbd\xd4i\x8e[2U\xaaU&\
+\xc9\xafq\xac\xff\xb7_c\xcaMf\xf7\xb8\xdcv\x0f\x1b\xc97\xde\x19\xd8\xef\x12\
+\xc0`\xd2\xf2\x97@\xac\xffs\x17\xf7i\x95v\x89v\xaf\xed\xb6)\xae\x8d\xe6^\xb8\
+jy\x14"\x0cE\x8f\xc1\x0c\xa9\x94R\\\x94\xc8K\xce\n\xcdb$\x08\xcc\xec\x17]h&_\
+\x926\xda\xd1\x8b\x91\x15TH\x10L\n\xe6\xab\x17\xdf=x\xf4\xe4\xe2\xe2}5?I\xd3\
+\x82\x8c\x9b\xc4\xccM\x9f\xe4\x1a0\xdd\xb7b\x94\xc1\xbd\x14y@\xd3\xc3\x89\
+\xe8\x84U\t\x9d\xf7\x1e\x1f\n\x04\x82\xb4\x17\xafd\xb9<}\xbe\x9e\xbd\xee\x8d\
+\x1e\x0c\xf7\x9f\xb4^\xfc\xc7\x8a\x96\xdc\xef\x00d\x99\xaf\x17oQ\xe7s\x1d\
+\x01\xb4"\xbb\xa6G\xf5\xffz\xaa;\xd1\xa0\xfaf\x97\xb0\xc9\xec5\x86w\x14kv\
+\xa9\x8euLo\x93\x0f\x99\x98@v\\\x7f\xc5\xef\xc4`\xd7\xc2ZSiK\xc7\xe3]\xcf>\
+\x8f\xe8\x0e\xa6v\x17Z\x90\xb3\xbbW\x10H\x08t"\x8e#\xea\xc5TH.%J[\xb8\xe6\
+\xbd\xdd\n\x11\xba1\x15\x89r\xbb\xe4E\xfe\xee\xcd\xab\xc7O>\xdb\xb6\xfb\xb63\
+\x84\x03\x85\x99U\xd97\xa5\xd9\xab\xe6\x95\x92\xc2\xf1\x97\x8f\x1e|\x06 [\
+\x9d\xe4\xf3\x17\xf9\xfa\xf4r\'\x81)\x1a\xac\xbd,%\xcb\xd5\xf4\xe5z\xfe\xba7\
+z0:x\xd6R\xfc\xc7\x87\x96\xdc\xef\x00\x92\xc51\xabB\x90\x95\x9a\xf0\x148\xd5\
+\xf9\xaaf\x91\x9b\xc7y4wq<Zw@\xc8\xad\xa9\x18\x9e<n\xadQ\xba\x7f:v/:{\x9c\
+\x19\xae\x9e\xafN\xd1\xdc\x19;\xad\xc5\x02\xa8\xce\xecU/Sw\x9d\xbc#,\xb73\
+\x08`3F\x89\x08qHq\x88R\xa2\x90\x1b\x11\xd7\xfa\x87\xe1\\\x8d8\x84 r#\xa7\
+\x00\xbcy\xfd\xe2\xe1\xa3\'"\xb8P\xc1\xc5\xbd\x83\xc7\xeb\xd9\xab*\x98\xdc\
+\x18\x10pU\xe8\x0f#\xc3`\xf4\xe8\xc7\xc3\xd1\xbe^\xd9\x19\x1cv\x06\x87Er\x96\
+L\xbf+.O\xf1\xba\xa2\xa4\xc9\xa8Qj={\x9d,\xde\xf6F\x0f\x86\xfbGq\xef\xd2\x03\
+\xb8Z\xdcZ\xb4\x9e\xfb\x1d\xc0\xdbo\xfe\xad\xcc\xe6~\x06\xa4\xd6\xe3\xde\xcc\
+\xd7p\xf6\x89\xef\xb6\x03\xd0U\n\xbcR\xe6\xee$uc\xdd\xfa/\xb4\xf5\x1d\xbc\
+\xfd\x9a0\xb5[\x98\x9bo\xf4;\x98\xb2_\xb5\xd0\xea\x06\xd9\x93\x95\xecMf\xb7]\
+K\xdd{b\xd6\x85\x1e5\x143+Vn\xd9\xa3X\x06\x942*^*\x1d@\xdd\xf2\x85\xd7\x9d\
+\xd2|\xcdia\xd3f\x00\x00?\xf9\xe9/\xef\xdd\x7f\xf4\xde_\x90\xc6\xfc\xe4\xbb\
+\xb37\x7f\xb4\xf7\x83^\xba\x85\xdf\xb7\x00\x00 \x00IDAT\xbc\xf1\xd8tI\xe8dG\
+\xf4\x1e\x1f>\xfe*\xd8\x91\x9aY$\xd3t\xf6"_\xbd\xbb\xc2\xf9k^<\x00Bot\x7ft\
+\xf0\xac\xa5\xf8\x8f\x03\xadr\xbf\xed(\xb2U\x91-\x1cM\x10\xc8\xe8\xcb\xba\
+\x90\xf7\xb2e\xb6\xa0\x92\xd7\xd5\nG\xa8\x96\xb6-\xe0\xbd\xb7\xc4O\xce\n\xb2\
+\x8f\x02\x9a\x0f\xb4BeW\xf6\xc0\xa8vPM5\x10<gf[\xeb\xfc\x1e\xc9U\xc4\xb1W\
+\xf7-\xff\xda\r\xe8\xeb1i\xd5\xee\x19\xfc\xa6\x81l\x9b\x19\x06\x08\x02Hi\x86\
+\xf9\xa8\x1d\r\xe9D\x94\x165\xfe\x7f\xfb\xfa\xe5\xc5\xc9}\xef\xf0\x99,\xd2\
+\xf9\xe9s\xbc\'\x85\xff\xfd\xd0w\x9cso\xf8\xe0\xc7\xc3\xf1\xe19{F\xbdI\xd4\
+\x9b\x94\xe9,\x99>\xcf\xd7\xc7\x97\xf2\x83\x9c\x17\xef(>\x99\xbfK\x16\xefz\
+\xc3{\xc3\x83g\x9d\xfe\xe4z7\xd1\xe2\x03\xa3%\xf7\xdb\x8edq\xbc\xe1\xaa\xe8W\
+\xe3\x7f\xa0\xa6\xd4k\xf0\xe2\x93\xc6\x1e\xa9h\xd2\xc5)\x9b\xccN\x82\x9cd\
+\x17\xd0\xffj\xe7\xf2Nm\xa8D\x81\x99\xc8pf\x95.\xbe\x9d\xcf\xb7\xae\xf5\xdcu\
+\xd7*O\xb6\xbb\x9e\xcb\xc6\x12\xac%cK\t\xd4\xdd\xa7\xa6#\xa4\x9b)\x04\x04 \
+\x04)\xc9RAVI(\xe6c\x8cC\x04\x82\x94\x82\xcby\x9f\xcf\xa7\xeb\xf5\xb2\xdf\
+\xbf\xa8\x1f\xbd\xff\xf0\xc7y\xbaL\xd7S\xd8\xc0\xac\x05\xdb\xdf\xd6\xfb\xc5<\
+\x11\xa4\x82\x8a\x1f\xde?\xfaqp\xb1\x88n\xd8\x1d\x8f\x1e\x8de\xbeJf\xcf\xb3\
+\xc5\x1b\x98\xd4\xc7\x0b\xc1Q\xbcR(\x15+\x85dy\x9c,\x8f;\xfd\xc9\xe8\xe0\xb3\
+\xee\xf0\xbc\xae\xa5\xc5mFk\xcb\xdcv\xbc\xf9\xe6_K\xab\xdc\xab\xb1K\xae\xfc\
+\x80eg\x00:\xf1\xcf\xcfttN\x8e\x039\xab\xc3\x91z]\xa7W,O\x01 \xaaDzl\xf0\xbb\
+\x0ehj\xeed\x06+@1+f\xb0\xf1H\x00k\x93X\xbf\xc6\x1cY\x8b\xaaz\x86\x8c\xbd4\
+\x99G\x91J\xbc\x9b6\x18\xa6vn\x0c\xb3bVJ9[F\xd9\x9a\x036\xce\x0bV\xac\xe0\
+\xb5\x14&CF1\xa4\xd2v\xbc\x89\xf9\x12h\x9e\xa8$\xd7N\xbci\xe4\xe3\'\xcf\xbe\
+\xf8\xd1\x9f]\xfc\xf7U\x16\xd9\x9b\xaf\xff\xb5,\xb2NDQ\xa0\x1bB\x92z\x92\x83\
+\x90\x13A\x85_\xf3k\x13D\xc8T\xdc?\xf8j|\xf0\xf0\xe2\x17\xf5\xa1)>_\xbecU^\
+\xe5pM\xf1\xf6\x17\xd4\xe9OF\x07\xcf\xba\xc3{WkL\x8b\x0f\x88\x96\xdco5\xca"}\
+\xf3\xbf\xff/\x11\x0b\x93\xfcBz$\xba\xc7\xf2\xde\x80\x1f\xe2\xc6\x90\xa3-\
+\xe4\xee\xe56R\xc5\x9f\rX\xc1N\xa6\xdad\xe5\x9cT\xf0\x8buYrg\xc5\xbe\xf5\xcd\
+\xbc\x83\xdc\xbd\xdc\x19\xfd\xe2\xf9\xfb\x96\xdaE\xf5\xf4\xe0\x05\x08,\xb1\
+\x9b\x13+\xa54\xa1+\xbb\xa0\x0c\xebW\xd7ac\xd0\x03\x80b\xeb\xf9\xdbB\xc1\xcc\
+\x90\xcaV\x8a\x04\xb2\x82gk\xdf\xb1G\xa7\xd3\xfd\xab\xbf\xfe\xc7\x0b\x86U5\
+\xd2\xe5\xe9\xdb\xef~\x13\t\x15\x87\x0c\n\xb9\xf7\x0c\x9d\xfby\xa1T\xb1\x8a\
+\xcbW\x81\x9cn\xd5\xefZ\xb0s\xe7\xe1\xe1\xe3\x8b\n\xf6s \x8b4\x9d\xbf\xc8\
+\xe6\xaf\xae@\xf1\x0c\xe8\x01\xc0\xb6\x84\x01:\xbd\xf1`\xffi\x7ft\xbf\xf9}jq\
+\x8b\xd1\xda2\xb7\x1ay2wO\xf3T\xa5\xfdY\xe8w\xcc\x15K\xc2\xcb\xd2\xa8S\xb1\
+\xcf\xa4\x80elr}\x84#v-\xd8=f\xdfB\xee.\xbb\xd1S\x06,\xa0{\x97\xaa\xec\xc0E`\
+\xedv\xdb]\xd9\x07\x13\xdd:a\x9a\xea\x9a\xed\x8c\x14\x905e\x8c\x13T\xd92\xb4\
+e`\x8f=\xc66\x8c\xdcS\x00\t\x02\x834\xddG!\x05\x01\x97\xd2}\xe4\x9c\xa5\xe9t\
+zzpx\xff\xa27\x04t\x07\xfbA\x18+\x99\x12\x10\x8e\x8e\xca\xe80\x10\x1c\x05\
+\x90\x9d\x01\xe1+\x9e\xfd\x96\xcbU3\x84@Hs\xccS\x1e\x882\xcf\xd6\xbd\xf0\xba\
+!\xcd \xea\x0e\x0e\xbf\xea\xee=I\xe7/\xf2\xe5[Uf\x17?\x96\x80@ \x10\x90L\xa5\
+\x84b\xce\xd6\xb3,\x99-\xbb\xa3\xbd{_\xb6F\xcd]AK\xee\xb7\x1aE\xba\xa8\x94\
+\xf8\x06Y\x1b\x9b\xb9\xda\xec(\x8d\x08>\xa17\xd2\xf2*\xcf\xc6\xbc\xd4\x98=0\
+\x9c.\xea\xca\xddo\x80\xcb(a\x82R\xe6\n&j\xba\x9d[\xd1\xa0\xfb-\xb7d\xedug8\
+\xf9\xcf\x17\x86\xf9u\xfe<@pS\'\x111\xb9)\xf3l\xffV%g6?\x19\xb7\x9e\xcd\x15m\
+d\x98H\x07\x82\x11\x07\xe4\x8ft\x05pr\xfc\xe6R\xe4\xbe\x9a\xbf+\x8b$\x10\x00\
+D\xba*\x12y\x1c\x86\x02 !\x04(\x80\xec\xc6XV\x1f\x01A1f+^\xe7\x00\xb0\x98\
+\x1e/g\xc7\x83\xe1\xe4\xe0\xc1\xb3\xe1\xf8\xbaf\x88\xa6\xf8\xde\xe4Y6\x7f\
+\x95\xce_^\x8a\xe2\x01\x04\x84 \x84T$\x15$s\x9e,\x8e\x9f\xff\xba7\xbc7\x98\
+\x1c\xb5\x14\x7f\xfb\xd1\x92\xfb\xadF\x99\xfb\xc5\xa7\x08`\xf7XLd\x9cb\x0b/\
+\x80g\'\x19\x82\xc7c\xb0\x04i\x19\x1d\xf0i\xdd\x18 \x02\xc2\xd1\xfa\x0erwJ\
+\x19\x04(\x1bY%K\xeeM\x89\xbc\x1b\xd5\x9d\xd4e{\x8d\xe7\r\xb3\x93+\x8ff\x9e\
+\x0b\xec\x05\xd8(\xec\x1d=\xcaNT\x11_w\xa4iv\x1c"\xc9\xed\x1d31x6=+\xcb\xe2\
+\xa2\xa3U\x99\x97\xa7\xdf\x81\x89\x99\x15P\xa4i\x9a\x95\xdad\x02\x91R\xe8\
+\x04y\xa7g\xc6\xaf\x12!+p\xb6\xe2\xa2\xe4q\x9f\x88\xcct\xb2\xc9j\xfa\xfc\x7f\
+\xa7\xfd\xe1dr\xff\xc9h|\xdf\xc5\x93\xaf\x06\x11\xc4\xbd\xfd\xcf;{\x8f\xd3\
+\xe9\xf3t\xf1\x8aeq\xa9\xc3\x9d\x8a\x97\x12Rq\xb2p\xe1\xd6\xd6\x8b\xbf\xd5h\
+\xc9\xfdVC\xca\x1c0|\xea\xa7\xc4Xe\x0e\xbb\xd5\x8b\xa3R\xb5\x16n/v\xbcnv#k\
+\xbf;\xeb\x1dd\xdd\x18\xcd\xecN\xbf7<\x19\xf2=\x19\x9b\x16y.\xb7\xee\xd8R=}X\
+:G%\xdbmP\xd5\xae\xab\x92-I\xfbS\xe6\x9a\xe4\xdac\xff\xf7N\xef\xa1\xdaR3\xfe\
+u\x1a\xa5\t\xa0\xea\x96\x86\x01\x84\x80R\xf6\x9a\x84"\xcf\xe7\xb3\xe9E\xc5;\
+\xd1\xe4\xc1\x8f\xe6\xa7/\xd2\xe51\xb3\x8a"\x15q$\xd9\xf4\xcaA :!\xbb.e\xb6\
+\xe6\xf9\x9a\xa3\x00\xbaf/L<\x13JA1T1;y>\x9d\x1f\x8f\xc6\xf7\x9e\x0e\xc7\x0f\
+\xe8z3n\x8b \xee\x1f\xfe\xa8;~\x92\xcc\x9eg\x8b\xd7\x97\xa6x\xab\xe2\xb5\x17\
+\x9f\xad\xa6\xd9zj(~p\xd8z\xf1\xb7\x10m@\xf5V\xe3\xf5\xff\xfc_U\xa6\x86\xed\
+\x84\x13\xc9\xceR\x815.<\x9b\xdd\x13\xd9\xfe_\\\x95\x80"\x8c`\x17V\xb0\x0bA$\
+\x02P\x00!\xcc\xbf\x8a\xdf\x05\xfc\xfc\x1bX\xabZ\xffS\xca\xfcT\x96\x90\xb8\
+\xd4\x03\x8aT3\xb2ZK\x91q\x8d\xb5\x890\xcd\x88\xae{\x07\x13P\x15\xd5\xd5\xa1\
+\xbc`*K\x9d*\xa3\xa3\xa9\xfa\xc5\xa4\xeb\xd8\xdd\x01\xb3\x12\x00C\xd9v\xe8\
+\x024lgkb7o\x1f\xf4h&\xf3!+f0\x8e\x9e~\xf6\xf9\x97?\xb9\xd4\xefn\xbd8^\xbd\
+\xf9\x8d\x10AN\xf7R\xd5e\x90 \xea\x88\xa4\xa3\xde\x02*+1]r^\xf2\xa8G{}\x12\
+\xf5\xce\x91\x01\xa9\xbc\xda\t\x8c0\xee\x0f\x0f\x9e\xf5\xc7\x8f/\xd5\x86]Pe\
+\x96\xce_e\x8b\xd7\xaaL\xafp\xb8\xed\x81\xcc\xe3O\xdc\x1d\r\x0f>k\xc3\xad\
+\xb7\r\xadr\xbf\xdd\xe0\xda\x84\x0f\xcc\xdc\xfc\xf3!#\xe2}a\xef\xf30\xb1\x93\
+\xc5n\x9b\xeb\x1d\x9c/#\x00\xab\xd9k\xca]\x98Q\xb0\xb5+V\xcd\xb9\xb8\x19r\
+\xdeN\xce\x93\x81k\x9b1\xdd\xed3\x86h<7\x98\x9c\xf1\xca\x84\xbfL\xf8\xd6=\
+\xca\xecnZ\x14"-X\xd73\xd0\xe7O\x92\xe4\xa2\x97\xb0\xe8\xf6\'+\x11\x82\x8b\
+\x18\xef\xa2h\xc4\xd4\x11\xc8E9W,\x17\tfk\x0e\x03\xdc\xdb\x13\xbdxK\xfd/\x02\
+B\x01fH\xdb\x1b\x95\xf9z\xfa\xfaw\xeb\xd9\xeb\xc1\xfe\x93\xde\xf0\xba4*\xc2N\
+\xff\xe0\x8b\xde\xf8I:\x7f\x99\xce_]\x96\xe2\x8dQcU|\x9e.N_\xfe\xe7\xb2\xa5\
+\xf8[\x86\x96\xdco7|\xb7\xd57X\x00\x06\x04\\\xdc\xd4\xb3\xd5\x9bg\xd8B\xce.\
+\x9c\xe9\xb2\xdd\xb7\xfds\xcc\xee\x9e\nl\x0bt\xbe\xca\xeeA\xa7\x17`[?\xa2\
+\xea\x87R\xab /\xfc7\xfe\x81U0\xc1oU\xa3\x01\xdbQq(\x81@&\xf0Z\xc5\xa1\xcd\
+\x91Q@\x82L"\xa0v\x8e\xd6\xab\xa5RJ\x88K\x18#$\x04($\x94\xcc\x8a\x8a\xa9\x00\
+\xb4\xa5~\xb6BZ\xf0\xa8G{=\n\xc4y\x9d#\x11B\xaaT<3\xf2d\x96\'\xb3ew8\xdc\x7f\
+\xd6\x1d\xdd\xbf\xa6QCA\xd4\xdb\xff\xbc\xbbw\x94.^\xa7\xf3\x17\xaa\xb8\x12\
+\xc53I\x05\xa9,\xc5wF\xfd\xc9\xe3\xfe\xf8\xa1\x10-\xb7|`\xb4\xbf\x80\xdb\x8d\
+\xcdj(\x15\xb3\xc3\xbc\xa3\xfa\xf3\xbc\'\xd2=\xfb}\x83\xf5\xab\xdcq\xcf\xd76\
+\xb2\xdd\xcb\x80\xacu\x0e\xb5G\x82m\x14ZO\x82\xdc\x9e\x8e\xd8\xbc\x97\xea}\
+\xd3K\xf2\x1a\xe0\xfc&W\x06\xa5\xd9\xb7P\x15\\\xe5\xcd<\xcd\xcd\x8f\xd0~Tz\
+\xfa\xba\xba\'\xa2iKI\xb7?ei\x92$\xab\xc1`\xb4q\xcb;A$\xa8s\x80\xf4\xa56\x9e\
+\x981]\xf3t\xc5q\x80\x07vV\xbc\x8b\x17\xec\xd5\x14/\x15\x00\x14\xe9r\xfa\xea\
+\xbf\xc3\xd3o\xfb\xe3\xc7\xfd\xf1#\xba\x1e\x8dR\x10\xf5&\xcf\xba{\x8f\xb3\
+\xc5\x9bd\xf6\\\x15\x97{F\t\x08A\x00)HJH\xe6<[\xe4o\x16\xcb\xb3\xe7\xc3\xfd\
+\xa7-\xc5\x7fX\xb4\x1f\xfd-\xc7\x0e=\x0e\x1dX\xac\x15T\xe7\x06m\xd5\xc0\xfe3\
+\x00\xacKO\xf0H\x9c<N\'\x8f\xf7\xab\x16\\\xc4\xfd\xb0u\xc2\xcc\x08\xa7\xad1\
+\x9d\r\x93\xc8k\x98\xdd\xb0!\xd8\xb7\\i+\xb66\xd5\xeb\x08\xc8{\xb2\xb0\xab\
+\xc9+\x9a\xa0[\x11\x85(\xcaZ\x9f8\x9f\x9e]\x8a\xdc\x01L\x1e|q\xf2J\xc9t\n\
+\x96\xcb$\x7f7S\x00T\x84\xac\x0c\x06\xc3A\x99\xce/~*M\xf1\x01A\xb1\xf9Wd\xab\
+\xd9\xdb?\xae\xce\x9e\xf7\xf6\x1eu\xfa\x93\xf8z\xa5`H\x84\xdd\xf1\x93\xce\
+\xe8a\xbe:\xc9\xd7\'\xf9\xfa\xa4\xea\xdc.\x00\x1dnUl\x92&\xcb|=}\xf3\xfb\xe5\
+\xd9\xf3\xfe\xde\x83\xee\xe0\xa0\xadD\xf6A\xd0\x92\xfb\xad\x86\x08c\x99\xe7\
+\x9e\xaf\x0e8\xd9^\x8d]\x82\xb3\x87y\xab\xdfI[\xde\xd5W\xd5\xb9\xd43H\xeaG\
+\xf9Z\x99+q\xec\x86{\x9a\x91\xa8\xf5\xad\xd5\xc8\xd4mlL[\x17\\\x8fry\xf7v\
+\xe3"\x95\xd4\xdf\xb1\xc3\xe6S\x00\x808\xa05yF\x18a6\x9b^\xbc\xbc\xbbF\x18\
+\xc6\x0f\x9f\xfdL)\xa5d\xa1\xbe\xfe\xd7\x03\x95\xadR\x95\x97(\x82\x83\xf1\
+\x93_\x16\xeb\x93d\xfa]\x91L/~B"\x04\x84\x00\xbav\x02\x14P\x96\xe9\xe2\xf4\
+\x9b\xc5):\xfd\x83\xe1\xc1\xb3N\x7f\xffR-l\x9e_\x84\x9d\xd1\xc3\xce\xe8\xa1\
+\xcc\xd7\xe9\xfcE\xb6|{\xa9\xa4\x1aA\x10\x01B\x90\xaeaP\xe6\xeb\xf9\xf17\xf3\
+\xe3o\xba\x83\xc3\xd1\xe1u\xdb\xd6\xe2\xb2h\xc9\xfdV#\x08\xa2\x92\xad\x8c\
+\xb6\x04\xd5\x94\xe7\xce_\x004\x93\x92\x13\xeadR\xc2}T\x07n\xf1j6=\xee\xc6\
+\xa10\xac\xed\xd8\xdb/\x0f\xc9\xd5\xf2\x85c\x9c\x97a\xf0\x9bK\xec\xaa\x02\
+\x08\xbe\xa0wc\xb3\x18A`ji\xb9\xad\xeb\xf5\xa5mw\r!\x84\x10\x9d\xe1\xe4\x11\
+\xe4\x9f\x02\x12\'\x0b\xf5\xf0\xd1\x11\x80\xa8\x7f\x18\xf5\x0f\x8bd\x9a\xce\
+\x9e\xe7\xab\xe3\xcb\x9d\x93 \x02C\xf1\xba\xc1\xd9\xfa4[\x9f\xc6\xdd\xf1\xf0\
+&\xd2\xcf\x83\xb8?\xb8\xf7\x93\xde\xe4\xb3t\xf6\xe2\xb2\xa9\xf1T\xabD\x06\
+\xc5\x9c\xaeN\xd2\xd5Iwx8\x9c<iG?\xfd`h\xc9\xfdV#\x8c\xfb\xd9\xfa\x8c\x99\
+\xab\xc8\xaa\x1f?\xd5/\x96\xc7m\x08\xb2\x12\xf2\x9a\xb2\xf4\xd1\xbc\xa9\xea7\
+\xed\x9b\x1aYou\xd8\xb9\xdam\xf3\x9f\xad\xe0^y2\x1b\xa7\xd7\xd8\x12\x01\xd8\
+\x0e\x17>\xae\xb9\xfc\xee\xa5v\tv\xafv\xe7\xc6\r\xfa\xbe:W+\\\x9e&\x01\xae\
+\x9ab@\x08\x03d\xaa\xcaB\xca\xb34K\x93^\x7f\xb0\xa3\xa9\xef\xc1`\xfch=\x7fKE\
+\xfa\xe8\xe8\xe9xRi\xd8\xaaf\xaf.\xcb~\x99\xd4dG\xf1\xfa\x1f3\xf2tv\xfar\x16\
+w\xf7\x06\xfbO\xbb\xc3{\xd7M\x8d\x0f;:5>\x9d\xbf\xcc\x16o.\x95TC\x1bI5\xe9\
+\xf2$]\x9e\xf4\x86\xf7F\x87\x9f\xc7\xbd\xbd\xeb4\xac\xc5E\xd0\xe6\xb9\xdfj\
+\xac\xa6/\xe7o~o\x87\xda\xd8\xf0\xa2K$\xb1\xe6\xb9\x13\xeen\xab\xd9\x81H\xb3\
+{=\x99\x1cB\x08\xe1R\xdc\x85 \n \x02\x04\xa2\xcasw\xa3\x99*e\xed\x98\xd0f\
+\xb8\xfb\xe9\xedJ\x82%\x9b\\s\xf6jCZ\xe2\xf4+\xce\xe8\xc6\xb8\x16\xd9D}/\xbd\
+]\xd4\x93\xdc\xa9\xde\xd3\x80\x95\xf4\x8a\x85\x99\xffu\xda\xbb~\x0fg\xf7\x13\
+\x18`\x05\xdb\x14K\xeb\xa6I\xf5<ww\x7f\x00\x11V)\xaf23\xf4\x16 \x06\xff\xec\
+\x17\xbf\xda?\xb8\xba(V\xb2\xc8\xf3\xbc\xdb\xdb\xd9=\x94\xd9"\x9d\xbf\xbcZAG\
+\x9f\xe2\xf5W"\xec\xdcLR\x8d\x06\xcb"]\xbcJ\xa6\xcfY\x0f\xac\xbb$\xa4W\x89\
+\x8c\x88z\xc3\xfb\xc3\x83g-\xc5\x7f\xafh\xc9\xfdV#O\xe6\'\xdf\xfe\x1b\t\xf3k\
+\xaa\x15\xfe%\x08;\xbc\xc8\x8fBVDo3\x1dm\xcdC\xc3\x9a \x08\xd2\xff\x11\t\xcd\
+\xf3\x02"\x80\x08Lz\xbb\xe3\xf7\xcd\xb8&\x9fG\xeej\xc7\xf0%\xcfv\xb7pc\x97\
+\xe0r\xed}r\xa7\xf3\xc8\x9d\xcd\x90%6l^\r_R\x96\xef\xe1\xc5r5\xa17\xc9\x1d\
+\xa6\xd3c\xa6zK-\xb9\x03Y\x89\xd9Zy\x1f\x01?\xfb\xfc\xab\'\xcf\xbe\xb8\xa1\
+\xdf\xedN\xc8"Ig\xcf/\xebwk\xb8\xd4x\xf7\xd4\x12\xc6\xfd\xfe\xf8q\x7f\xfc\
+\xf8\x9aI5\xb6mi:{\x9e-\xde\xb0\xbat\xdb\xb0A\xf1\x9d\xc1\xc1\xe8\xdaq\x82\
+\x16\xbb\xd0\x92\xfb\xad\x86R\xe5\xbb\xaf\xff\x89U\xc1\xcc\xce{1\xcc.62K\x1a\
+\xe4n(\xd4&\x86T\x1cj\xb5\xb1\xe6u!\x9a\xc3S]y\x19\x12\xd5\x19\x9d\xe25\xcc\
+\xce\xe0\xfa\xc0T\xbf\xaa:;\xf1n\x08\xb3n\x97WU\x07*\xe1\xae\x1bUq}\xd5\xdc\
+\xba/oN\xed\x98\x9dmIw\xa5*\xd2\x07\xf4\x8f\xcaXW\x1e\xd7\x1b\xadn\xe7/Q\xae\
+\x860\x00\xae\xe6iR\n\xd3\x95\x92\xde\xb8\xb1\xfb\x0f\x1f}\xf5\x93_\xdc\xd4/\
+\xf7|\xa82\xd3#\x8c\xae\xa0\x94\x19P\n\xd2\xf3\xa5\x82\xa8\xd7\x1f?\x1eL\x8e\
+n\x84\xe2M\xdbf/\xaf@\xf1ls:]=\xe1\xee\xe0`t\xf8YK\xf17\x8e\x96\xdco;N_\xfcG\
+\xb6:\xb5!RS\x9a\xcb\x94\x10\xa8S9\x9cc\x83\x9a\xe6&\xc7\xa3u\xe6t\xca]\x10A\
+\x84\xa6\xb6\x8c?6\xd5\x19@\x1a\x95l\xd7\xccn\xf5;K\xd6\x15\x00\xd8\x91\xaee\
+K\xcf\x92\xa9\xc1\x85\t\x8c`G\x9d\xd6\xad-cwqmp\xfd\x86~q\xee\x8fRJZg\xc6\
+\xcd\x14r\x11r\xaf\xb4\xbc\x9d\xd3\xc3\x91;\x01\xf3\x84\xd3\xbc\xca"\x9dL&?\
+\xfb\xf3\xbf\xbe\x81_\xea\x85\xa1d\x9e-\xde\\a\x84\x11\xea\x14\x0f\x1d\xe7\
+\x8c\x07\x83\x83g\xbd\xd1u\xcb\xd4\x98\xb6\x95y\xbax\x95]~\x80\xab\x86\xac\
+\x97\x8c\xef\xf6\xf7\x07\xfbOz\xa3KT\xdflq>Zr\xbf\xedXO_N\xdf\xfe\xde\xd0\
+\x1b\xd9\xc22v`)\x9aR\xbd\xb6\x06\x1e\xe9\xeb\x03\x84\xa7\x92\x89\x8c;c\x9c\
+\x19\n\xea\xb2\xdd\xa5\xbd[\xf8\xb1S\xe5\n\xcbhC\xc6\xce\x81dY\x17N\xb6{f\
+\xbb\x03\xf9\xff\xe9\x969\xa9\xee\x9ag\xb7\xf9\xb6Le\xa1x\xd3\x82X\xcf\xbd\
+\xf2j4\x93\xbb\xafv\xcd\x96\x81%w"\x17\x18\xb6g6w\xe6P\x94\xc8K(\xe6\xb4\x00\
+\x01\xddn\xe7/\xff\xfa\x1f\x85\xb8\xc4\xc4\x1d7\x02Ve:\x7fu\x83\x14\xdf\x1f?\
+\xea\xed=\x12\xc1u\xa7\x04\x81\xf1\xe2_\xa7\xb3\x177B\xf1qoot\xf0\xec\xfa\
+\xf5\x15Z\xa0%\xf7\xdb\x0fY\xa4o\xbf\xfe\'-1-\xb3\x1br\x87\xf5\xdf=\x93\x1d\
+\xa8\x93;,\xe9;\x97\xdbIx\xad\xdc\xad=C&\xacJ^\xb1_`\x83\xdc\xf5O;\x1c\xde\
+\xca\xf6\x06\xb9[v\xdd\xce\xec\xa6\xe1\x9e\xe9\x0e\x9f\xd6\xbdG\x0c\xbb\x1bl\
+\x16\x90\xa3`\xff\xf1\xc0*w\xd9\xbc>{\rW6\x84\xea\x8cuK\xee\\\xd9Gur\xd7\x7f\
+\x19B /1[1\x800\x0c\xff\xeao\xff\x9f\x8b\xd6\xfe\xbdi\xb0,\x92\xd9\x8bl\xf1\
+\xea\xb2e\xd9\xb1\xc3\xa8\x19L\x8ez{\x0fE\x10\xdfH\xdb\xb2\xe5\xdbt\xf6B\x16\
+\xeb\xdaz\x00\xbbs\xa1\x1c\xa4\x99\xb8\xdc|\xf4\x9d\xde\xde`\xffYot\xddl\x9f\
+O\x1c-\xb9\xdf\x01\x9c|\xf7\xefyr\x06\x8f\xa6\x9dB\xaf\xf90\x04pSm\xfb\xe6L\
+\xc5\x9c\r\xf1n5\xbc\x11\xef\xd4(\xe3n\x8d\xfbF\x06\xa4R\x80\xb4n\x8csIL\x92\
+LM\xb7\xeb\x83\x19~|\xc0\xf7e\xfc\x8e\x07\x9e\r\xef\xf7\x01\xd5\xf5\xfdN\x04\
+\xe0\x86\xe1\xeeZ`u:A\xf7D\x0c\x866^\xec\x0frV\xbbs\x906\xc9]\x7f\xb8\xf3\
+\xb5*J\x10\xd1_\xfe\x9f\xbf\xeb]x\xbe\xec\xef\x03F)_C\xc5+\xaf\xdb\x13A\xdc\
+\x9f\x1c\xf5\xc7GAx\x13\x14\xafd\xb6|\x93N\x9fk\x8a\xf7\x99\xe5":\\2t\r\x03\
+\xbd\x7f\xd8\x19\x8e\x0e\x9e\xf5\xf6\x8c\x89T\x142/\xca \x10\xdd\xce\x87\xe9\
+\\\xef\x1cZr\xbf\x03X\xcf^O\xdf\xfc\xd6\x86R\x89\x88\x1d\xe3\xe9\xb1\xab\xae\
+N\x0cW\x1d@\xa5\x9a\xdc\xdf\x95\x10\xb0\x13\xd7y\xe2\xbdF\xefdgb\x12\x80\xdf\
+u\x00h\x90{5cjC\xb1\xa3\xa1\xdb\xd1\xf0\xdc\xab\xee\xc8y.[\x94;\xaa\\\x1a\
+\xb7\xab\x8e\x93\x9akX)\xee\xe6\xc5\x96\xce\xf3\xb7\xa9\x8d\xb0\xa3x\x9d6W.\
+\x0fR+w+\xf0m\x8bm@\xa1\xfe7ADI\xce\xcb\x94\t\xf8\xe5_\xfe\xcdh\xef\xc3\x0f\
+\xa6gUf\xcb\xb7\xe9\xec\xb9\xacM\xe7r\xb1c\x9b\x14O"\x88z{\x0f\xfa\x93\'a\
+\xd4\xbb\x89\xb6\xc9|}\x92N\x9f\x17Y\xad\xbe\xc2\x05}\x16\xa9\x07\xdf*\x9d\
+\xd2\x890\xee\x0f\x0f\xbf\xc8y\xb8L\x14+\xc5J\xc6\x11\xdd?\x1c\x85Q;F\xe7=h\
+\xc9\xfd\x0e\x80U\xf9\xf6\xeb\x7fV2\xd3jW\x18\xd5\xab\xf3\xc9,G\xc2\x8a\xf7\
+\xda_Qm\xcal\'\xdeA\xa8\xe6\x9f\xf6\xf2\x0f\x85\xf5\xe4\xbd\x1cDw>\x13\x9b\
+\xf4\x98\x9dk\x16\xb7\xe7\x93l2{\x9d\xdd+\xc3\xc7S\xe6V\xc4W\xb2\x1dMr\xd79\
+\xe9\xca\xbb\x06`\x9f\x1c\xe0R\xdd\xad\x18\xd7m\xb05\x04\x1c\xb9;g\xc6\xb6\
+\xee"\xe4\x9e\x97<O\x18\x8c\x9f\xff\xf9\xff\xf1\x87 }X0\xabl\xf1&[\xbc\xbaT\
+\x99\x1as\xacI\x8d\'\xf68\xbe\xb7\xf7p0y\x12\xc6\xfd\x1bi\\\xb6:N\xa7\xdf\
+\xf9\x14\x7fq\x1f]\xb1)\x19\xaf\x7fY\x14tF\x87O\xa3\xc1}P$\xcb2K\xb3\xc9d\
+\x18\\f\xd6\xf2O\x10-\xb9\xdf\r,\x8e\xbf^\x9e\xfe\t\xb0\xe9\xedl\xea\x99{\
+\xe4\xce\x1e\xcd\xd7\xf9\xdd\x19\xd7>\xbf\x03\x86\xd6=\x8b\xc6\x87\x8b\xc5\
+\xc2y"\x00\xa0P\x89\xf3&\xaa\x04\x99\xc6\xd8\xa5\x1a\xa8z\xf1=\x17g\x17\x99\
+\xb7\xd4\xa0\x7f\xd4\xc8\xdd\x9d\xdd\xb8A\x9a\xe5\x95\xb4Dm)\x1b\xbaJ\xa4\
+\xe7*\xc1EP\xf5\xa7\xe3\x91\xbb\xffdRo21c\xb6VR\xe2\xab\x9f\xfc\xfc\xfe\xc3\
+\x9b\x991\xe3\xc6\xc0\x9c\xaf\x8e\x93\xd9\xf32\x9d]\xfa\xd0M\x8a\'\xd1\x1d=\
+\x18\xee?\r;W\x1c\x8b\xdbl[r\x9aL\x9f\x17\xd6W\xbc\x14t}\x05i\x92U\x95\x88\
+\xfaa\xff~\x7f\xf4\x10JH.\xc7\xfb\xd7\xaa\x95\xf6\xd1\xa3%\xf7\xbb\x01Yf\xef\
+\xbe\xf9gV\xa5\xe5]\xb6:\xd7%>j\x1by\x0b\xbf\xdb\x1d\xcc\x82cO"\x08\x9b\x88h\
+\xf8\xbd\x9e\x99\xe8\xf30\\q-\x97j\xa8\x89\xb6b\xd3\x8b0\xbb\x83G\xeb5\x8f\
+\xa6\x96!c\x1d\x1b\xb3\x8f\xbb\x96\x17\x02\xad\x16\x15\xb3\x92\xd6]\xb7\t0pA\
+T?\x9a\xea~VV\x939\x8a\xbd\xdd\xea\xed\xa5U\xcaI\xce_\xfe\xe8\'\x8f\x8e\x9e]\
+\xee\x97\xf7C\xa1X\x9f&\xb3\xe7\xc5\xfa\xf4\n\xc7\xca\x1a\xc53\x91\xe8\x8e\
+\xee\xf7\xc7\x8f\xe3\xde\xcd\x10\xe8u\xdaf)\x1e\xcc\n`\x11\xf6E0V\xd4?\xfa\
+\xf2\x8b\x1bi\xdb\xc7\x8a\xd6\xb7\xba\x1b\x08\xc2No\xf4`={\xc9\xd5dL\x046Ed\
+\xf4\xf4D\x9a\xfft\xf5+\x18G\xc6f\xcepm\xaa&\xd6\xc1D\x90\x02\x0bek\xc3+\xe8\
+y\x9b\x14H\xcfvd\xd5\xb5\xfb\x8bg;\x80\xb3\xe6\xad;\xa9\xdc\xfc\xef}`3\x8f\
+\xb7\xd1\xd7\xd6jb\xd3b\xb8Wr\xe6\x8e\xe1ne"\xa3\x15\xb9\xa3\xf2\x8d\xdc\xd9\
+\x9b\x97\x03v7\x8b|:\xa7\rn\x07#\np\x95\\\xbf\x1f\x10Q\xff \xea\x1f\x94\xe9,\
+\xd1\x95\xc8.\xa3\xdb\x02B@\xac\x18\x92u\x9cY%\xf37\xc9\xfcMgpox\xf0\xf4\xfa\
+\x14o\xdb6_\x9f~\xadU\xfc\xc5\xa1K\xe8\x04\x02R\t\xa9X\x95\x89*\x13Pg5\xed\
+\xf4\xc7\x0f\xdb\x8c\x9a]h\x95\xfb\x9d\x81\'\xde\x1by2:H\xea\x16k\x192\xf0\
+\xb2]*\x17\xdd\nb?M\xa5\xf2hP\xe5W\xd6\x9e\xa3\t\x96\xb7\x9dlvD_\xadm2\xbb\
+\xedi\xdc{\xdb0\xcf\xd0\xf7\x86\xacz\x1b\xc9\x97\xee5r\xb7j\xdc\rW2aU\xa9\
+\x1c\x83\xfb\xb2\xbd\xf2a\x9c\x9b\xa3?\x8b*[\xa6\xe6\xcc\xb8\x9d\xfd\x9bPL\
+\xf3\xb5\xfa\xec\x8b\xdb\xab\xdc}\x94\xe9<\x9d\xbf\xc8\x96\xef\xc0\xea\xfd{\
+\xd7\xa1\x18\x92\xad\x85E\x00\xa3\xd3\xdf\x1f\x1c<\xed\x0en\xa6\xa0c\xbe|w\
+\x05\x13\x89Y\xea\xd1\x18E)K\xa9\xf4\xb7>\xec\x0c\x87\xfbOz\xa3\xfb7\x92\xb3\
+\xff\x91\xa1%\xf7\xbb\x84\xc5\xf1\xd7\xcb\x93?y\xd1G\xb6\x1cmvh\x90;\xaaM^d\
+\xd5f\xd5l\xe7wTvI\x83\xde\x9d\xae\x86\x15\xec\x8e\x1c\xb1\x95\xd9\xf9\x9c\
+\x99\xf8\xec)+Z\xf7\x9a\xef\xb1\xbbn\x90\xf3U\xfc\x0cK\x06\xac-\x04\xd6\xb3`\
++U\xb1\xf3\x06\xb9\xc3#n\x9dnW\xeb\x03<g\x06\xdb\xc8\x1d\xa0E\xc2G\x9f\xfd\
+\xf8\xf1] w\r\x99\xaf\x92\xe9w\xd9\xea\xdd\xa5f\xde\xd0p\x14\xef>\xbdN\x7f2<\
+\xf8\xac38\xb8\x91\xb6\x15\xeb\xd3d\xfa\xdd\x05U\xbc\x02\xba\xa3G\xbd\xbd\
+\x87"\x10E\xb6Lf\xaf\x93\xe5\\\xb1\x99>7\x8c\xba\x83\xc9\x93\xc1\xe4qK\xf1>Z\
+r\xbfK`U\xbe\xfb\xfa\x9f\xa5\xccl\xda \xaa\x81K\x8e!\x05Q\xfdwj\xd2%\xc9T\n\
+\xf6\xd9\xba\x96u\xe8D{\xc5\xad\xb5\xab[\xcf\xdd\x93\xbf\x95`G\xc5\xef\x9a:w\
+\xd3:\xb3k\x95\xf7\xf4Q\xb5\xc9_\xe5=kTWu\xee\x8aM\xa9\xd7\xec\xacT\xbd:X\
+\xb5\xa7\xa3l\xd4\xb8\xdb\xc5Z\x89M \xc1\xeb\x06P=\xee\x80\x89\x99A\xb4\xce\
+\xf8\xe1\xd3\xbbD\xee\x1a\xb2H\xd3\xf9\x8bl\xf1\xfa\n\x95\xc84\xc5+O\xfdw\
+\x87\x87\xc3\xfdg\xd7\x9c\xf8\xc9\xa1X\x9f&\xf3\x97\xc5\xfad\xbb\x89DP\nE)G\
+\x87?\x1a\xdd\xffR*\xccf\xcb\xac\x90\x83\xb8\xe0\xb3\xdf\xe52\xd3F\x8d>2\x0c\
+\xbb\x83\xfd\'\x83\xf1#q\x139\xfb\x1f\x01Zr\xbfcX\xcf^\xcf^\xff\xb6\xe2b\xdf\
+\x8da\xebj\x10|~o\x88w\xb3\xd2n\x13\x1e\xc9\xba>\x03\\u\x17\xd4\xe0\xe9z\xbc\
+\xb4\x12\xd2z\xdb\x86\xe6\xb5\x87l\xc0\xebd\xaa\xcb\xbb\xc5\xaaU\rr\xafN\xe6\
+\xbb\xed\x0c]o\xd8\xa9vj\x92\xbb\xcf\xda\x00\xeb\x88\x85U\xfd6\x03g\xbb\'\
+\x03"V\x0cBV\xe0\xde\xd1\xdd#w\rUf\xc9\xf4\xbbt\xfe\xf2\xcaF\x8d\xae7\xa1\
+\x7f!\x9d\xfedp\xf0\xec\xa6\x8c\x9a2\x9d\'\xb3\xef\x1aq\x02\xc5($\n\xa9b\x11\
+?z\xf2\xf3%\r\xe7\x8b\xb4(\xa4b\x16D]\x9e\x85\xe5w\x04\xa9\xec\x0c\xddZR\x04\
+ag0y<\x98\x1c\x05a\xe7F\xdavw\xd1\x92\xfb\xdd\xc3\xe9\xf3_\xe7\xeb3\xe8\x02\
+\x01\x8e\xd3\x01\xa0\x96\x19\xe9\xf1\xb3\x0e\x8b\xb2\xaf\xdf\xcd\xfe\x80fw\
+\xbbX92\xfe9\r<\xbb\xc5\xbdx\xdf\x9f\x8d\xaf\xd2E\x82\xaa\xf0x\xbc\xa6\xe1\
+\xdd\x13\x05`\'8\xad\xf5#\xd6KAM\xb9W{xNN\xdd\x991\'\xf4\x1d\xfc\xf7\x18\xee\
+\xae\x01\x85\xc4\xe1\xd1O\x1e=~z\x91\xdb\xba\x9d\x90\xf9*\x9d\xbf\xbcZ=a3\
+\xb7\x1f\xd7)~\xf2\xa4;\xbc\xd7|\xca\xbb\x12\\\x9c@JUH\xc3\xd7\xccj\xaf?\xe9\
+\xed\x7f>+\x82^76U\x84\x18\xa0\x10\xd91\xad\xbf\xf6\xdbVQ|\x10\x0f&\x8f\x07\
+\xfbO>e\x8ao\xc9\xfd\xee\xa1\xcc\x93w\x7f\xfa\x17\xb0\x146\xd6\xe82\xd9\x8d\
+\x87n\xd2e\xe02%I/[\xf8t.\xfc?K\xaa4\xbc\x17\x95\xf5\xd8\xdd\xe3M\x8fgk_\xa2\
+\xf7~\xa1*\xb7\xa3\xd6\xcb\xb8W\xf26{AWk\xb4\xfb\x9d\x89\xf3\x7f4\xb3;\xb3\
+\xbd\xde\x01\xd4\x9a\xe4\xc8\xdd9\xf8\r\xc3\x9d\xc8R?\xd7I\x9eQ*\x1c}\xf9\
+\x97\x93\xfd;?Q\x9c5j\xde\\\xa1\x9e\xf0&\xc5G\xdd\xd1`\xffi\xef\x86f\x05)\
+\xf3\xd5\xec\xddw\xab\xd9\x1bS-B\xa9\xbd\xf1C1z\xaa\x14;\x0f\x91\x01AB1\xe4\
+\xec\x0fT\xcel\xbe\x17\x14 m\xaf\x00P\x10F\xfd\xf1\xa3\xc1\xe4\xf1\xcd\x0c\
+\xcb\xbakh\xc9\xfdNb5}1\x7f\xfb\x87Z\xce;\x00\xcf\x88\x07l\xd4\x14\x86\xab\
+\xd9)\xf7:\xb9[\x17\xa6Z\xe1\x9b7\x1b\x82\xac\xd2\xec\xd8\xd0\xea\xe7|\x95.\
+\xf6%\xabE\x82\xfdHk\xdd\xeb\xf7\xce\xc9l\x98\xda\xf8\xed6\xc0k\xf6!\xa7\xcd\
+\xeb\xcd\xf0&`\xf2<\x19\xd7\x9dT\x06\xbdw6\x06\xa4\xc2\xd3\xaf\xfejo|[F\xa8^\
+\x13J\xe6\xe9\xfcU:\x7f\xc9\x17\xa8D\xe6~\x83\xfa\x97\xb4I\xf1ag0\x98<\xe9\
+\xef=\xa4\x9b\xa8\x9aYd\xab\xe5\xd9\xcb\xe5\xec\x8d*\x0b\x11L\xa4\x18\xe9&T\
+\xcf\xa2\x82\x98)\x90\xa7\xfdx\xc1\\\xfb\x9aZ\x8a7\xb1\x1f!D\x7f\xef\xd1\xf0\
+\xe0\xe9\xa7F\xf1-\xb9\xdfU\x9c\xbe\xf8M\xbe:\xb6\xa69\x9c6\'\xda\xe2\xa8\
+\x10\xd9\xd96\xfc\x00,\xc3\xe3q\x0f\x1e\xaf:\xa9\xd4\xa4q\xcbwt)N?\xff\xbbF\
+\xb5\x17\xd7\x14\xaf/\xa9\x9f\xc9(wB\x95&C\rr\xaf\x95q\xaf\x8e\xddi\xb8\x93O\
+\xeeN\xdd{\xe4\xfe\xf9\x9f\xfd\xed`8:\xf76\xee\x18tA\xc7d\xf6\\\x15\xc9\xce}\
+6\xd6lR\xbc\xfe]\x85q_\xab\xf8\x1bI\\)\xf3dq\xfa\xe2\xf4\xdd\xb2T\xa1\x105\
+\xe1\xa13_\xa3\xa8$\xcc\x86\x1d\x16\xdbdH\xa9 e\x8d\xe2\x07\xfbO\xa2\x1b\x19\
+y{\x17\xd0\x92\xfb]\x85\x92\xf9\xf1\xb7\xff\xa65\x17\xf9\x1c\xadk\xbe\x83@U\
+\x04\xd5\'w\xb3\x97\xfb\xe9\xc9|\xd4W\xfa\xb6wS\xa6o\xf3\xd3\xb7}\x934/n7dw\
+\x7f\xf3\x9aM\xa9\xf2p\xbc\xc3|W\xc8Z4U-0\xb7\x8f\x8d\xb1V\'tV\x8c\xdd\xc1K\
+\x82\xf4\xe2\xb7\xee\xd5\xc6i\xc1\x14|\xf5\x8b\x7f\x88\xa2\x8f\xd0\xc6e%\xb3\
+\xc5\xebt\xfeR\xe6\xab\xe6\xa6\xddG9\x8a\xd7,\xef(>\x08;\xfd\xc9\xd1`\xf2\
+\xf8F\xea\t\xbf\xfc\xfa\xeb\xe5*!\xff\xa9\x93\xc1\xccD\xe8\xf7;\xb3\xd9\xabA\
+G\rbY\x97\x05U\xe3+\x8a\x07HPo\xf4`|\xffG\xc1\xc7\xf8Kl\xa0%\xf7;\x8c|=={\
+\xf1k\xb6u\xde\xe1(\x9b\xec\x03\xac\x9f\xea\xe8\xc8\xbd.\xd8\x8d\x1f\xcf\xd5\
+{\xb3\xde\xbe8\x0b|\x97N\xdf\xfe\x05\xda\xf6\xbd\xaau/[\x0f\xda\xb2\x8e\xaaM\
+\xd6\x9d1w\xc8:A\x91\x98m\x9e\x0cUU|5\\\xde;3\xb1wB\xab\xc8\t6\t\x12\xbe\xe1\
+n\x9b\xe2\xdc\'M\xfdA\x18\x7f\xf5\xf3\x7f\x10\xc1G;\xae\x9bY\xe5\xcb\xb7\xc9\
+\xec\x85\xcc\x16f\xcd\x05\x8e\xf2)^\xd7\x9b\xb4\x14\x1f\x87\x83G{\x07GQ\xdc\
+\xbdN\xab\x92\xf9\xf4\xe5\xcb\xb7\\\x99/\xe6\xbb\xd0\xebtU\xb9\x8az\xe3<\x9b\
+\xc6\xeaM\x14\x06\xbb\x9a\xab\x9f\xbaJK\xf1"\x0c\x07\x93\xc7\xc3\xc9\xd3\x8f\
+\x9b\xe2[r\xbf\xdbX\x9d}\xb7x\xf7?\xb05\xb7*\xcb\xc5\x19\x94\xb4\xe9\x9b;#\
+\xde\xecl\x02\x89n\x93}qA\xcd\xca\x95o\x9a\xd7\x1e\xf8}[\xb6\xb5\xe2\xfc\xbd\
+\xad\x07\xee\xbe\xa5\xe4=?\xd8\x95\x96\xdc\xf5{UK\xbc\xaf\xd2!]yH=0\xd5U\x1b\
+ts\xf2\xd9+\x18\x7f\xab\xf6\x94b;\x8cno\xef\x8b\x9f\xfe\xcd\xf6\xbb\xf9\xb8\
+\x90\xafN\x92\xe9we\xb6`\xbe\xe8\xe8\'\xf7\x04(\xf5\xdc\x8b\xfa<%\xe72\x9c\
+\x1c\x1e\x8d\x0f\x1fw\xbaW\xb6\xbcyv\xfcv:_)[k_\x10\x05\x04Vi\x7f\xef\xc1:)e\
+\xf2no2B\xf2-\xab\xed\xfa\x1d^\xdb\xb4\x8f\x04\x86\x08\x82\xfe\xde\xc3\x8f\
+\xd8\xa8i\xc9\xfd\xcecy\xfa\xed\xf2\xf8\x7f\x9d\xd5\xee\x13\xb71Dj#N\xfdW\
+\x9bNc\xb9\xccO\x93lH{\x07\xdf\x18\xd9\x00\xef\\\xa8o\xf0y\xf6=\xa7pw\xe2\
+\xbb1d\x9e!\\\x87\xc2JOS\x02\xe5\xfb-\xb6\xb9Z\xd5W\xbd\x82\x17w\xad\x0fL\
+\xb5\x16\xbfa~\xe7\x08\x99\xdd\xf6\x0e\x1e\x1f}\xfe\xb3]\xb7\xf5\xf1A\x16i\
+\xbe|\x93\xcc^*y\x89\xb9\x9f\xc8<\x18\x19\xa3\xa6T\x9c\xe6(\x15\xf5\xfa\xa3\
+\xfd\xfbO\xf6\xf6\x1fn\x91\x1b\x17@\x99gi\xb2\xce\xf2<\x0c\x82@\x04E\x91\xa5\
+i^\x14E\x1cQ\xd09\\\xcd^\x8fza(\x96\xc5\xea\xddy\x93\x80\x13X\x9bH\x12R\x01`\
+"\x11\xf5F\xc3\xc9\x93\xde\xde\xcdd\xfb\xdc\x1e\xb4\xe4\xfe1`\xfe\xf6\x0f\
+\xeb\xe9\x0b\xcb\xef\xda\x9f\xa8\x99\xc7^\x02{\xd3\xd0n8-\x9b\xa3R}\x15o\xcf\
+W\x03o]\xbb\x89J\x0e\x9fk\xc1\xeft\xee\xed{\xff\xe9\x81\xcd\x9f\xab!w\xe7\
+\xb7\xf8\xe9\x8f\xc6t!\xdbST\xb3\xeb\x01U\xc5pe\x03\xc9z\xef\xc6u\xb5u\xf3\
+\xe0\xc9\x8f\x0f\x1f\xdc\xc9\x11L\xd7\x81\x8d\xb86\xa7\xd0;\x1f\r;>-8\xcb\
+\x99\x81\xfep|\xf8\xf0\xf3\xd1\xf8\xdeu\x9a\x94\'\xc9rv\x16u\xfb\x80LR\x99\
+\xad\xe7\xdd^?-\xe3 {>\x1a\xc6\xf9\xfa-+nt!\xfeWHg\x13T\x13?1@\x14u\x06\xc3\
+\xfd\x1b\xcb\xf6\xb9\rh\xc9\xfd\xa3\x00\xf3\xd9\xab\xff\xca\x96\xef`\xf2\xd6\
+\xeb\x82}\xab~\xd7\xfa\xd7\xbd\xdf8\xa37\x9c\xc9\xad\xd3?.\xf9\x859W\xa7\xd7\
+.\xce;\xd6\xeb\xc5MG\xc8\xfcUn\x92\xbbs\xc9\xab~\x87\x01\xe3\xd9\x92\xf6\xdf\
+u\xba\x0c\x9c\'cRell\xa2q\x9f\x9a\xdc\x9f}\xf5\xab\xe1\xde\xcdTV\xb9s\xd0S\
+\xe8%\xd3\xef\xe4\xee\xa4\x1a\x1f>\xb32\xa0\x14\xb2\x92\x93\x1c\xa5d\x02\xfa\
+\xa3\xc9\xfe\xbd\'\xa3\xc9\xd5\xc52+5}\xf7\x06"\x8c;]\x86JRY$g"\x18J\x95\r\
+\xf0\x86\xb9\x90EV%\x03lm!\x01\x0c\xc5(%$\x9b\xbf\x88(\xee\x0f\x0f\x9e~\x1c\
+\x14\xdf\x92\xfbG\x02V\xe5\xe9\x8b\xdf\x14\xc9\xd4\x1b\xa4\n\xff\xbb]\xcb\
+\x1b7+\xedLG\x96\x05k\x89\x91\xce\x94\xb7\x8b5\xb2<\xaf)[w\xaa\xba\x88m\xde\
+\rm!\xf9\xday\xa8\xb1\xdeJlg\x9eT\xc9@\xcc\xba$0\xea\xf4N\xb5,\x1a\xaf\x0f\
+\x80\x9d[\xd5/?\xe9\xdf\x02\x03\xac\x98D\xf0\xa3\x9f\xff\xfd5c\x83w\x1d,\x8b\
+t\xfe2\x9d\xbf\x92\xe5y\xf5\x8fw\xd9.\xa5\xc2:\xe3\xb4\xd0\xb1l\xf4\x07\xa3\
+\xc9\xfd\xa7{\xfbW,\xdb\xcb\xcc\x8b\x93\x13\x11\x8a4\x93\xa3\xbd\xbd\xa2(\
+\x16\x8bD\xa5gao?,_\x085W\xd2M\x9a\xfb\x9e\xa6*3C\xb71\xfd\xa2\xb8?\x98<\xee\
+\x8fof\xf6\xf0\x0f\x85\x96\xdc?\x1e(\x99\x9f>\xffu\x99/\x9dN\xaf\xf3\xbb^\rl\
+\xf0\xbb\x07\xdb\rh\xf8I5\xf6\x8f\xe4:_\x98]"\xbd\xb9zS\xa4\x9b\x82\x01\xec\
+\xe5\xed\xd85\xa6N\x9ao\xac\xb3\t\xe8y)\xefl\xbe\xead\xcfQ\xe5\xc08\x0f\xa7^\
+[\xd8\xb6\xc1\x9e<\xee\x0e\xbf\xfc\xd9\xdf^\xcd/\xfe\xc8`U\xfc\xf3\xadF\xcd{\
+?\xa0\\"\xc9\xb9\x94\x08\x03(\x850\x1e\x8c\xef\x1d\x8d\x0f\x1e\x8b\xcb\x8beV\
+j\xbd\x9cC\x81\x85(\xf2r0\x1c,\xd7\xc5z>\x13r\xd5\x1fu\xd5\xf2\x7f\xbc,\xa9\
+\xf3\xe0(\xde\xce\n\x02\x10\x820\x1eL\x8e\x86\xfbGw\x94\xe2[r\xff\xa8\xe0\
+\xf1{\x15_\xad?\x9b\xfa\xec\xc4\xd4\xfcKtB\xd9\x0e\xfc\xa7\xfa\xb6\xe6\x97\
+\xc5-\xef\xf4wj\xfb\xed\xfe\xaem\xa5\xf5\x1d\xdfM;\xb3G\xc5\xf6\xaeT\x80U\
+\xee\xd67g0\xd8U\x0cf\'\xe1\xe1\x0e\xf2J\xca\x90\x8d\xa06{\x1d&u\x00\x00 \
+\x00IDAT,~\xbd\xe7\xf8\xf0\xe8\xe8\xb3\x9f\xee\xbc\x81O\x0f\xacd\xbez\x97L\
+\x9f\x97\xf9\xd2\xad\xbcP\xd7G`F)\xcd\'\x9f\x97\\\x94\x88:\xbd\xc9\xbd\xa7\
+\xa3\xc9\x83\xe0\xf25\x1dW\xb3\xb3"/\x06\xa3\xf1z\x9d\x80\xd1\xe9v\xcef\xa9J\
+\xcf\x06=@\x9e\x14\xe9\x8c\xe8B\xd9\xab\xfa\xdb\xee\xc2\xad\xfak\xa0)~0~|\
+\xe7\xf2&[r\xff\xd8\xa0d~\xfa\xe2?\xcat\xe1\xe2\xab\xe41/9\xf9N6A\xa4&E}\xad\
+\xbc!Rk\xecN\xe7Qu\xe3\\\x17\xe6t\xb7\xe4X{\xdbv\x82O\xeez\x07\x9b\xe7\x0ec\
+\xcb\xb8\xb6Z]o\xbf\xea\xcc^\x97\xe0\xc9vT\x87\xa3:?L\xff\xc0\x8c\xa3\xcf\
+\x7f>>xt\xfe-\x7f\x8a`\xceV\xef\xd2\xd9\xcb"\x9d\xe2\x82\xe4\xee\x0e\x85\x91\
+\xc9\x8a\x91\x15\\HDQ\xbcw\xf0dr\xef\xe8\xb2\x14\x9f.\x17\xc9j\x8e\xa0;\x18\
+\x0e\x17\xcb\xa4\x13\x87e\xa9\xd6I\xd1\xc34\xa0e\xb6>&=\xe7\xfb\x05\xb0\x95\
+\xe2Ep\xf7R\xe3[r\xff\x08a\xf8=[T\xa6y-K\xd2F\\\xe16\xd7\xe0L\x19c\x84zTX\
+\x11\xe1FV\xe56\'}\'v\xf1\xbe!\xd3MZ\xb7>\xbbY\xd2{\x109\xff\xc4\xe5\xb9\xb3\
+V\xe8\xca\x8atX\xeb\xdd\xaba`\x95{M\xb6\xeb\xc3aW\xda\x0b\xd9\x15\x14|\xf5\
+\xc9\x1b\xee\xe7#_\x9f\xa4v"\xecK\x81a\x86>IF\x96s\xa9\x10\x86\xf1h\xff\xd1\
+\xe4\xdeQ\x14\xf7.~\x9e\xb2(Vg\xc7%D\x7f0\x12A0\x9d.{\xb1HR\x0e\x03\xd9\xe1\
+\xe3,9VeN\xe2\xda\x14?~<\xdc\xbf\x1b\x14\xdf\x92\xfb\xc7\t%\xf3\xb3\x17\xbf)\
+\xd29\xdcL\xaa\xb0\xccN\x86\x1d\x9b\x04]\tb\xb3Tsp\xb0\xd3%\xb98\xce\xe3t\
+\xfb\xc2\x9b\xeba\x08w\xe3a\x81<\x16f(\x93\x15\xc4\xd0\xca\xddcv\xc090\xf0\
+\x8c\x17\x9f\xe8\xcd#\r\xbbKU\xcc\xce\x8cn\x7f\xef\xcbOc\xf8\xd25Q$\xd3d\xf6\
+\xbcX\x1d_\xf6\xc0\x8a\xe2\x15\xd2\x82\xa5\x84\x08\x82\xbd\x83\xa3\xc9\xbd\
+\xa3\xb8s\xd1\xd1O\xac\xd4\xe2\xec\x84\x82 M\xcb\xf1x\x9c\xe6e\xba^G\x81P\
+\x14t\xc3\x9c\x90\xad\xa7\xdfA&\xb8\xb8\x8a\x07\xf4\xe0\tY+S\x13\x0c\x0f\x9e\
+\x0e\xf7\x9f\xdcr/\xbe%\xf7\x8f\x16\xac\xca\xb3W\xff\x95\xafN+~\xf7\xc8\xdd\
+\xdf\x936d\xb8^\xbba\xd8\\\xe5\xabr\xbe\xa2w\xb4\xce[\xd7\xa3\xc9\xf8\x1b\'\
+\xd0cV\tZ\xbc\x1br\x07+V\x9eZ\x07{\x84\xeeX\xdb\x8er\xb2O\x05.\x0f\x92\xf5\
+\xc4\xdd>\xb9\x8f?\xb1\xe1K\xd7\xc4\x95gpe\x98\x1a\x06v\xe8\x13\x04\xd1h\xff\
+\xe1\xc1\xfd\xcf:\xbd\x0b\x8d#\x95e\x99.\xe7\xa0\xa0\x94\xac\x94\x1a\x8eF\
+\xd3\xd9ZfI\xb7\xdb\t;A@\x94\xad\xdf\x15\xcb\xe7\xc4\xc5%(\xde>\xb9V5\x0c\
+\xeeB\xb8\xb5%\xf7\x8f\x19\xac\xca\xd3\xe7\xbf\xb6\xfa]\xd7M1_T\xe3(\xfb\xdf\
+\xed\xe6\xe4\xab6\xa1\xd2Y\x13\xb5}\xcf\xbd\xee{\x96\x9b\x92|\xfb\xd6\xf7\
+\xd0\xban\xbf\xc9\x81\x81\x91\xe1\xd6\xab\xd1\x15c\xea\xe7w\xb91\x9b\x12\x1e\
+5r\x87\xc9\xab\xb1\x871\xf0\xe8\xd9O\xf7\xef\x1d\x9d{\xd3-\x9a(\xb3e:\x7f\
+\x99-\xdf\\m\x06\xd7RAJN\x0b\x94\x92\x85\x10\xe3\x83\x87\xe3\xc3\'\xdd\xfe\
+\xde\xfb\x0ff^\x9c\x9d\x96R\x0e\xf7\xc6\xcbU\x12\x10\x11\x89\xe9"\x1dD\xe8\
+\x0f{E\xa9\x888\x9d\xbf\xa0\xf2\x94U\x0e\xef\xc9v\x17\x1a"\xa7I\xf1\xe3G\xfd\
+\xc9Q\x18\xdd:\xcb\xae%\xf7\x8f\x1c\xac\xca\xe9\xeb\xdff\xabc\xf2R!\x1d\xbd\
+\xb9Y<\x1a\x16<\xd5\x85;or\xb0\'\xf6\xb7\x06E\xb77\xc6{\xc7\xb5\x83w\xec\xd0\
+X\xcf\x1b\xbb\x01\x8e\x85\xd9\xd6\xf0\xf5\x88\x9b\x1b\xaez\x95\xfb\xe8_\xc2H\
+w\x17v\xae\xe6(d#\xe3\x83\xaf~\xd1\x1a\xeeW\x84,\x92t\xf6\xfc\xcas?\x95\n\
+\xa5\xd4*\x9eCA\xe3\x83\x07\xfb\x0f\xbe\xb8H5\x98\xf5|\x9a\xacW\xdd\xfe^\xdc\
+\xe9Lg\x8bn\x1c\xa6IY\xcar2\xea*\x11\x02Tf\xebb\xfd\x1a\xe5\x14\\\xe8\x18\
+\xce\xaeSmn`\xa0\xf4\xbdx\x11\x0c&G\x83\xfd\'\xb7\x8a\xe2[r\xff$0\x7f\xfb\
+\x87\xf5\xece-\xbb\x91k_\xe6\xc6\xd7\xd7\x1f\t\xc5\xa8\xe5\xb6_6\xcd{\x8b\
+\xc1\xb2-\xd1\xe6\xfd>\xccN\x8do\xfb+\xd693\xec\xbe\xd5\xbeN\xaf\xd8\xdc\x0e\
+YB\xc3j\xf2*\xc9\xd8}M\xa6\xcdp|\xff\xd9\x8f\xfe\xfc\x12\xf7\xdcb\x03\xaa\
+\xcc\xd3\xf9\xcbt\xfe\xf2\ns?1PH\x14%\xa7\x05\xa4\xe48\n&\x87\x0f\xf7\x0e\
+\x9f\xbd\x97\xe2\xf3$I\x97\xb3L\xd2x2)\xa5Z\xceWQ\x804W{\xc3N\xdc\xed.\x96ID\
+H\xb2T\xc8\x19\x8acp\xb6U\xc5\x9f\xf3\x85oR|\x10\x0c\xc6G\x83\xc9Qx\x998\xf0\
+\xf7\x87\x96\xdc?\x15\xacg/\x17\xef\xfe\x87Y\x91\xb5f\x1c7:\x1b\xde\xd3\xefU\
+\x9e;\x9b\xca\xba\xde\xb9\xf82\x1c\xbfC\xa4\xfb\'\xf3^6h\x9d\x9b\x8b[\x14\
+\xbd\xbe\r\xc0N\xa2\xea\x1e5\xc8\xaf\xf8\xe8\xf8\xbd\xb1\x08T\x0f5.\x0f\xd2\
+\x7f\x1ax\xf6\xd5_\\\xb3\x16J\x0b\rU\xe6\xe9\xecy2\x7fq\x05\xa3\x86\x81\xa2D\
+^rVBJ\xee\xc4\xc1\xf8\xe0\xc1h\xffI\xdc;\xcf\xa8Q\xb2\\\x9e\x9d\xb2\x08d\xc9\
+\xc3\xbd\xd1*)\x8a4!F\x18\xd1ho\x94d\xb2\xccs(N\xb2\xb4\x1f\xaeT\xfe\x8e\xcb\
+5\xa3\x1aKu\x91\xafye\xd4\xe8C\x88\xfa{\x0f\x87\x07\xef\xef{\xbeo\xb4\xe4\
+\xfe\t!Of\xb3\xd7\xbf\x95e\xeaR\na\x93\xde\xadT\xb5T\xbfi\xb6oe\xe7\xf7\'\
+\xbb\xef\x04o\xbc\xdb\xe5\xc3\xd4\xd6o]c:\x1fr\x93v4]\xf5\xba\x0f\xd3\xb4e\
+\xea\xe4^?9\x87q\xef\xc7\xbf\xf8\xfb\x8f\xac^\xe0\x87\x85,\x92t\xfe\xf2j3\
+\xb82\x90\x15\xc8J.J(\xe6N(\xc6\x07\xf7G\x87\xcf\xe2\xeeN\x8aWe\xb1\x9aO\xc3\
+\xb0\x93\xe6e\x10\x88(\xea\xcc\x16I\x84"\x8c\xe3(\x14A\xdc[\xae\xd6\xa2\xcc3\
+\x15\x0e\xfa\x08E\x91\xcd\xfeT\xe6\xab\xads\x94\x9d\xdf0\xa9P\xaaj@\xdc\x07\
+\xa7\xf8\x96\xdc?-\xa82\x9f\xbd\xfd}\xb6:\x01`=\x12\xb2\xf3u\xb0U\xeb\x8e\
+\xdd\xb9\x12\xb6\xd7F\xf3{\xc6\xdb7\x9dc\xaf\xbb,\x97\xdai\xaa\x1a\x03f\x04\
+\x93\xef\xc6`\x83\xca\xb9\xee\xc2;\x10\x91\xdfs\x98C\x98\xef\x1f\xfd\xe8\xfe\
+\xa3\xcf/v\x8b-.\x01m\xd4d\x8b\xd7\xea\xdc25[\xc1\x8c\xb4\xe0\xacDQ23:\x11\
+\xedM\x0e\x86\x07O\xbb\x83\xeds\x97+%\xb3\xc5\xb4\x90\xe8\xf6\x07\xb3\xe9|0\
+\x1c$\xa9LV\xabq?\x16q(\x82\xb0\x90\xc8\xd6+R\xccQ|\xef\xfe$_\xbdK\xa7\xdf\
+\x94\xd9%\xaa`\x9a\x86A\xa7\xfa\xc0\x8e\xbb\xa0\xde\xf0\xde\xf0\xe0\xd9\xf9\
+\x8f\x17\xdf\x13Zr\xff\x14\xb1:{\xbe<\xf9\xda\xcd\xc3P\x99\xf0\x9a\xd5M]Ir9\
+\xdf:1\xd0\xff\xa2\xec\xa2\xfbsT~\xb5y\xfb\xd2nZ\xf7\xb2\x18\xfdE\xb3\xe4u@&\
+<\xe0\'>Z\xbev\x14\x8fMy^\xdd\x91\x9f8\x0f\x06\x0b\x11}\xf5\x8b\xbf\xfb(\xe7\
+\xd5\xbb%`Y\xa4\x8b\xd7\xe9\xfc\x85*.I\xf1\x04f$9g\x05J\t\x00\x9d\x08\xa3\
+\xf1\xfep\xffIwp\xafY\xba\x1a\x00\xb0<=^\xa7\xd9hoRHUdy\x18\x04\xcb\xa4\x1c\
+\xc4\xe8\xf6\xbbEQ\n\x11\xac\xd3\x82d\x810\x9e\xec\x0f\xc3(\xca\x16o\xd2\xd9\
+we\xb6\xdc<\xd5{n\xeavP|K\xee\x9f(\x8at>{\xf3\xbb2[\xd5\xadv7v\xa9\nK6J\xfe\
+\xeeD\xe3\xaf\xe9|\x87}s\xcdV!\xefQs\xfd\x10vcl\xb5\xcb\xee\xa2\xc3&e\xc6\
+\xa7r\xd4\x83\xa8.\xbe\xda\xb8^5\x94\xab\x92\xed\x87\x0f?\x7f\xf8\xe4G\xdb\
+\xef\xa4\xc5\xcd\x81U\x99\xaf\x8e\x93\xe9w\x9b3\xb8\xee<\xc4~3\x15#\xcd9- \
+\x15\x08\xdc\ti0\x1a\x0f\x0f\x9e\xf5\x86[(>[\xce\xd7\xeb\xb5\x08\xbb\xddnw\
+\xb1J\x88\x15+\x94\xb2\xdc\x9f\x0c\x0b\xc9,\xa5R\xbcN\xb2N(\xa2^w4\x1e\x01\
+\xc8\x96o\xd2\xf9\xab2\x99^\xfa\xa6\x1a\x14\x0ftG\xf7\x06\x93\xa3\xee\xe0\
+\x07\xaa\x1a\xdd\x92\xfb\xa7\x0bV\xe5\xe2\xe4O\xab\xd3\xef\xfc\xe2\x04\xa8\
+\xf2\xdd\x99\x01\xe1\x12\x04\xebj\xf72\xf1\xd4\xf7\xad?\x97\xd6\xb1\xe1\xb3\
+\x93\xf5^\xf4\x92%w\xf3\xe7\xceF\xbdo\t\xa2\xd6\\\x9a\xad-\xd3c\xa0L\x1f\xc0\
+"\x88~\xfc\xcb\xbf\x0f/_\xc7\xaa\xc5\xd5\xa0gpM\xe7/\xcbt\xfe\x9e=\xbd\xf7\
+\x8e\xe2\x93\x8c\xd3\xc2d\x81\xc5\x11\xfa\x83\xd1`r\xb4Y\x99]\x95\xc5j6M\x0b\
+5\x1c\x0e\x19b\xb1L\x02.AA\xb7\x17\x86a\x9c\xa4\x99`\x95\xe4*$\xd5\x1b\x0e\
+\x06#\xe3\x98\x17\xeb\xd3d\xf6\xbcX\x9f^\xe1\xbe\xa4G\xf1\x00\xba\xfd\xc9\
+\xf0\xf0\xb3\x1f\x80\xe2[r\xff\xd4\x91\xad\xcf\xe6o\xffX\xe6\xabZ\xaa\xbb\
+\x15\xb3v\xfeTb\xbf\x1c\xcdU\xb1\x95\xd0\x9bK\xf5\xaa\xeb\xb5\xa8\xaei\x95))\
+c\xb7\xda22\xd6\x9f\xf1mw\xd4=\x19\xae\x9f\xb6\xd1\x003;\xb6\xe9\x0c\xf8^+\
+\xdb?\x08\x98\xf3\xd5q2{^\xa6\xb3\xed\xdb\xb7\xadt\x14\xbfJ9+\xc0\x80 tB\xf4\
+\xfa\x83\xe1\xfe\xd3\xee\xde\x03\xe1\xcd\xbd\'\x8b,\x99\xcf9\x88\xf3\xa2\x1c\
+\x0c\xfai&\x93\xf5\xba\x13\x90\x08\x83^\xaf\x9bK\x94\xe9ZJ\x95\x15j\x7f\x7f\
+\xd8\xe9\xf7\x82\xc0t\x0f\xc5\xfa4\x99\xbf\xbcBq\x05lP|\x7f\xef\xc1\xf0\xe0Y\
+\xdc\x1d]\xe1T\x17DK\xee-\xb4\x84\xffv=}\xce\xde`q\x976SS\xd1\r\\0S\xec"[6\
+\x82\x99\xde\x16\x9f\xe0\xe1\xc6\xa3\xda\x1f\xb5C\xd8\x06\x82\x1b\x9a\xdd\
+\xaf!\xc3\xb5\x93\xbb\x8b\x91\xe7\xc9\xb0\x08\xa2\x9f\xfc\xf2\x1f\x820\xba\
+\xc0\x1d\xb6\xf8^\xb0K,\x9fCX\x9a\xe2\xa5\xc2"am\xc4\x0bB\x1c\xa1\xd7\xed\
+\xf5\xf7\x9f\xf4\xc7\x8f\x1d\xc5\xcb<]/\x17qw\x98fy\x99\x17\xdd^w\xbe*\x84L\
+\xfb\xfd\x1e\x05$\x82x\x9d\xa4!\xcbu\xa6F{\xbd\xc1p \x82*]\xaaHg\xeb\x93\xff\
+\xdd\xd5\xf7\x9c\x0f]/^Z/\xbe;<\x1c\x1d|\xf6=y\xf1-\xb9\xb70(\xd2\xc5\xfc\
+\xf8\xeblu\n\x98\x19\xe7h\x8b\xc6\xbdb\xe6\xcc\xf6/Y\xbd\xd7h\xb8%\xd5k\xb5\
+\x9b\xa1u3\xb5\x9eo\x16m)\xe5\x08g\xbe\xfb\x16\xbc=7\xd5/A\xce\x96b\x86b>\
+\xfa\xec\xcf\x0e\xee?\xb9\xd2\xbd\xb6\xb8I\x14\xe9,\x9d>\xcfW\xef\xdc\x9a\
+\xf7\x12\x96\xfez\xe4%\xd6\x19k2\x8d\x02t"t\xbb\xbd\xde\xde\xc3\xfe\xf8q\x10\
+u\x01\xa82_M\xcf\x14\x85\x9dno\xb9L\x82\x80\x00\xb1J\xb2q?B\x10\x84a\x94\x17\
+*KV\xa4\x98\xc3\xf0\xfe\x83\x03\x12^:,s\xbe>I\xe7/\xafo\xd4h/\xfe\xfb\xa0\
+\xf8\x96\xdc[\xd4\xb0\x9e\xbfY\x1c\x7f#\x8b\x84\xdcH\'G\xab\x0e\xd71h6\x1e\
+\x03\xb6\x05Tk;m\xb1\xd7M#\xaa\xd96\xcc\x9eu\xa7\xde/\x10f\xadvWN\xd8\xcf\
+\xe37i\xee\x0cS\x15\xb27\x98|\xf9g\x7f\xd5N\xbat{P\xa6\xf3t\xfe2[\xbe\xe5\
+\x8bU"#2\x95\xe2\xf3\x92\xf3\x02\x85\x02\x01a\x808D\x1c\xc7\xc3\xc3/z{\x0f\
+\xb5\x8aO\xce\xde\xad\xb2r\xb87f\x88\xe5b\x1d\n\xce\x0b\x0eH\xf5z]\t\x16$\
+\xd6IN\xb2\x90L\xf7\x1f\x1d\x06as\xd2\x8fKy\xf1\xb5\xb8\xd1F\xb8\xb538\x18\
+\xee?\xe9\x0e\xb7gs^\x01\xff?{o\x1ef\xd9q\xdd\x87\x9d\xaa\xbb\xbf\xfb\xb6~\
+\xfdz\xefY1 0\x04@\x82 )\x1a\xdc\xc5\x9d\xb6d9\x92A\xc6r\xe4\xc4r\x12\xcbq$9\
+\xf9$\'\x7f\xc4\x96\x15\xd9\xf9\x92O\x12\x15k\xb1\x95O\x8a%[\xfa\x12}\x11-Z2\
+-j\xa1(\x12\x04@\x10\xfb>\x0bf03=\xbdoo_\xee\xad\xe5\xe4\x8fz\xb7^\xdd\xfb^\
+\xf7\xf4\x0c\x00\x02\r\xf6\xf9\x807\xb7\xefR\xb7\xaan\xd5\xafN\xfd\xce\xa9SG\
+\xe0~$Y\x91\x92wj+\xed\xdau\x14|\xa8\xf0\xee\xb1\xa8c\xccb\xed\x91\x065\xda\
+\xc2\xc6\x9a4q\xcc\x0f$*\xb6\x01\xf8YW\xc8\xe1/@Jm\x87\x11dO\xe5rH\xe3\xa8s\
+\x03*\x9f\x10z\xdb\xd9\xf7x\xfeA\xc3\xcc\x1e\xc9wLD\xdc\xed5\xaeG\xad\x8d\
+\x83@\xbc\xd2\xdf\x19\x07\x00\x88\x05r1\xf0\x98tlpm\xe2\xb8^X^\xc8\x95\xe7)\
+\xb5\xe3v\xa3\x1f1&0\x0c\xf31\x97\xbdN\xc7\x02dH\n\xa1\x87\xc4B)\xb8\xc0\xa8\
+\xd7\x0b|\xcf\xf1\xdd\xb0\x90\x1f}\x17\xeb\xd5\xfb\x8d\x15sz\x91\x91\xbdHM\r\
+\xf1\x98D\x9a\xf6\xc2\x89\xfc\xc4\xe2k\x02\xf1G\xe0~$\xe3E\xb0~k\xf7z\xa7\
+\xbe:f\xc1\x8f\x12\x92\xf9wO\xc11G\xe6\x89\xac2\x9f\x86u\x93Z7\x90}$\xdc\xa3\
+y2C\xb8\x0f\xce\x0f\x95\xfe$\xb6o:\x0e\xa6r\xa3\\8yvb\xf2h\xc7\xa57\xaf\xf0\
+\xa8\xd5\xab/\xc5\x9d\xed\x83`\x17!\x10sP{\xear\x81\x12\x81s \x04\x1c\x1b\
+\x1c\x8bX\x8e\xe7\xe4g\xcb\x93\x8b\x923\xd6\xef\xf7\x99\xb4l\xdbu\xfdV\xbb\
+\x87,\xb2m\xcbvm\xc7\xf5\xe38"Btct\x08\xf7\xc2P\xb9H\x8e\xc9X\xbf\xd9\xab_\
+\x8f;\xdb\xfb6\xf9\x91\x1c&\x10/\x10d2fy\xb9r8\xb10\xd6\x9b\xf3\xe0r\x04\xee\
+G\xb2\x9f\xc4\xfdVc\xe3R\xd4\xad\xebF\xf6Z\xf8\xcc\x8c\xd1\xd8!\xd5\r\x06kMS\
+\xe7\xf7@p0\xa0<sr\xa8\xbcgg\nc6MV\xf7Wg\x8e\xcf.\xdevK\xc5:\x92\xef\xa8\x88\
+\xb8\xd3k\xacD\xed\r\xbcQ\x98\x1aE\xd1D\x0c\x15\xd1\xa804\xe2`Spl\xb0)\xe1h\
+\xe7\'\x16raY0f\xb9a\xb7\xd7s\x1d\x07\xc1j\xb5{>\xe1\xc4q\xbc\xc0\xe7\x02d\
+\x1c1.\x85\x90\xc5R.,\xee\xe9\xe5"\xe2N\xaf\xb1|\xc0\xe9\xc50\x93\xea\xd9\
+\x04\xe2\x95\x16\xef\x04\x85\xc2\xc4\xb1\xa00uk\x10\x7f\x04\xeeGrc\xe9\xb5\
+\xb7\xbb\xf5\xf5\xa8\xd7\x94<\x1a\x9c\x1a\xc7\xc1\x8f\x8d\x8c\x9a\x1c%Z\xf2x\
+`\x1f>\xad\xd5tS\xf9\xd9\x0f\xd6\x93\xf3\xc3\x93\x19\xe6}\x98\xe8\x98\x1e\
+\x82\x03\xd5\x89\x00@u\xf6\xc4\xcc\xfc\xa9\xd1{\x8e\xe4M+"\xee\xf6[k\xacW;\
+\xc8:\xd2\x98\x83\x90\x00\xc927\x81\xc0\x05\xd8\x14,\x8b \xa2$\x8e\xe7\x15\
+\x1c\'\x17\x96\xa6\x89\xedD\xfd\xd8\xa24\x8a\xb9`\xb1\xebX\xd4\xb6l\xc7\x8b\
+\xe3\x18\x19\x8b8\x96J9?\xcci\x17\xc9\xf1\x19k\xae\xb2^\x8d\x1fxY\x16$Z<"\
+\x08\t2QJ\x9c\xa0\x10\x96\xe6\xdc\xa0t\xb3aj\x8e\xc0\xfdH\x0e*R\xb0N}\xbdS_c\
+q\x07\xc6\xab\xf0\xc6\x1a~\x1c\x9e\x19\x17\xacw\xf8tf}\xd4>\x98\x0e#\xda:\
+\x18 \xaeOj\x9d\x1d\x0c\xf4\x072\x86^J<\xe3\t\x10\xb2p\xe2\xcerefL\x99\x8e\
+\xe4\xcd/\x89\xefJ<\xce\xb0i6T&!fH\xc8\xd0\x8c\x89\x001\x03\x8b\x02\xa5 $\nI\
+<7?1u\xc2\xcd\x15\xda\xed\xaem\xdb\x04H\xa7\x17\x05\x94S/p=\xbf\xd7\xeb\x83`\
+\x11\'a\xce\xf6|\xcf\x0b\xf6\x8d\xee\x8b\x18wwz\xb5%\x16\xdd`Y\xd6h\x861\xf1\
+\x9bTY\xa5\x84\xfa\x85\xeaM\xb9\xc6\x1f\x81\xfb\x91\xdc\x9c \xca^k\xbb][\x89\
+\xba\xe6\x82\xec\xfd\xe3C\xa6\x06\x82\xd1\xad?0{y\xcc\xf1\x01a}p&\x1b9a\xc8\
+\xcc\xe8\xe8\xc5\x9a\xa9w\\\x7f\xf1\xe4\xd9\xb0P\xde;\xffGr8\x84\xf5j\xbd\
+\xc6\n\xeb\xee\xec\xb5\x03\x01\x02H\x84\x88\r\xa6\x92\xba\r\x10\x80\x98\x03\
+\xa5\xca\x06+\x03\xbf\x90+\xce\xfa\xb9\x02\xa1N?\x8a\x1d\x9bF\xb1\x04\x11{\
+\xae\x05\x96C,\x87\xf5\xbaB \xb1\xad\xcadi\xd4\x85fT\xe2\xce\xf6^c\xcf^\xa2!\
+>\x1b\xa6\xa60u@\x88?\x02\xf7#\xb9E\x89{\xcdv}\xbd\xd7\xda\x12|\xff\x1dv\xc6\
+4\xb0\xec\xa9\xacI\xf5\x96\xb4u\xe3\xee\xa1J\xaeC)`r6\xf1\xf1T{\xe9\x15\xca\
+\xd5\xf9c\xb7\x1f\xed\xb2\xf4V\x12\xdeo\xf6\x1a\xd7\x95\xc5u,U(%0\x01\\\xa2\
+\xa9\x92\x90\xc4\xfaJ\x00"&\x02?\x1f\x16g\xd0\xf2\x1c\xdb\xa2N>\x8e\xfa\x16\
+\xcaX\x82o#\xb5]b\xd9\xfd~\x0c,b`U\xabE\xd7?P\xfba\xbdZ\xaf\xbe\x1cwwn\xaa8c\
+\xfc&\t\xf1\xc3Ji\xfa6\xdb\xdd\xcf\xa7\xeb\x08\xdc\x8f\xe4U\x89\xe0q\xaf\xb5\
+\xd3inD\x9d\xfa8\xfae\x0f\x19cD\xcd\xd27\x98\xb9m\x04\xd6\xc1\xd0\xbe\x8d3\t\
+\xc7n\xec\x138D\xf6\x01\xb6\x83D\xb4lwz\xfe\xd4\xe4\xd1J\xa5\xb7\xa8\xec\xbf\
+\x83+\x13C\xff\x19S,B\x00\xd4~ R\xa05=}\x02\xed\xa0\xdfk\x97\xca\xd3\x11C\
+\xe4\x11"X\x16q\x1c\x9bZv\xccd\xdc\xeb\x10j\xe5\x8b\xe1X\x17\xc9\xb1\xc2z\
+\xb5~c5\xda\xdbor\xac\x8cB<\xa54W\x9a\xcbO,\xec\x05\xf1G\xe0~$\xaf\x8d\xb0\
+\xa8\xd3mmw\x1b[q\xbf5\xf6\x86\xbd\x14x\x1c=7\xca\x98\xef\x03\xeb`\xb2\xf3\
+\xc9d;\xed]\x90\x01|\x04R\x9e\x9c\x9d\x9e;y\xa4\xb0\xbf\xe5E\x196\xa3\xd6:J\
+\x9e\xba@@{\xbe\xf34\xc0\x13\x00\x8b\x12\x04\xe8E2bX\x9d:\x1e\xe4K\x9dn\x9f\
+\x12\x0c\x8b\xd3\xedv\xc7E\x06\xb6\xed\xb8\x0e\x00\x91\x12{}f!\xb7=\xaf2u\
+\x13\xb1\xc0\xe2\xceN\xaf\xbe\xc4n2\x86A\n\xe2%\x00\x01J\xa9\x9f\x9f\xcaW\
+\x16G\x89\x9a#p?\x92\xd7T\x10\xa3~\xab\xd7\xde\xed\xb5v\xa2^k\x14\xbf\xc7\
+\xb66\xdc\xeb\x9e\x91\xd5\xa7`\xa0\xf9P\x9dO\xa1\xffp\x9e\x9dlB2H\x89\x00!\
+\x94\x16\xca\xd5\xea\xcc\xf1 \xf7:\x06l:\x927\x9bH\x1e\xf5\xd4&\xdd\xda\xdd\
+\x0b\x00\x00\x10\xa0\xcf\x80\x00HD\x85\x95\x8a\x9c\x91\x08\x94\x80m\x11\xc6\
+\xb1\xd9\x95An\xb2:=\x17s\xc9\x18\xcb\x87\x85\x88S\x8c\xda\x96m[\x9e\xa7\x9c\
+v#\x0e"\xeay\xbe[\x9e\xac\x98Qhn(qw\xa7\xdfX\xbd5\xa2\xc64\xb7\x8e\xe5\xe2\
+\x8f\xc0\xfdH^/aQ\xb7\xd7\xde\xed\xb5w\xfb\x9d\x864\xf4&L\xfd\x03c\xcf\x8f\
+\x12\xee0\x1e\xd6\xd5\xe1 &\x8c\xb9q\x1eIv\x86U\'\x1d\xd7/Wf\xca\x95Y/x\x83w\
+\xb6<\x927J\xa4\x88\xa3\xd6z\xbf\xb1\x9a\xd9\xfb)\xe6\xc0\x05\x12\x92\xc4\
+\xf32bL\xda\x94\x10\x82\x8d\x0eJ\x08\xe7\x16\x8f\x03r\x81>\xa0\xb0l?\x8a\x99\
+\x0f1\xf89\xdb\xb6y\x1c\xa3\xc4\x1e\x93\xc5\xd0\xf5r9\xd7\xbb\xb90\xd1\xaf\
+\x86\x8b\x1f\x85\xf8\xb0<\xef\xe5\xcap\x04\xeeG\xf2\x1d\x10\xc1\xa2~\xaf\xd9\
+k\xd7\xa2n\x93\xc5=)\x06@oj\xe8\x993\xa3\xba\xbci>\x05\x03\xe8\x93\xe3aHwss\
+\x11Ji\x10\x16\xcb\x95\x99\xe2\xc4\xb4e\xdd\xd8\xab\xe1H\xde<2\\\xc5\x86\xf8\
+\xe8\xb7\x1f\x7f\xf9\xd2eP\x01\xde\x08 b\xa1P\xf8\xbe\xbf\xfa\x19\xd7\xbd\
+\xe9h\xfb(X\xaf~\xbd\xdf\\C9p\x04PDG\xc4\x07Vx\xbd\r\xaf\n\x9e\x07\x08\x96\
+\x05\xed\x9e\x10P\xa8T\xe7m\x87\x02X\x02m\x87\x92XR\xca\xbb\x8ec[~\xc8\xb8 <\
+\x8a\xa4m\x13\x91/\xe5\xfd\xfd]$\xc7\t\xeb7\xfa\x8d\x95\xb8\xbdu\x13\xb6\xab\
+q\x10\x0f\x00A~2_9v\xd4\xdc\x8f\xe4u\x17\xcb\xf1Bg*,N\x01\x80`Q\xd4oG\xddV\
+\xd4o\xc7\xfd6c\x11&k\xae3\x80\x0ec\x10\\\x1f\xa0\xd6\xd6\x07\xb7\x0c\xc2\
+\xc2\x0cv\x92r\xbd\xc0\xcf\x15\xc2\xe2D\x98/\xbb\xdeMw\xb3#y\xc3%1\x8c\xa3\
+\x94\x12\x11;\x9dN\xab\x95\xb2\xe5\xa0D)\xa5\x94\xb2\xdeht\xda\x1dJSd\x88\
+\x90\xb2\x90\x0f\'&&\xa2(\xde\xd9\xd9\x91(\x03?\xa8T&\x08!\xc4rr\x93\xa7\xfd\
+\xd2\xc2\xee\xc6\x95\xad\xf5\xeb\x04\xf9\xd4D@\tx6\xd1.4\x00\x00d\xa0RX\x04\
+\x84\x84\xd0\xb7\xfbqkw\xfbz\xb92o;\x94\x12F\x9c\x02\xed\xf7\xa8\xed\xf5\x85\
+t;5;(\xa0\x97\xb3\xfb}\x94\xb8\xbb\xd3\x9c\xac\x12\xef`.4Z\x1c\xbf\xe4\xf8%^\
+n\xa9\x18\x06\x07\\\xe0\xaaz\x87M\xc1\xa2C.\xbe\xd7\xda\xe9\xb5w\x8e\xc0\xfd\
+H\x0c\x15i\xe3Q\xdcx\x1c\xbbk 9x\x13t\xe2,=\xf9Y\xb0^K\xab\xa3\xe5x9\xc7\xcb\
+\x15&\x01\x00Q\n\x1e\xc7Q\x8f\xf5\xbb,\xee\xc5Q\x8f\xb3H\xf0X\x08\xae\xba4\
+\x8c\xf8\xc9$XO4\xdfB\x08\xb5,\xc7v<\xcf\x0b<?\x17\x84\x05?\xc8;\xaeG\xc8MP\
+\x9fG\xb2\x9fH\x8e\x9d\x15 \x94\xe4\x17_\x8b\xf0\x13\x07~\xad\x94RJ!\x84\x94\
+\xa30\x87\x96e!"c\xec\xd1G\x1f{\xe5\xcaU\x00 \x84X\x96%\x84P-\xe7\xf4\xe9S\
+\x9f\xf8\xd8G\xb7\xb6\xb6\xbe\xfc\xc7\x7f"\x84(\x16\n\x9f\xf9\xf4\'\xabU\xd5\
+\xf0\x10\xa8\xf3\xf2\xf5\xc6SO_\xb1,\xfa\xb9O\xdf\r\xbco)\xaa\x9d\x12\xc6S*\
+\x86@\xb0\x08 \x80\xe7\xda\x94\xf7\xb67\xafLM\x9f\xb4\xdc\xa0Y\xdf\xacL\xcet\
+{\xb1\rB\xd2\\\xd4\xa9\x11"m7\xc7\xad\xc0\x8ez;\xdb\xadj\x958\xaeC\xe8\xcd\
+\xb5C\xdb+\x14f\xde.\xe2n\xbf\xb9\xd2o\xae\xeb\x8d\x8e\xf7\x17\x95c\xb5\x14+\
+\xf1\xa8\xc1#p\xff\xae\x16\xad\x1f\xa1\x88\xe5\x0b\xff\x1a/\xfe\x0e\xf4\x86\
+\x1eZ\x92\xd8\xf4\xea\x97\xe9\xbb\xffgZ\xbe\xfd\xf5x;!\xd4v|\xdb\xf1!?1|\xa9\
+\xe0R\n!\xb8`\xb1\x94\x02\x11\x19\x8b\xa4\xe0F|\x02t<\x9fR\x8b\x10j\xd9\x8e\
+\xe3\xb8\x94ZG\xbbj\xbc\x862\x1c\xec\xa3\x86|\xf9\xf7p\xf5\x1b\xd0\xdb\x02 \
+\x10\xce\xd1\xc5\x8fY\xa7\x7f\x00\xbc\x89\xfdSx\xf5\x19P:;7D\x91n\xc9-\x04Q2\
+\xcem\xcb\x9a\x99\x99\x06\x00\xcb\xb6\xb66\xb7\xeb\x8dF\xb9\\\x9a\x9e\x9a\
+\x12B\xcc\xcc\xccH)c\xc68\xe7\x00\xd0h6\xae--MNVT\xe2\x9dN\xe7\xea\xd5%D\xe4\
+\\\x94\x17\xdf\x13w6\xfb\xf5e\x80\xae\x90\x80\x16AL\xb9\xd0\x08\x04\x82H)qm\
+\xab\x10\xc8\xad\x8dW\xa6gO\x87a\xbeV\xdb\xce\x05\xa1\x9d\xcbw;\x1d\x8f\x06\
+\x82`\xaf\xb1Dm\xcf\xf2\xa7)\x13\x8d\xdd\x96\xed\xd2\x89\xea\xadl\xa7g\xb9\
+\xb9\xb0z\xbb_Z\xec7\x96\xfb\xad\x8d\xac\xab\xcf^\xf5\xa6\x9e\x1d@<9\x02\xf7\
+\xef^\xd1]H\n\x86O\xfd\xef\xe4\xe2o\x0f<\x82\xb5\x97\t2y\xfd\xcf\xb0\xbb\n\
+\x1f\xfa\xe5\xd7\t\xdfG\x85Z6\xb5l\xdb\xf1\xc0?\xb2|~\xa7e8\xd8#b\xfd\x92|\
+\xec\x9f\xc0\xe6\xb7A\xf3\x03\xf5\xf3b\xed\x9b\xf2\xfaW\xad\xbf\xf2/h\xf1\
+\xc4\xeb\x9d\x13\x05\xeeQ\x14\xc5q\xcc\xb9\x1e\xddQ\x87\x0b\xe5\x8cQB\xce\
+\xdcv\xfa\xd4\xc9\x93@\xe0\xb9\xe7^h4\x9b\xc7\x8f\x1d\xbb\xf7\x9d\xf7\x00\
+\x00\xa5T\x08\xc19\x03\x80JeBJ\xb9\xbc\xb2z\xf6\xce;\x1d\xc7\x96R.]_\xde\xd9\
+\xdd\xadNN\xb6Z- \xd4+\xccy\xf9\x99\xb8\xb3\xddo,\xd3\xa8\x151\xb0)\x11\x121\
+a\xde\x11AH\xa4\x00\x9eM\xad\x107\xd6\xaeLL\xce\xe7\xf2e.x\xdc\xae\xe7\x0b\
+\xa5n\x9f\x93\xb8\xed\x17N\xf7\xdb\xd7Y\xfd\x82\xe5\x14\x84;%{\xee\xeen\xd3\
+\xb6\x9d8\x8a\xbc\xc0\xcb\x05\xee>\xe1hF\xc5r\x82\xb0z\xbb_:\xd6o\xaeF\xcd5)\
+\xf7_-\x98T\x9dz\x96\xc2\xd1\xd4\xf5\xbbTT\xe7\x11Bp\xce\xc5\xe5/\x91\x97\
+\x7f\x17P\x82\xe9<80\'\x01\xee\xbc _\xfc\xcd\x8c\x0f\xd9\x91\xbc\xf5D!\xfb\
+\xa0U\xc4=\xf1\xf8\xcf\xc2\xc6\xb7\x86\xc8\xae\xa2mI\x8e\xab\xdf\x90O\xff<\
+\xb2\x9b\x88\x87uk\x99Q9a\x8c\xf5\xfb}.\xb4\xea:\x0c0\xc7\x18c\x8cq\xce\x85\
+\xe0\x9c15\xcfS\xea\n"r\xce\x93Q\x01r\xb9`nvvee\xb5V\xab\xa9\x01\xe3\xfa\xf2\
+r\xb9\\:~\xfc\x18\xc2\xc0\x80J\xa8\xe5\x15fJ\x0b\xf7\x15f\xee*\x14\xcb\x94\
+\x00!`Yj\xc9\xdb\xd0\xf0\x13\x0b\xa4\x94L\x14\xa0Q[\xdb\xd9Zw,\xb0,\xd2\xeb\
+\xf5l",?\xdfg\x10\x04\xd3n\xfe\x18\x8f\xea\xbc}I\xc4\xab\xdd\xfaF\xa7\xd9B\
+\xea\xb0\x987\x1a\xedN\xeb\xc6\x01\xce2b9~8y\xba|\xec=A\xf98\xb5\xbc\x83V \
+\x1c\x81\xfbw\xa5\x98\xd3\xde8\xea\xe3\xd5\xff\x082\x1e^N\xc2\x9dk\xdfr\xf9\
+\xca\x17q\xe7\xb97"\xa7G\xf2\x1d\x15=\xde\xf3\xeb_#\xeb\x0f\xa5\xae\x19\xeb\
+\xc2\xe4\xd2Wp\xfb\x99\xd75\'&\xb8\xc7q,\x85I=\x0f\x90\x96s\xae\xf0=\x8e\xe3\
+(\x8a8\x17\x00\xc0\x85P\xe7\xd5I\x163\x00 @fg\xa6\t\xc0\x95\xab\xd7\xe28n\
+\xb7;++k\xb33\xd3\xe5R\x91s\xa1\r<\xaa\x98^~\xaa8\x7f\xef\xe4\xe2=\xf9b\x05%\
+\x9a\xeb\xe1\x94\x1d_H$@+\x05\xe0\xd1\xce\xe6\xc6\x8aE\tg\x1dB\xa9\x94\xc2sI\
+D\xf3 \xdd\xa0x\x1a\x89#\xa2\x1aD\xd7E\xf7\n\x89w\x11\xb9m[\x82\xc5,6\xfa\
+\xda\x81\x85\xda^8yz\xe2\xd8{\xc2\xc9\xd3\x96}c3\x189\x02\xf7\xefB\xd1\xc8\
+\xaez\x0ek\\#\x8d\x97S\x1bYd~\x11A\xc4r\xeb\x99#\xaf\xd9\xb7\xb0\x983\xb9(\
+\x8ap\xe9\xcfSK\xc82nL"\x96\x9bO\xddT\xbc\xf2\x9b\xcdL&K2\xb5\x88\x94$9"\xfa\
+\x1e!\xc4 ?\xe9\xe6\xad4w\xc6\xf9\xe4de\xb2:\xb9\xb4\xb4\x14E\xd1\xca\xcaJ\
+\x14E\xa5RI&\xde8\xa3yp\xc3\xc9\x89\x85w\xce\x9c\xbaOyy\r]h\x12\x07-!\xa0\
+\x9c\xa7\x84\xd7\xb66\x96-b\xc5Q\x07\x90S\xc7\'\xc8,/d\xa4\x18\xe4f,\xaf\x84\
+(A\xb4\xfb\xf5\x97\xfb;\xe7\xfb\xad\x8dN\xb3\xd1\xdc\xad\x8f\xbe\xee\x80B,\'\
+(\x1f//\xbe;_\xbd\xdd\xb2]:n\x7f4\x15P)\x16G\xe0~\x18\x05%\x88\x08D\x04"\x1e\
+\xf7_\x1fnd~AD\xad\x13\xb1\xe6\xca@m\x1fj\xeb\xe9\xb6N\x08 bT\x7f\xfd:\xf3\
+\x91\xbc\xe1\xa2\x86|!\x84Rxe\x7fw\xd0\x12\x06{\x9d\x18A\x1d\x14\xf2\xc6\xad\
+\xd7u\xb0GC\xc6\xe2/\x12$\x04(\xa5\x84\xe8(B\x86F\x92\xccB\x84\x14\x00\xc8\
+\x19C\xc4\x99\xe9\xa9Z\xbd\xb1[\xab]\xb9\xb6\x14\x04\xc1Tu\x92\xb1\x1b\xb0\
+\xd8nP\xaa,\xdc=w\xea\xdd\xf9\xf2\xec\x00H\x13\x17IB@H\x12\x06\xb6\x03\x8d\
+\xad\xcd%\x82H\x00;\xcd\x9d\\\x18\n \x16p\xe2\xcfZv\xd9\xf1J\x00\x04\x81\xa0\
+\xe8\xb1\xd65\xde[f\xbd\x1dy0\x03\xe9^B,\xc7\xf2\x8a\xf5.\xddn"\x97@I\xa2\
+\x8c\x01\x10\x00.\xa1\x1b!\x17pdP=4\xa2\xdb\xb7\\\x7fT>\xf3K\x00\x83m?\x07\
+\xcb\x18\x06\xbf\x04P\xd2\xc5\x8fY\xf7\xfc\x83\xfd\x93\xd2\xd6*\x8e\x01\x825\
+\xec\xb7\xc34\xd1<\x89V\xa0\x14\xa5\xa3m\xa3\xdfzb\xd2t\x8a\xe3\x86\xdc\xdb|\
+xp\xb0\x92\'#\xca\x12S8\xfd\x9dl\x0f\xa3\xebz\x08\x00M\x84\x10B)M\x00n\x80\
+\xf5\x84\x10U.\x95O\xceyeb\xc2\xb6\xed\x17_<W\xaf\xd5\xe7\xe6f\x1d\xc7Qz=\
+\x18\x9dk\xac\xb8A\xb1\x12\x14\x0b\x95c\xed\xfaZ\xbb\xbe\x0e\x92\xabuC\x84 !\
+\xc4smB\xa2\x8d\xb5KS3\'=?\xd7\xa8o\xe7\xc2\x02u\x0b\xddn\xc7sK\xcc\xce\xfbt\
+\x89\xf3\xbe\x10R"\x10\xe02^\xdf\xba\xda(VO\xdf\xda\x16K\xc8\xdb\xdd\xfa\xf2\
+\xd5\xa5\xf5Z[\x00B\xbd\x0b\xa5\x1c-\xe5\x88c\x81\x90\x10qD \x9eK\x1d\xeb\
+\x08\xdc\x0f\x83\xa4|\x18\x10\xb1\xbd\x86\x1b\x8f\x0e\xcd\x9e\x00Y\xad*7\xbd\
+O\xaf3g\xb2\x8c\xb1\x1e\xadF\xee\x8c\x1do\r\xdd\x02HJ\x03\x1ah\xee\xe5;\x8f\
+\x90\xfd\xad-C\xa6\x8e\xb1n\xf1\x83\x05\xe7\x8b6\xaf\x03$\xad\xcbh\x1b\xb2p\
+\x1bT\xdf\xfdF\xb7\x87\x01\xb2[\x96\xa5\x1c\xe15\xa6SJ\x8d\xbc\r\x16\xbb\t!J\
+\xa5b\xa1\x90_\xdf\xd8\xa4\x94NNVn6\xf3\x8e\x9f\x9f\x98\xbd\xbd0y\xac\xb5s\
+\xbdU[\x05\x90\x08 %RJ|\x97ZTn\xae\xbfR\x9a\x98/\x95\'\x19\x8b\xa4\x8c\xf2a\
+\xbe\xd3\x8b\xa9d$w\x9b\xd5]\xb2i\x93\x0b\x14\x12\xa4\x04\x8c\xfb\xbb\xab/\
+\xb9A!,\xcf\x07\xc5\x99\x83\xae\xc9\x10\x91\xe8,w\x1a\x1b\xed\x1e\xcb\xb9\
+\x88!\xe9\xf41\xe6\xb0\xd9\x90\xb56T\x8b\xd4s\x88cS\xd7\x02P\x19\xbb\xa9\xe2\
+\x1d\xc9\x1b%\xa6b\xc5%\x05\x80a\x7f\x030\x91\x1d\x08Azc{\x8b\x9a\x83\x0b!\
+\x98\xc0Z\xfe}H\x12\x0f\xadq-\x9e\xcf\x7fRV\xdey\xc4\xb9\xbf\x85e\xe0e"\xa5j\
+f=:\xb1:\xf9\x00*\xe5/\xdd\xcc\x90\xb8\xec\xf6\xbf\x8b\xe1\xe2\x1b\xde\x1e\
+\x14\xb2k\x88O\x86\x1e\xa4\x86\xa8;\x11P\x08\x01\x003\xd3S\x00\xe0y\xee\xcc\
+\xf4\x94R\xedo\x16\xe2m\xc7\x9f\x98\xbd}\xee\xf4{\xf2\xa5Y\x05\xcaR\xa2\x90\
+\xe8\xd8\xb4R\xa0\xed\xc6\xda\xd6\xc6\x8aM\xc0\xa2\xa4\xd7\xefz6\xd8A\xbe\
+\x1fK\xdb\x9f\x95\xee\xbcc\xa1k\xa1E%\x80\x04\x80\xb8\xd7\xaa\xad]\xd8\xba\
+\xfad\xb7\xb1v\x03\xa2Fr\xd9^j\xaf?\xb3\xb9\xb1Rk\xc61\x93\x16\x85R\x8eL\x15\
+i)G\xf2>Y\x98\xb4\'\x8bv\xce\xa3\xae5\xd0\x02\t\x1ci\xee\x87AL\xcb\x12c\x8c\
+\xb08H.\x0c\xb1\xd8P\xde1Q\xf6\xf7Q\xdeM\xd9.\x7f\xdc\xef\\\xa8\xb6\x1f\x1e\
+\xa4\x03\xa9\t\x81\xf0\xa6\xd9\x99\xbf\xeb\xd8G^\xe7\xdf\x15\xa2[\xc5f\xe9\
+\x13}\xf4\x16k_\xf2\xd9&\x05\x0e\x00\x92\xb8<X\xe8\xdd\xfe\xf7\xedc\x9f}\x83\
+\x80\xc3d!A\xb1\xed\n\xc4\x11q~~\xce\x0f\xfc\xd9\x99iJ\xa9\x94R\x9d/\xe4\xf3\
+gn;\x9d\xcb\x05\xaah\xf3s\xb3\x00\x90\x0f\xc3 \x08\x08!S\xd5\xea\xbb\xee}\
+\xc7-\xe4\xc3\xf1\xc2\xc9\x85\xb3\xc5\xea\x89vm\xa5\xd3X\x97\x823\x816%\x95\
+\x02\xd4;\xbb\xeb\xebbjz\x0e\x80\x80\xe5I.B\xdf\x89\xa4G\x90\xd1\xdc\x990O\
+\x08\xb2^s\xab\xdf\xedJ$\x88\xc0\xa2Nm\xed\x82\xbds-,/x\xb9\xd2\xa0\xe7\t\
+\x86(Q\xc4(\xb9\x05\x8cG\xf5f\xab\xd7\x8f\x85Bm5\xdaJ\t\xaeC\xcay\xcbu("2&3\
+\xec\xd2\x11\xb8\xbf\xd9E{\x1f+\xbf\xdd(\x8ah\x14\xa7\xa2\xa5\xe8(GJ\x08Q=\
+\xf4 *\x89\xea\x1eH\xbdk\xd5\xffR\x80=\xd5y\x84bl\xce\x03\xa2\xf0m\xbd;~\xdc\
+\xa9\xdcsD\xc8\xbc\xe5\xc5\xc4J\xa5\x11\xd7\n\xefo\xfag\'\xbaO\xbb\xd8\xb6\
+\xa8\x85\xb991\xf3\xc1\\y\xceI\x08\x90\xef|\x1e\x8du\xaa\x98\xc9\xf6\xec\xcc\
+\xf4\xe2\xc2\xbc6\xb1\xaah\x04\x85B\xfe\xedg\xefP&YBH.\x97;s\xdbi\xdb\xb6U\
+\x19\'\'+\xb3\xb33\xb7\\\x16\xc7\xcbM\xcc\xde^\xa8\x1ck\xd7W:\xf5u\xc1cB`"O[\
+\xdd\xfa\xe6\xba\xa8N\xcd\xc7\xbd\xa6\xed\xe6\xd0r,\x11\x13\xaf\xc8\t\xa1\
+\xb6\xdd\xe7\xd2+\xe51\xbe\xc0%\x97H\x84\x04D\xe0q\xbf\xb1y\x99\x10\xb0(P\
+\x02\x16\x05B\xc0\xb1)!\xb4\x15c\xaf/d\x02\xeb\x90(r\xa1O\x03\xcfB\xc48\x1e\
+\xd0\xf9\x992\x1c\x81\xfb!\x10\xd3\xb5+\x8a"+\xd6\xeb\x89\x0c\x83j\xea\xfe\
+\x1b\x18\x88Tg\xb0\x0c\x11n\xe9\x95\xa9\xff\xa6\xe9\x9f-\xf5_td\x8b\x00\xa0\
+\x9d\xe3\xe1\xc9h\xf1?\xf3\'\x8e\xbbIoy\xbdJx$o\xb4h4\xb4m[Y\x1a\xa5\x94\x84\
+\x10aUk\xfe\'-\xcbr\x1c\xc7\xf7\xfd \x08T\x83\xa17\x192\xe55\xcci:\xcbD\xd3/\
+&\x15\xa3\x9b\xb7\xe2^4\xb8\xab_\xdb\xb6u)^}\xc3\xb6]\xbf<}[\xa1\xb2\xd8\xae\
+\xadv\x1b\xeb,\xee\x87\xbe\x1d\xb1\xd6\xe6\xc6Rer\x81\xd2\x88\xb38\xcc\x97\
+\xe3\x98\x95\x8bA\xbb\x13G\x11\xb7-\xdb\xa19"\xeb6\xb5,:\x88\xe9\xa8\xfc\x92\
+\xb8\x00!\x11\x00J\xa1\xcd\x04\xe9\xf4\x05\xe72YP8\x98W\xfb\x0e\xcd\xf9\x94\
+\x12\x88\x99PN\xa2cKp\x04\xee\x87@\xb4\x9b\x9aR\xde\x1d\xc6\x12\x1bWrG\x86s\
+\xdf\xc3u7\xb9w\xa8\x9d9\x8e\xe38\x8e\x8e\xb5T+\x7f\xa4\x06\x1f\xb1\xb1oY\
+\xd4\xf1\x0b^\x90\xa0R0\xe6\x00\x00 \x00IDAT\x0f\x82\xc0q\x1c\xdd\r^\xf7\xa2\
+\x1e\xc9\x1b$\n\xd9U\x93\xf0<O\x81\xa0\xe27\x00@\x9f\xf7<\xcfl\x0f\xdf\xd9&a\
+\xc6\x96Qj\xec\xc0v\xaa@\\5i\x95%u\xd2q\x1c\x05\xeb&\xb8\x9bS\x93\xd7\xb0\
+\x14\x96\xed\x95\xa6N\x15*\x8b\x9d\xc6z\xa7\xb6\xe2`\xdf\x97\xfd\xcd\x8d+\
+\xd5\xe9\xe3a\xbe(XT.\x17".\xdb]&\x04 \xa0o\xcd: \x90\xb7\t\xa1:\xa6\xa3\n\
+\xdbkQ\xd2g\xb8\xba\xcb-\x02\x8e\rj\xf3\x0f\xe5\xe8\xef\xda$\xf4-\xdb&\x8c\
+\xcb\x98I\xd87\x90\xdb\x11\xb8\x1f\x0e1\xf1\x9d\x081pX\x84\x11\x87\x99\x01\
+\xbe\x0f\x1e\xd9\xab\xd5\xaa\x9e\xac`\x9ds\xae\x90]\xf5dD\xa4\xd4\xb7m\xdbu]\
+\xdd\x99\xd54\x16\xde\x98\x99\xf8\x91\xbc\xee\xa2>+\xa5\xd4\xb6m\x8d\x83\xfa\
+OH\xc0]5\t\xd7u\xdf\xa0\xc1>\x15[F\xe5{h2M\xf2\xacs5\xa0\x1c\r\xd1\xe75\xac\
+\xbf\xe6\xa3\x14\xb5\x9cB\xe5XX\x9e\xeb6\xb6\xda\xb5e\xdbjm\xae_\xa9V\x8f\
+\xcd\xcc-\xf4\xa3\xa8\xd3g\xf9\xbc3\x88\x82G|\nyl^\x94\xac\xad\xba\xb0\x8e\
+\xe9(\x10|\x97H\x891G.\xc1\xa2\xc4\xb6\xc0wH\x18X\x8eM8\xc7~_ \xe2\r\xb3|\
+\x04\xee\x87F\xc6,\xe8\xc8XS\x93_\xbc\xd1\x1e,\xba\xeb\xba\xae\xabf\xdf\x96e\
+1\xc6\x94\n\xaf/\x99\x9a\xda\x11-\xf3\x96\x17=\xe4k\x8aF\x87\xdbUMB\xcd\xf3\
+\x14\xa7\xf1\x866\x86!\xbekh\xd6\xe0\xaeo\xd2\x86V\xb3/\xa8\xdbL>\xe7\xf5h\
+\xd8\x94\xda\xf9\x89\xb9\xb0<\xd3mn\xf9\xbb\xcb\xbd\xd6V\xbb\xee\x83\x9f\'(e\
+\xcc\x06\xce\x0e\x94Hb\x83]!\xac=\xdc\xb1 \t\xf8%\x11\xf2>i\xf5 \xe6H)\x84\
+\xbeU\xc8Q!\xb1\x1f\tT\xf4\xfa\x01\xb2\xfc\xdd\x02\xee\x18\xb7\x90\xb5\x81\
+\xb5\xa1\xb7\x85\xac\x032\x06\xea\x10; ^\x19\xbc\t\xe2\xe4\xc1-\x00\xb9\x89\
+\x80m7\xf7v\xc1 n kC\x7f\x1b\xe2&\xf2\x1eP\x9b\xb8E\xe2W\xc1+\x11\xb7\x047\
+\x8a\x07\xa4]\xdd\x01@\x82\x03\x90\x99\x8f\xa5y\xf7}\xddfM5M\xeb\xec\xb6ms\
+\xce\x95\xbb\x98fl\\\xd7\xd5j\xfbaFv\xc4\xa8\x81q\x1b\xa2\x1aD\xbb*\xe2\x15q\
+B\x92\x9b\x06o\x82\xb8%\xb0\x8fv\xf3H\xb5\n\x05|&_\xa7I\x9b\xd7\x90\xaa\xbe\
+\xe5\x9c\x9ay\x1e\xd5\xd6\xf5\xd5\xb13W}R\xff\xbe~\x05!\x84\x86\xa5\x99\xb04\
+\xd3\xdc]__\xde\xb6\xec\xde`XR\xe4:!\x88`\x01\xcf\xfb\x16\x1d\xee\xa14\x18\
+\xb8,\x02\xd4\x86\xc0\x85\x9co\x95\xf36\xa0\x8c\xa2\xc4jz\xe0\xcc\xbee\xc1}\
+\x80\x83\xb5\xf3\xd0\xb8\x84\x8d\xcb\xb8\xfb\x12\xd6/@g\x15D?}#\x85\xa0J\xca\
+gH\xe5\x1e2q\x96N\xdeE&\xee|\xad\xde\x0e"\x92;\xcfc\xfde\xac\x9d\x87\x9dg\
+\xb1\xf1\nD\xb5\xd4\xc7\xb1|R<I\xaa\xf7\x92\xc9\xbbi\xf9\x0e2y\x0f8a*\x85\
+\xfe\xb6X\xfa*\x8a\x98\n\xb4Y\x9c\x8bb\xc2\xc0i=\x9dr\x82\x04cy*\x00\x10B\
+\x9a\x97\xf0\xea\x1fJ\x19#M\xa2p\xa8{\xa5 \xb6O\x8f\x7f\n\x9c\xa2\xd2qTO\xb6\
+\xba\xcb\xfe\xe6\xb7Q\xf2d\'F\xa0J\xad\xb1(\xa5\x16\x05N\xaa\xef S\xf7\x19\
+\xb9\xda\x91\xab\x0f\x02k\x03\xb1G\xe7\xca\x00@\xa4 \x95\xb3d\xfa=7U]\xd8^\
+\xc6\x95\xaf\x0f\x86X\x92N\x13\x81\x80$\xe5;\xc8\xcc{\x0f\x9e\xa0\xdc=\x07\
+\xf5\x0b\xb2~\x11v\x9e\xc5\xfa\xcb\xd0\xdb\x02s\xeb\x03b\x93\xc2q2u/\xa9\xbe\
+\x8bV\xdfA*w\x83u\xd3{\xb6\x1d$\'\x9dN\xa7\xdd\xeet\xbb\xdd\x9815|\xda\xb6\
+\xedy^>\x0c\x8b\xc5\xc2-l\x14\xf7j2#\x84\xa8\xd5\xea\xadV+\x8ac)\xa5m\xdb\
+\xb9 \x98\x99\x99v]W\xe3\xbb\xe6\xaf\xb5\xda;\xaa\xea\xde2 "b?\x8a\xda\xadv\
+\xb7\xd7\x8b\xfa}\x9eL\x16]\xd7\xcd\x05A\xb1X\x08\xc3\x83:\xdd\x12 \x99a&\
+\x03\xee7Na\xdc\x83\xaf\xb9\xb8A\t\xc8\x8e\x94r\xe8\xd0\xa2&\xd8\x08\x12p\
+\xb7-\'B\xb0\xa8\xd1M\x11b\x8e\x12\x89\xe3P\xdf%1KB\xeb$\xbd\x19`?\xaa]\xcb[\
+\r\xdc\x070\xc1:r\xe5A\\{\x18W\xfe\x02:+\xea\x82I\\\x00\xe8\xb5\xfb\x12z\x9b\
+\xd8\xdb\xc4\xb5G\x00Q\xe6\x17\xc8\xc9\xef\xb3N\xff\r2y\xcf\xad\xbf\x1d\x11\
+\xe2\xa6X\xfe\x1a.\xff\x05\xac|\x15\xe2$8*\xd1\x1f\'\xc9\x86\xe8\xe3\xee9\
+\xac\x9d\x87\x8b l\x87.|\x82\x9c\xf84=\xfe\x19\xb0s\x03\x9a\xb0\xfe\x8a\xfc\
+\xd6?\x06\x00\x0b @\x0c\x08)\x99~\xe8\xaa\\ZmO.\xd1\xed\xa7`\xfb)\xa9oH\x17\
+\xdc\xfe\x81\xaf\x92\x89b\x92#B)\x85\xda\xb3\xd63?\x93\xbd9I\x10\x81\xe0\x9d\
+\x7f\x07\xa6\xde\xa5\x96q+\xee_>\xf7\xab\xd0x9\xf5\x08\xa4V\xbb\x90\xa9\xfb\
+\xec\x8f\xff\x16\xf1o\xb0S\x81\x86\x0f\x94L>\xff\xaf\xf1\xe2\xef\x18\xd7\xb2\
+Q\x10\xac\x0f~\xc1\xda\x17\xdcu\xfd\xcb\xe5\xaf\xe1\xea\x83\xb8\xf4\'\xd0]3k\
+&\x95a\xe4\xd8\xbc\x8c\xcdW\xe0\xf2\x1f\x08;\xa4\xc7?E\xcf<@\xe7?\xb4\x7f\
+\x86\x0f"*\x1b\x9dNgum}}}cssk\xb7\xb6\x1b\xc7\xd90&\xb9\\0==\xbd8??3;37;\xa3\
+\x1f\x14R\xbe\xf4\xd2K\x9dN7Y\xb8\x88R\xe2\xdc\xdc\xcc\xc9\x13\'\xc6\xaa\xa2\
+\xea`ee\xf5\xfa\xca\x8af\xa3\x11\xa5\xeb\xbaw\xbd\xfd\xac\xe7y\xea\xb6~\xbf\
+\x7f\xe5\xea\xb5\xeb\xcb+\xab\xabk\xddn\xd7L\xe3\x07\xbe\xff\xfb\x8e\x1d[\
+\x04\x03\xe3\x14\xf1R\xaf7\xce_\xb8h\xa8\xc6H)=y\xf2\xc4\xcc\xf4\xf4-T\x08\
+\xe7|yeukk{}cc{{\'\x9d\x07\x00\x00\xdb\xb6\xab\xd5\xc9\xf9\xb9\xb9\x99\xe9\
+\xa9\xb9\xb9\xd9\xd1d2N\x90\x83\xa2\x1aurS\x18\xfd\x1d\x9by8\x8e\xe3\xf8\x9e\
+\x14\xc2\xd8I\x92\x00\x02!\x04y\xb7\x17\x8b\xd0\xa39\x8f\x00\x82\x04`\x0c\
+\xb8D\xc7\xa6\xbe\r\x04\x04\xd7\xad&=\x1d\x1f;p\xbd5]!u\xafFD\xb9\xf2\r<\xff\
+o`\xfd[\xc30\xb6\x19\xcc\x1a\xba\x84\x1bW\x01\x80\x10\xec\xac\xe2\x0b\xff\
+\x17^\xfbc\xfa\x8e\x9f\xb4\xde\xf6\x9f\xdfj\x06\xbe\x8e/\xfe\x06\xac?\x94}]\
+\x16g\xd3\x83\x8d`r\xe9+\xb0\xf4\x15\xb9\xf8\tr\xcf\x8fc\xe5\x1e)%\n\xa4\xd4\
+\x01\x11\x83v\x86R\xa3\x7f\xa6D\x99\xb8N\xe6\x81\xce\x83\xfa\xd3\x0eQ{\xc2\'\
+$>\x10\x1b\x88\r\xc8\x07\xe3\x84\xe9{\xa3\x8e,\xcf\xbc_\xda%\x98\xfb^\xaa\
+\xc0=\xe5_?\xfc\x13k\xe7q\xf7%\x98\xfb\xc0>]h\x98\xa0\x94\xb2\xb5L\x97\xfe8U\
+Q\xc4H\x16\x80L\xdeM\x8e\x7ff/+\xf1\xd0jV\xbf(_\xfaM\xb8\xf6\x9f@\xd9\xa9F\
+\xc7\xc2\xd4\xe8\x05\x83\xf2\xf2\x8e|\xe5Kr\xe5/\xe9\x99\xcf\xdb\xf7\xfe$8\
+\x85}\xbe\xf5>\xc5\x81D;>\x7f\xe1\xe2\xb9s\x17\xb6\xb6\xb7\xf7\xd1\x1f\xbb\
+\xdd\xde\xd5\xab\xd7\xae^\xbd\x16\x86\xe1m\xa7O\xdds\xcf]\xa5b\x11\x11\xe3(~\
+\xf2\xc9g:i\xec\xbb\xa3s\xfb\xf1c\xc7\xcc\xad\x1e\xcc&\x87\x88W\xaf]{\xe6\
+\xd9\xe7\xcd\xecPj\x9d<q\xdcu]D\xbc\xb6t\xfd\xa9\xa7\x9fY_\xdf\x80A\xb1\xcd\
+\t\x17\xd1F\xd4L\xe2;\xbb\xbb\xcf<\x9b\r\xf5\xecy\xde\xf4\xd4\xd4A\x90\xd1\
+\xcc\xe1\xb5kK/\x9d;\xbf\xb2\xba\xc6\x18\x1b\x81\xe9AR\x9c\xf3\xf5\xf5\x8d\
+\xf5\xf5\r\xcb\xb2\xe6fg\xce\xdey\xc7\xc4D\xd9H\x8f\x8c\x1c\x00\xec\x8d\xd1o\
+\x1e"\xd1\xb2\xed\xca\xe4d\xbdQ\x97B\xa2Ta\xc7\xc0"\xd4\xc2^\xb3\xdb\x82\xa4\
+\x16b\x01\x8c\xa3e\xd1\xd0\xa7\x04\xa4\x04K83\x1cr\x00\xe8@\x9b\xc6\xdb7\xdc\
+8;s\xf9\xad\x00\xeeC\xdc\xe9l\xc8g\xbf@\xae\xff)\xc4u}m\x00p\xa3\xd8g\xde`\
+\x1e\x10\x82\xad\xeb\xe2\xb1\x7f\n\xddu\xeb\xde\x7fts\x19`}\xf9\xcc/\x90W\
+\xbe8\xa4_R8B\xc6\x832\xa4|\x19q\xf9\xab\xb8\xf3\xbc\xb8\xe7\x7f\xe4\xc7\xbe\
+\x1f\x19\xf7\x81\xa6\x1f\x19t\xc8TAF5nBRWA\xab\xd5TgX-\x8c\x12B\x80\x10\x16Q\
+\xbc\x1fQ\xfb\xcb\x0f\x91=\xc9\xbc\x94\x12\x11\xf4#\xb8\xf0\xfd\xde\xd5?\xa2\
+\xfd\xf5a\xfa\x19\xe1]\xb1\xf6\xb0=\xf7\x81\xfd+M\xaf\xbc\xc5\xdd\x0bno;]\
+\xd2\xf4\xc7:\xfeW\xd1\x0eG\xfb+&\x8b\xbc\xa4\x94\xf2\xe5\xdf\x83\x17\x7f\
+\x8dtV\xb2_9S\'\xe6\xe8\x8e\xba\xf6\x00\xa2\xba|\xe1\xd7Y\xfd\xa2\xfd\xc1_$\
+\xc1\xd4^9\x1f[\x16]\xa2\xad\xad\xedo=\xfa\xed\xf5\x8dM\x91\rAN\xc6\x1d\x03\
+\x02v:\xed\xe7\x9e\x7f\xe1\xda\xd2\xd2{\xde}\xdf\xe9S\'9\xe7\xb6\x93\xed\x98\
+\xb6=\xa6\xab\xa2\x113`Do#\x8e\xe3HD\xce\xf9K/\x9d{\xfc\xc9\xa7\xa3\xc8X\x1e\
+\x91:@\x9a\x8c\x19\xa9\xe1VJ\x1c\xd9\xbc\x94\x10bY\x07\xf2p\xd7\x9d\xa2\xd7\
+\xeb=\xf6\xf8\x93\x97_\xb9\x12E\xfd\xd1L\x8ey\x10P\x08\xb1\xbc\xb2\xb2\xb5\
+\xbdslq\xe1\xf4\xa9\x93\x07y\xdd\x9b\\J\x95\t\xdb\xb1\xbb\xdd6c\x1cQ\xda\x94\
+\x96\x8b!u\xe7\xbd\xdd|}{\x9d@\xaf\x1b\x81\x90\x98\xf3\xa9MAJ\x81\xd4\xa5\
+\xf9\xdbl\xaf\xe4H\x81\x00\x965-;\x9eh/\xedoN\xcb\xc8\xe1\x06\xf7T\xc7^\xff6\
+<\xf5s\xa4\xf6R\x86UH\xc0pD\xab\x1d]\xd1e\xf2\x00\xbc\'\x9e\xff\x15\x08\xe7\
+\xad\xdb?w\xc3\x0c\x0c@\xaa\xb9\x84O\xfc\xaft\xf5/\x00\xd4\xeb\xd4+\xd282\
+\x8a\xe9Z\xbb\x04#\x93\xbd\r\xfa\xfc\xbf\x8c*\x1f\xc2\x98y\x80\x04 ]\xa2\x04\
+\x8c\xb4\x8ca\x9c\x8c1#\xad\x89K)\x89\x94hD\xfd\xb5\xe2\xd8\x85\xe1\xa6\xef\
+\xa9Z\x1aX~$J\x89\x08\xca\xd1\x9e1\xc6\xadiR\xbc\xcb\xef\xad\x01!\xe3j\x12\
+\x81\x10\xbc\xf2ey\xe6\xf3V\xe9\xe4^\xb5g\xee\xc6\xe0,\xfdI\xb6\x80`\xa0\xb0\
+\x1d\x88\x99\x0f*V(\xa3`b\xb2S\xa0|\xe6\x0b\xf4\xc2\xbf\x01\x11\xa5\xad\x11#\
+\xca\xbb\x91\xc3a\xce\xcd\xa1}\xf9k\xfc\xc1\xff\xde\xfe\xd0/\x93\xdc\xcc^9O\
+\xa74\x9c\xd3\x9c?\x7f\xf1\x89\xa7\x9e\xeetFw)2\xdfN\x0ct\x1f\x8c\xa5\x00\
+\xd0h4\xbf\xfe\x8do\xb6Z\xcd\xdb\xcf\x9c\xa1\xa9>\x8c\x00\x04\x93\xf7h?nsh\
+\x14B\x88\xc1^E\xc3\xb4\t\x01)\xe4s\xcf\xbf\xf0\xf8\xe3O\x8a1{L\xc3\xb0o\x90\
+!\xbd\xa3G}\xce9\xe3l\xe4f\xd5(\xf6[\xff\xac{%"nmo\x7f\xf3\x9b\x0fonm\xefQ\
+\x1bi[\xcd\xe0\xda\xa0\x8fDQt\xe9\xf2+\x9dN\xfb\xb6\xd3\xa7\xe8\xe1\xdf\xee<\
+,\x14r\xf9<JN\xc8@q\x07\x80\x99\xb9\x93\xd5\xe9\xc5nc\xa3\xb6y\xcdsbJPH\x00\
+\x80N\x14 \xefR\xd2Q\xf5,\x11@\xf0\xd0\xb2UP\x9a\x03\xca!\x06w\xdd\xa9T\x00,\
+\xb8\xfc\xef\xad\xdd\x97\xc6\xc7\xae7\x91\x14\xf4\x9f08\x999\x93\xa4\x0e"\
+\x16\xcf\xfc"\x99~/-\x9d\xda+\x03\x90\x0c-\xbc\xb9L\xbe\xf5St\xfb\xf1\xf4\
+\x8b\xc7\xe5\x84\x18\xd4\xc7\xb8\xc6\r\x84\xa0\x9d\xef\xde\xf9\x13=\x06\xd0\
+\xeb\x14\xd3\x97\x8c\xdc\x8e\x9b\x88\x0c\x8fI\xb68\x89H\x94\xd4\x08C\xa6\x96\
+\xbc\x86{Mh\x12(\x01D)Qo\xe6\x10\xc7\xb1(\x7f\xc8\xdb\xfe&\x19\xcb}\xa9g\xdb\
+Wq\xe79,\x8eg\x8a5\x88\xc4q\x1c\xd7\xaf\xe6\xd6\xffrO \x06\xe0\xf3\x9f\x85\
+\xfc\xc9\x0c\xc51\xfc\xfa<\xc6\'\xff\xb9u\xe9w\xb3\xcf\x8e\x9d\xae\x8d}\x051\
+\xe1\x06p\xed\x11\xfe\xed\x7ff\x7f\xf8\x97\x89u\x83}\xb7M\x90=w\xee\xc2\xa3\
+\x8f=\xa6\xf6\x03\xca\xdc\xa5_\x93\xcc\xe02\xba\xf3\xe0\xbc\x10\xe2\xc9\xa7\
+\x9e\x8d\xfaQ\xba\xa4D\xbf)\xf3\xeaa\x05\xc61c\xd9\xc8S\xb6m__^~\xe6\xd9\xe7\
+\xf6@v\xfdv\xa0d\x10F\x11\xd3\r#N\xed\x19\x94\x10n\x89B\xb3??&\x84\xd8\xdc\
+\xdc\xfa\xcbo<\xd8h43)\x8c\xa6\xb9\x8f\xac\xado\x12B\x95\xc3\xee>\x1c\xd7\
+\xa1\x10B\xc8h\x8b\xb2,\xbbPY\xe0H\xa2\x9d\x8b\x80@\x00$\x12\xc6\xa9d\xfd\
+\x04$P"\xb8\x96$\xf6\x8dx\x99\xb4\x1c\xee\xf1\x10q\x087\xdd\xe3\x9fg\xe5\xbb\
+\x01\xf6@=u?Pf\x15c\xa7\xca\xac\x92\xee3\x83kd\xe4OD\xe8\xac\xca\x0b\xbf3\
+\xb6I\x99\xbd:\xee\xd6\xe1\xf1\xff\x85n?\x0eh\xd0b\x88\xc3\xff\xf4\x9f\x9amO\
+^c\xdc\x9c\xa4\xeb\x14\xbag\x7f\xba3\xf9\x91(\x8a\x06\x9b\t\x98iB\x06\x98\
+\x8c\xbd\x03t>\x11\x87\xcf`\xda\xba>p\xc4J\xc53`\x8c\xa7j#C\xa3\'\xdd\xd5\
+\xac\xf08\x8ews\xf7u\xfd3f\xda\xc6\xb3\xaa\xe0\x80\xab\xdfL9\xa8\xa4+Pc\x13]\
+\xfd:e\x8d\xc1\xe3\xa3\x90\x81\xc8f?\x8a\xd4\x1b}\\\x08\xc1Y,_\xf8\xf5\x01\
+\xb2\xa7\xaaed\xb0I\xe5p\xa4V\xf5\x83*\xf5k_\x96\x17\x0c\xeb\xee\x1eE\xd0\
+\xa5\xb8zm\xe9\xf1\'\x9f2\x90]\x7f\x82\x81v\xec8n>\x1fNLLT\'\'\xab\xd5J\xa52\
+Q\xc8\xe7\x1dGwu\xa2^-\x84x\xe1\xa5\xf3\xadvv\xa7M\xb9\x07\xb8\xab\xed5\xfa\
+\xfd~\xb2\xef\xc4\xb0\xa4\x8c\xc5\xcf<\xfb|\xbf\x9f\xd9\xfc\x16G\x8e\x87)\
+\x9biFQ\x14Ec6\x84C\x99\xcd\xc9\xd8\n\xa9\xd7\xeb\xdfx\xf0\xa1\x04\xd9\xc7\
+\xdcoYV\x98\xcb\x95K\xa5\xead\xa5Z\x9d\x9c\x9c\xac\x94JE\xdf\x1b\xf5\t\xc6\
+\xf5\x8d\xcd\xfap\x84xkJ\xb1<\x1dCn\xd0W\tz\x1e\xb5|\x9f:\x0e\xb5m\xe28\x8e\
+\xeb\x86>\x03\x18\xdf\x95\xf6\x92C\xaf\xb9k\x80\xe8\xdb\xf3\xcd\xd3?]y\xf9\
+\xff\x08Z/fyvB:\xee\xa9\x8ew\xa2\xed\x9f\xe9\xdb\xd3\x92zTD>_/\xf6\xce\x97\
+\xfb\xcf\xd9\xa2\xad\x92\x1b\xb0(\x1a\x8e\x01\x00@^\xf9\x8f\xf4\xcc\x03\xa4r\
+6\xf3jH\x90\x8e\xc5\x11\xbe\xf4\x1b\xd6\xfa\x83)\xec6\xe9\x11E\xa1\x8cQ!a\
+\xa0\xc2\x0f\x9eB\x00\x82V\xd0:\xf3\xe3\xbd\xe9O\xaa\xdd!i\x1c\x81\xe4\xa90\
+\x03YU\xdd\xf8\xc7\x04\xe5\xcc(E\x06\xd8\x01"\x86\xc1>\xc2\xc3I=I\xb6,\x18C\
+\xec\x00\x80Z!b\x14\x7f00p\xb1]\xfcH\xd8}iX.\xb3\xcf+\x95\xff\xea\x97\xe5]\
+\xff--\x9f\xc9hy\xe6\xdb\x19c\xf9\xdd\'R\xa3\xd10\xcf\x08\x08\xbcp\x9b,\xbeM\
+\xa7`N\x98\x18cb\xf9\x1b\xdeK\xbfb\x98\xe8\xf4$\xcc`o\x88\xddqN\xc4v\x89[E\
+\x00pD\xddg[A\xbc\x9c|\x97\x11\xa5\x1e\x11\x00\xc4K\xbfA\x8e}\x92\x16\x8e\
+\xc18\xd1\xfa)\xe7|\xb7V{\xe4[\x8f\x1a\xa4\xf6p\xfcF a.(\x16\x0b\xe5b1\x97\
+\x0b\x94ET\xaf\xbb\xe9t{\xf5z\xa3Vo\x98\xae#i\xb2~\x98\xe4(\xa4\xea:\xd4;A\
+\x9b\x12E\x0c 6\xeb\x81R\xe2\xfb\x81c\xdb\xb6\xe3\xb8\x8eC\x08\x11Rr\xcel{\
+\xc8\xb9\x9bi\xa6\x8d\x9f`\x12D{U\x88z\xbc\xdb\xed>\xfa\xd8\x13\xb5z]\x8fm\
+\xe6\x9d\x9e\xeb\x16\na\xa9T*\xe4C\xe5\x8c\x9b\xb83\x92~\xbf\xdfh6k\xf5\x86\
+\xa1\xef\xabo-4\xb39\xa6r\x0e\xbfX\x96]\x9e>\xbd\xb3\xf2B\xce\x05\x8b@\xcej\
+\xfa\x9e\xcf0\x90\x12)p\x0f[ Z\xe9^xc9\xac\xe0\x9eQ$\x15o\xdb\xa3S\xad\xf9\
+\x9f<\xbe\xf4\xf3\xb9\xfe%\r4={n}\xe2\xaf5\xc3wFvU?\x8b\x88\r|\xfbz\xfe\xa3\
+\xc5\xfe\xc5\xe3\xb5\xdf/\xf6\xcfg\xd5UHt\xed\xde\xba\\\x7f\x94L\xdc\x99\x81\
+\xa7\xe1&\x8d\x1bO\xfb\x97\xff]\xa2\x9e\xa7in}`RC:q\xfdg\x82\xd7\x08v\xfd\
+\xc4\x8f\xf6f>K\xb4\x95L\x02R\x87\x88\x08\xa9erG\x04\xc5\xbe\x14\rI\xee\'\
+\x00\x084\x19\x01\x10\xd1rQ9\xd9\x1a]\xd1\x96r\xa8\xfe\x8f&\x9b\x88^0\xa2|\
+\xe4\x11\xb1\x16\xbcc\xce*\xbb\xbc\x96-\xb5\xce\x0co\xe3\xdaCP>3\xfa\xed\x86\
+\xa6\xd4\xe65\xaf}.\xf5\xd4\xf0V\x02\x04\xa2\xd9OC8o\xbaW\xab\x9c3\xc6Xk\xcd\
+}\xee\x17@\n \xc9\xd4\'\xab\xf8\x93\xa6\x7f\xe7z\xe9\xb3m\xef\x14\xb7\x8aj\
+\xeb1"#\x9foU:O.4\xfe\xc8\xc2(!E\xd2\x1c\x0e"\xb4\xae\xcb\xe7\xff\x15\xb9\
+\xff\x7f\xdb\x87V\x12B\xf4z\xbdg\x9f{\xbe\xd31\x9d[\x06\xf7[\x94\xcc\xccLOV&\
+<\xcf\xcb\xf8\x86\xabJ(\xe4\xc3r\xa98;;\xbd\xbc\xb2\xba\xb9\xb9\xb5\x0f\xeb0\
+J\x86\x98\xa3\x0b\xe7\\Js\xd2`\x92~\x83?\'\xca\xa5Je\xc2\xf7\\\xdbq<\xd7\xf5\
+</\x08\x02\xcf\xf3,\xdb\xce\xe7\xf3\xa3\xca;cLp\x9e\x06S\xa2s\xb2W&\xd5\x83/\
+_\xbat\xfd\xfar\xf2H\n\x91\'\xca\xc5\xd9\xd9\x990\x973\x17\x13\x812\x05\x11\
+\xe2\xfb^\x18\xceNOU\xb7\xb6w\x97WV\x86s\xca\xd4\xef[Sr\xbe\xddu\t\x13\xc8\
+\x81 2\x1fWC7@BQDR0\xbc\xf9\xb2\x1fVpW\x92\xd1@9\xe7\xb15yi\xe6\x1f\x9e^\xff\
+\xb5|t\t\x00v\xf2\x1fX\x9d\xfa<\xf3\xe6(\xa5\x9e\xd1\x8c\xb4\xb4\x82;/8?~\
+\xe7\xe6\xbf,\xf4/\x02\x8c\xa7b\xb1vn\xecK9\xe7q\xaf\xe9\xbe\xf8K\x84w@{(\
+\x8e\xe57\x00\x80\x90\x86wG-\xbc\xafk\xcf\x0b\x12P\x8c\xf2\xf1\xb5\xa9\xce#9\
+\xb6<H\x16\xe8\xf6\xf1\x1f\xed-\xfcM\xc7@\x81(8~\xf1\xd8\xcf\x08\x16\xc9\x01\
+\xb5\x83\x928\x13\xbd\xe7N\xd4~?\x93I\xc3Z\x0b\xbb\xb9{\xaf\x97\x7f\x88"\x03\
+\x00\x15\x1d\xcfu]\xdf\xf7r\x81\xef\xe5\xf2N\xb88\xd4\xc4TY\x103\xaan*\xf3\
+\x880P6\xa9Z\xc1\xa8\x97)FNe\xb3\xf0\xbd\x8b\xf5/\x8d\'\xb5\x15\x88_\xfb\n\
+\xbd\xf3\xef\x90\xf4\xea_U\xf9\xea\xabyk_\xb1\xe3\x9d\xe1K\xd3D\n\xf7g\xf9\
+\xcc\x87<#\x98\x89\xc9\x0b\xe3\x95?\xb2\xda/\x03\x8c\x0c\x9c\xc9\xf1F\xf9\
+\x93\xeb\xd5\x07\xb8]\x06\x00\x0b\xc0\x1a\xbc\x9a\xf6\xadc\xcb\xceB\xcf\x99;\
+\xbd\xfbo\x1d\xd1\xc8"{\x92\x9a\xdc|\x8cv7H8\xeas\r:\x0f\x1b\x1b\x9bW\xaf^\
+\x1b\xd5p\x1d\xdb>q\xe2Xe\xa2<\xba\xcc\xdd\x8cf\xc59wl\xfb\xe4\xf1c\xb9 \xb8\
+r\xf5\xda>\xf85\x8a\xaa&\xc1ml!\x9d!\xfd\x88e\xd1c\x0b\x0b\x95JYGL\xd4\x1f\
+\xd1u]\x15\xe813\xf0\xe8\x0f4\x9a\x0b\x93\xc6\xc9<\xa2\x90\xbdV\xab\x9f?\xff\
+\xb2q\xcf0\xe5\xf9\xb9\x99\xb9\xd9\x19\x1d\xc0\xc0\x1c\xa8Tm\xa8\xb2PJgg\xa6\
+\x82\xc0\x7f\xe5\xca\xd5~?\xc2\x81\xd9\xf9-.\xa2u\xb5\x10\x00\x00a\x1c\xb6\
+\x9b\xd8\x8d\xa4kwr.XVv\xeas@9\xdc\xe0NF\x04\x00"w\xee\xca\xcc\x8f\x9dY\xfb\
+\xa5npfe\xfe\xc7\xa8\x9b\x0b\x92\x08p`\xb4B=\x1e\x082\xb14\xf1Cg7\xbe@1\x1e2\
+\xd4d\x08\x16X;\x8f\x9du\x08gI\x12\x87HsAb\xebyg\xf7\t3Ccu\xdeFp\xd7J\xe5\
+\x81\xae{L\xd0\xc1\xa6\x01\x88\xd8\x0c\xdf\xb9Y\xfa\xd8t\xfb\x9b\x8b\xb5?\
+\xb0Dwk\xfeG\xba\x8b\x9f\xf3\x1cW9\xbd!\xa2m\xdb\xdc\t\xa3\xfc\x9d\x03\xef\
+\xc3\xe4\xd5\xae\xa8e\x8d\xa5$\xa5\x1fq\xa7\x12\xe5n\xd3\x0b\x0em\xdb\x06\
+\xcf\xb3s9\x11\x86\x90\xcb\x11{\xef%\x91\x19\x8c6\x8a\xa3D\x87\x84Ua\t\x18c\
+\x8d\xf0\xbe\xc5\xfa\x7fH\xf9\xd8df-\x9bO\xca\xf5G\xc9\xdc\xfb3*\xa7\x06\xf7\
+|\xe3\x99\x01:\x9b\xea\xf3 \x05\xe0\xf9\xdbI\xf9\x0e+\r\xee\x83\xb9Z{+\\\xfa\
+\xfd\xe1\xad&\x03\x86\x08\x00\xf5\xc2\xfb6g\x7f\x84\xbaE?yVc\x96\x92\xdd\xfc\
+\xf7xb\xebD\xed\xff#\xb8\xc7>8\xf5\xcbr\xf9k\xe4m\x7fk,\xf6q\xce\xbb\xdd\xee\
+\xa5\xcb\xafH\x99\xa1\x0b\x88eY\'\x8e/NOUm\xdbV\xf1\x1b2\x83\x93\xce\xc3\xc0\
+\xe9\x10\xb1:Y\x89\xa2hum\xe3f\xc9\x07\x1c\xd0\xf1\x19\xc0\x1d$B\x089q|qzjJ\
+\x0f0\x07\t\x14\x83I\xa2#2&cf\xa7`\x8c]\xbbv\xad\xd9j\x99yP2=]=~lQ\xbf\xd4\
+\xac\x10L\xdc"\xcc:\ts\xc1\xb1\xc5\x85W\xae\\\x13B\xbc\x85\t\x19%\xa2\xb7-\
+\xa2F\xc2,b\xde\'L@\xc4\xa0\xd6\x05\xd7\x86\xc0\x05\xc7V$\xe5M\xc8a\x05wb\
+\x84\n\x1a\x13\x84\xda9u\xf5\xd4?\xa5N\xe0\xf9%\xb3\x05\xab\xa7\x86j~\x1c\
+\x13B8\xe7\xad\xdc=m\xef\xf4\x80\x9cA\x1c\xf8\xaai\xb4j^\x95\x9d5+Q\xdf\xd00\
+*\xba\xd7\xff0\xc9Q\xd2\xf82\xd43\xc0v\xf1\xc3\xcb3\x7f\x0f\xed\xd0&\xc46\
+\xb4-)%@yk\xf2\xafS7\x1f\x88\xdd\xf6\xf1\x1f\xf6]\xcfu]\x15\xf2\x85\x10\xa2Z\
+\xb9*\xa3n\xf1B\x08;eW\x19\xf1\x8a!\xc4"\xa0x\x00H\xc0]%\xbb_T\x90\xd1\x8e<\
+\xc2\xbf\xeb\xf0\xaa\xb6!\x91\xbfX\x0b\xee\x9d\xe8==\xd6\x10\n\x84\x00\xc6\
+\xf8\xca\x97`\xee\xfd\xba\xf6Ld\'\x8d\x8bv\xb4n\xf0\xfb\xe9\x04\xa8\xcbf?f;\
+\xae96\xeb\xdd_\xc9\xd2\x7f\xb2{+\xa9\x9c\x0f\xc7f"h\xb0;\xfb\x80\x9b\xafjlU\
+\xaf\x1e8\xf91\xc6\x18\xe3\x9co\x14?9\xd9y\xac\x10]\x1ef@\x8d1\x03\xe1\xb8\
+\xf6\x10\x9cy\x00\x0c\'\x07\x13\xc8vwk\xcb++\xd9\x82\x03LU+\xf3\xf3s:8\x8f\
+\x0e\xabi>nfC5\xdd\xc9\xcaD\xab\xd5N[So\x19\xd4\x06O\xcdLO-\xcc\xcf\xeb\xb00\
+\x99.s\xb0x\xce\xd9\xa1k\xf4\x0e\xad\xb6w\xbb\xdd\xd5\xc1R\xa9\x94\x14\n\xf9\
+\xd3\'O\xe4r9\xd5\x14u\xc0"\xd3E\'S\'R\xcaB>\xacNV66\xb7n\xa9\x06\x0e\x91 k^\
+U\xb5\xac6Yu,p,\xe2\xd9\x10\x0b\x88\x186\xba\xe8X\x10x\xc4\xbd\x19\x88?\xac\
+\xe0\x0e\x896\xa9\x9a\xa9\x8an\xa80QY\x96,\xebDF=15w\xc5\xd1\xd3\xc1\x8e\xe9\
+\x88(\x9b\xfe\xd9b\xff\xbcJ8\xfb\xa6\xb8\x86\xbdMH\x03\x13c\x8c\xb77\n\xdb\
+\x0f\xe9\xdc\x0c\xa1\xd0\x98\xe07\xc3w\xac-\xfcw\x8e\x9b3\xe1)\x99G\xab\xf8\
+\xba\xb4\x1d~?\xf3<\xdf\xf7}\xdfW\xf1T\xd5yU\x1cU@\xa5\xbcs\xce\t!\x84\x9a\
+\xf3\x83\xf4\x9c\x95\x10\x00\xb0,+\x08\x02s\xd7\x02\x15\x05L\xc3\xdc\xd8\xda\
+\x84AthL\xad\xb7\x82\x14\xee\x9b\xb8\xa0j\x95\xd9\xe1V\xf1\xa3\xe5\xde\xb3)3\
+\x80\xa9\xc2#\xe2\xd6S\xc8\xfb\xc4\xd1\x9b\x03\x0e\xc1\xdd\xddz\xd0\x896\xc6\
+\x18\x8a\x01\x00@\xf8\xf3r\xee\xa3n\x82J\x90v\x8d\xcfm=\x02(\xb3/Mr\xdb)\xbe\
+\x9bT\xee\n\xfdPA\x89z\\[h\xa2(R\xe0\xc2\x00\xda\xdem\x85\xfee\x83\xdbI\x19\
+\x87\xb1~Q\xb6\x96h\xe9t\xc6\xc1\\\x8d\xee\xeb\x1b\x1bB\x0c\x1d\r\x11\x90\
+\x00\x04Ap\xf2\xc4\x89\\.\xa7\x03&\x9b\x00jRRq"\x90\xcc\xd5\xaa\xd5\xc9N\xb7\
+\'\xa5L\x9b"oJc\x1b\n\xa5\xe4\xf8\xf1E\x15\x94_\xab84\x11U3\x07\x08\xf1\xb8\
+\xdf\xd5\x8c\xda^\xaf7vvv\x8c\xcc\xa3\xea\xa9\xf3s\xb3\xc5bQE\x0c\xd6\x15\
+\x92\x99Lk\xe3\x99\xaa+u~\xa2\\j4\x9a\xfd(\x1a}\xf3\xad\xd5\xc9\x9bPxgC\xb2\
+\xc1\xda\x08.\x86\xe5\xb2(\x04\x14<\x9b0\x0e}\x8e\xe8VI\x10\x8a\xce\x1a\xc5\
+\x18\xb2:\xe4\x189\xc4\xe0\x0e\x89\x89\xcfq\x1cLxa\x15\xa7T+\x98\x03p\x8f\
+\xb7\xad\xfe.\x15]\xe0]\x88\x1a\x18\xd5e\xd4\x90QS\xb0\xbe\xe0\x91\xe0\\\x08\
+\xe9\xf7\xaf\x00(\x8c\x18\xd8\xf1L\xb7\x16\xecm\xe3\x88#0\xd4^\xa2\xbc=\xb4[\
+\x8e\xf0\xf5\x82\xe6v\xe6~\xd8\x0bKfHt\x9d\x82\x1e\x8dT\x18)\xdf\xf7\x15\x16\
+(XW\xed\xdb\xb6\xed\xc1@\x92\xb4{\x00\xa04Y\xb3:\xde\t\x07m\xdb\xce\xe7\xf3\
+\xe64\\\xe3\xbb\xde\x9bf\\m\x82Q\x16Hu\xe9\xc4\xf6\xa5\x07\x1b\x13\xdf\xbb\
+\xc1\x99\xae\xb3\x18\xb2\xa5TNL\x88o]\x93\xd7\xfe\x98\xdc\xf6\x83\x9a\xd7\
+\x1a,\xbd\x89\xda\xf9\xe6\xf3)dOA<a\x13\xef\xb4\x82\x8a\xb9\xef\xcf\x10\x05z\
+MK\xab\xed$\x9bU\x00\xc0p1\xb4c\x17b\x87\xd8Dj\xcd]r\x10\x0cb\x97\xc4}\x8cl\
+\x19\xc5(\x90\xb8\x03>\x07\x0c\xd3\x85f\xba\xfa\xbb\xd8\xafAI\xd7n\xca\x9f\
+\xa4V\xab\'\x8f\xe9w\x93\xca\xc4D\xa52\xa1?hf\xc2d\xd6\x80\xa9\xd4\xab\x94\
+\xf3a.\x08\xfcN\xa7;\xa2,\xdf\n\x96U*\x95\x89r\xd9\x04w3\xf2\x17M\xefY\xb1\
+\x7fRj2;6\'\x9a\xa4b\x8c\xad\xad\xaf\x0ba.\x97%\x00X,\x14\x8f-.\x98\xa3]\x86\
+\xa72u&\xad\xd4\xab\xf3\xbe\xef\x95\xcb\xc5\x8d\xcdmD9R\'o\tA\xc9ZK`\xa8\xed\
+\x19\xa1\x04<\x07\\\xc7*\xcf\x9f\xb6\xdd\x9c\xe0\x0b\xad\xdaz\xdc^\xb7\xb0;T\
+\xc6\xc6\xc9!\x06wM;\x00\x80\nB\xad\x94\x11\x1d\x94\xdc\xed]q7\x9e\xb4\x1b/\
+\x92\xce5\xd2\xdf\x01\xde\x05\xde\x1d\xae`\x1c\xa7*&g\x8c\n#\x04\x08"\xeb\
+\xe0\x88\x7f\x0em_\x07\x99\xa8\xab\xa3M\r\xb1]\xbe\x1f&\xef\r\xfd\x9c\x198\
+\xd7\xa4\x17\xa5\x94\x9a\x00u]W)5$\xd9/F\rTB\x08\xd7u\xe38V^tB\x08\x92\xd6\
+\x8bM\xf3\xa3:o\xdbv.\x97\xd3L\x94\xee\xc6\xda\x10*G[P\xc6wsL\x9d\x0c\xea\
+\x9c\x1a[89\x8e\xc3\x18\xeb\xbb\x93\xbb\xf9\xf7\x84\xb5\xa5l\xaet\x9a2\xc6K_\
+\x84\xd3\x7f\x1d\xc1F\xc3XGZW\xdc\xce\x15\x03\xd9S\x8fK\xbb\x10\x9f\xfc\xbcg\
+Pj\xfaA\xc6\x18i\x9c\xb7X-y\x0b\x8e\xe6<\xbf\xf5\x17a\xfby\n|X\x00B\x94U\x12\
+\x11\xa5\x14(Q"J\x04\x9b\xd7\x8d\x0f\xa8\x94o\xc3y\x9451n&\x954l\x03\x8c\xb1\
+~\xbf_\xaf7\xd2_\x9fX\x965;;\x13\x04\x81\x9e\x87\x99\x1f\x02\x12,\xd3Z\xb3\
+\x89\xecJ\xf2a\xd8\xedt\xb5\xf7\x95N9\xfb\xc9\x0e \xf3\xb33a\x18\x9a\x90\xaa\
+\xb3\x91\xb6U\xed\x95\xb8\xf6\x10\x00cI4I\xdf1\x1c\xab\xe28\xde\xde\xd9\xd5W\
+\xf4\xa3\x93\x93\x95B\xa1\xa0*d\x94\x1eD\xc3\xb7\xd5\x1a\xb1\x9cK)\xf3\xf9p{\
+g\x87s2\x92\xf2[AX{\x15yOU.\xe3{\x0e\xe1\xb9\xf2\x82\xed\xe6\x00\xc0\xb2\xdd\
+\xf2\xd4q9\xb9\xd0\xdcYa\xed5\x8a\xbd=&wx\x88\xc1\x1d\x0c|\xd7\xde\xb2\x94R\
+\xc1\xfa\xf6\xb5\x7f\xef\xac}\x95v\x96Io=A\xea\xb4\xbf9\x8cp\xca\x19\xed/\
+\xadK\xa2\x88\xcd&\xa8\xc0=\xd7]"(\x8c\x94\xb3\x99\x13\xc5\xb7\x05a!\xb3\x99\
+\x91VRTR\xc4\xb0R\x9a\x03\x80Rm\x14E\xc39W\xcfr\xce\x87\x93h\r\xeb\xa6c\xb8\
+\xe2\xdc-\xea\xfb\xbe\xe9\x90@n\xb85\x81*\xc2@{\x1d\xeb^9\xacsM\xce$\x08e\
+\xd7\xf2\xf7O\xb5\x1f\xf1\xd9\xfa0\xb5\xb4`\xe3\x92\xac_"\xe5;L\x9b\x87S{\
+\xc2\xe6\xbbCd7)&\xc4\xb8\xfc\x0e2qV\xf7v\xd3\x8c\xc9\x18\xa3\xad+D\xf6\x8dR\
+g\x0bd\xc5[\x10m\xa6\xbe&"$\xb0ae\xec\xc6\xfa@\xeb\xa6zr#"\xec\xef`\xe2\x83(\
+\r\xd7\xacv\xa7\xd3\x8f2\x11\xa4\xc1u\xdd\xf9\xb9Y\xc5?\x98\xfb\x9c\x98\xd5\
+\xae\x001\x83\xf8z\xc8/\x16\xf2;;\xbb<\xf1T\xb9%_\x91As,O\x94\xf7\xd9qE\x1f\
+\x9b \x9b\x96\xe1\xa8\xbb\xbf)Uk<\xfd~?\xc3\xc9PJ\xcb\xa5\xe2\xe8\x16}f\x06\
+\xb4\xfd,C^)6\xd2\xf7|\x8b\xda\x1c\xe2\xa4h\x90>8\xc4\x82\x92\xf3\xf6u\x00 \
+\x00\\\x80\xdc\xc3\xe1\x91X\x8e_N\xad\xb7\xa0\xd4R\x10\xdf\xaeo\xc6\xadU\xe0\
+-\x9aL\xe6!\x99\x84\x1fnp\x87\xa4}$-\x838k\x7f\xe6]\xfcw\xb4\xf6\x02(\xff\
+\x87\x0c\xffk\xd6\x9c\t[\xc3\xfe\x0f\x00i\xd0T"\x18\x18\xb8\xac\x9a\xb2\x15\
+\xef\x0c\xe9\x8bq)\xd3\xfc\x82r%\xceXt\xb5\x83\x04&\x86Js\x82\x0c\x89\xb9X\
+\xdb\x00\xd5\x9fC\x95G\xf3m\xa6\xdan\xfc\x12B\xd5Pav\xa1Lw\xca\xca\xb0Q\xc00\
+\xb5\x11"\xdbdfL{F\xe4\x1fk\xbb\xa7|\xb6\x9e\x1a\x18\x0c\xe6\x1a\xfa\x9br\
+\xe5AZz\x9b\xd6\xbeew\xb3\xb0\xf3\x90a\xa80*\x91\x10\x00\xe03\x1f1\xe7\xefZC\
+T\x95\xef\xf7\xb7\xa8d\xa9\xcf4\x8a\xd7F+I\xdd\x90\xfa\xb8\xe3\xac\x0bf\xce\
+\x11\xb1_\xd3\x1f\xcb\x1cc:\x9d\x8e\x1cF\xec\x1a\x0c\x0b\xf90\x17\x86\xa1F\
+\xf6\xb1\x8c\x87:cn\xf8\xa9\x07\x0c\xce\xb9\xe7y\x94R\x10j\xd9\x0e\xdc\x92\
+\x17\xe0 \xfd\xc0\x0f\xd4\x8cPO\x11nH\xbf\xa4E7\x0b]@\xc8\xa0\xaa\xd9)\xe28\
+\x16\\dn\xb3,R.\x97M;\xeah6t\xd7 \x86C\x9a&$=\xcfu\\\'\x1a\xc4BxUS\x997\x9b\
+\xf0\xd6u\x141\x00 \x00\x17{.R\n\xca\xc7\xe8\xb8\xcd\x06(\xb5\x8a\x959\x9c\
+\x98\xed\xb6v:\xb5e\xc2\x1a\x94\x0c\xaa]"=\xf4\xe0\x8e\x89H\xd6%\xcf\xfc\xa2\
+u\xe9wA\xb2=1}\xb4\xdbg\xac\xa0$\xddt\x87\x1ct\xaao\xab\xa6LD\'\x95\xc2P\x08\
+\x00 \xf5\xac\xdc\xa4\x93X\x90L\xd46\x05\x92\x96\x9dQ\xabMeJ\x99\x10\x86z\r\
+\xd9\x83?\x01Pz\x1eI\xf6\xcd\x19\xab\xa6\xe1\xd8\xa8 \xc4\x98\x82g\xa8\x95q\
+\xfdP\xb3I\xaa\xc7r\xcew\xf3\xdf3\xd1}\xca\xc2\xfe\xf8\xbc\xa1\xc4\xeb_\xc5\
+\xdb\xfe\xa6\xa4\xa1\x022\xe8\xac\xf8\xed\x0b#U7\x10\x1e\x1c\x13s\x1fw\x8cR\
+\x98|\x8e\x10\x02D\x0f \xb5\x96x\xa4&n\x14OF\xd7X\x06\xfa3\xf7# \xef\xe9\xaa\
+KaY\x14\x8fB\xcc(\xc1=6wz\xd2i\x8e\x94\x8e\xe3\xc4ql\xdb\x19\x0b\xe7x\xa6\
+\xfb\x86B)u=\xd7N\x13\xdc7)Dc\xbaQ\x9dYZF\x8fv\x9cs\x89\xd2xVe\xc3*\x14\n\
+\xda\xac\xbdO6\xf4\x98\'\xa5\xd4\x15\xa2<n\x8d8\rp\xcb\x15\xf2f\x13\x141\xeb\
+\xac\xaa\xe3}\xd4v\xea\xf8~qa\x9ft\x08!a\xb1\x1a\x16\xab\xad\xdd\xe5\xf6\xd6\
+%\x8b\xaa\xedX\xf1\xd0\xc7\x96\x19\xd8\'\xfb-|\xe2\xe7\xe8\xc5\xdf\x02\xc9\
+\xf4\xb5\xe4\xc0\x98e\x13\x9394\xd6\xcb`\x1a&R\xeb/\x10\x06\x11b\x86\xb4\x8c\
+"U@&4\xb1\xa9\xf7\r)\x02b\xba\xc1\x11cy\xa7f\xc05\xf1::eN\xf2\xb8\xb7\xd2M\
+\x92\xf6\x9d\xca|J\xcf;\x00\xa9\xaa\x8b\x9c\x19\xd5\xcc\xe3,R\x9b\xf9\xd7@\
+\xd6\xc8\xbf\xa7\xeb\x1e\x1f\xa32c\x12`\xa7~N\xec\xbc\x94L\xe1\x99S\x7f\x8eh\
+\x9fN}O"\xd1\xec\xc7\xad\xdcd\x06\x1fM`\x1dD\xa3%\t]\x80FUh\x95\xdc\xac\x1cb\
+Lw\x00\xb2\x9fl4\x05\x93\x90\x10\x91\x1eeS\xb37az\xc7\x0fpp\xff\x0f:*#\x1c\
+\x97eYv\xfaA\xa387#z\x8c\xbfUd\x07\x93\xdd\x1e\x9b\x82\xd6Q4\xa7\x848\x1a%\
+\x98z\x9e{\xc0\n\xd1S\xc3L\x9dPJ\x8c6z\x8b\x15\xf2f\x13\xd6Z\x02\xc9\x01\x00\
+\x11\xc4\xdej{n\xe2\xa4\n!yC\x89:\xdb\x02\x95\xf7$0~\x98\xc1\xdd\x98\xbb\xc5\
+\xf2\xe5\xff\x87^\xfe\xbdTO\x1e\xf6^\x04b\xf2\xaaC\x10Aj#\xb1\x91XHl\x04\x9a\
+\xed\xd8\x00@4\x10\xa4\xfa\xf6\x00\xe2\xa9\xa3\t\xe2\xe4\xb6a\xe6\x082*\xfbc\
+]\xcb3\xaa\xfa~T\xf8\xbe\xe5\x1f\x84\xe9%i\xe4\xdaG\x99\xdd7\xb9\xc1\xe3&w\
+\x01\x06z\x8ed>C\xceP\xdbk\x04w\x03\x8c\xe4D\xa7\x13\xd5q\xe3\xf1\x81%\xb9\
+\xb7\x9b\xdf\xfc\xb3\xc1y]\xe7I)\x90\xd8b\xfa\xfd\xa3\xc8\x9e\xaa\x7f\xe2$cv\
+\xfa-\x90\x8c\xe5D\xd3V\xe3h"H\x06\xe6\x8c\x98__\x8f\xd3\xc6mf\x1eFjz0\xc388\
+\xb2\xeb\xa1\xd7\xb4x\x9b\x1a\x88!\x07\xf9\xac\xa9{\x08\x01J^\xddf\xa7\xd9w\
+\xe2\xd8l\x98ub\xc4"\x1c\x18p\xd4\xe5\x837\xf2L\x85\x0c\xb8J\x04\xd8\x83\xf7\
+?\xa4\x82\xbc\xc7;k\xeaX\xa9\xedc\xc5\xf6\x8b^\xfe@\xa1\xa7Yg\xc3\xc3z)\x80r\
+\x0e\\\x07Z\xfdC\xa9\x1f\xbd\xcf\x00\x00 \x00IDAT\xcb\xb9\xeb\xc6\xc4\x18\
+\xe3\xb5\x97\xdd\xf3\xbf\t0\xc2\'\x98g\x00\x81\x90\xd8\x99\xeaz\'\xfb\xeellW\
+\x19\xcd\x0b\xe2!\x10\xb5\xfc\xbe\xd2}b\xa6\xfd`r\xb3\x16m\xdf\x1b\xbc\x14\
+\xcc\xe9\x02-&\xf7\xa7\xb4\xe5A\x06$\xa7\xfd\xcd\xfd\x89\xce[\xefu\xfaE@\x86\
+\x8e\x9b\xfb\x91\x0f\x07H-C\xe5+A\xcd\xd8ds>\xa2oZ[\xa5\xef\x9dj}\xc3\x13\
+\xbb\xa9[\xcd\xf9\xfc\xb5?\x14\xf3\x9faP&\xedk^\xef\x95\xd4\xcc\xc9\x80\xd4\
+\xa8z?T\xde\x911T\xe8jW\x07\xcc*!\xb5\x87+K\xb3$\x92\x19\xac\xcd\xa0\xe62\
+\xdcz\x16\xdf1uF\'\xc8\xba&\x93&\x93\xe0\x01\xb6e\xa5)\x02\x02\x00\xfd(:\xe8\
+l\xc9\xa8Lj\x08$-\xed\xe6%\xf3\xc6\x9b\xcb\xc6\x1e\t\x9a\xcd{\x0c\xbc\x9au\
+\x02@(!\xe9gAJ\xa9\xeb\xe4@\xafL\x0fxjT`\xd9\xb0h\x87\x9e\x93\x89\x9b\xd7\
+\x00%\x00H\xdc\x8fm\xcfM\x9c<P\x8fF\xc1[W\xf56*\x94@\xc1\'\x87\x12\xdc\x87\
+\xf0\xaaV\x99^\xf9#\x1am\xa7\xd0-\xc3$\x10R\x0f\xee\xdd,\x7f\xb2\xef\xccr\
+\xa7,hh\xa6\xa3\xc4\xe3\xdb\x00\x0f\xea\xfbS`\x91`:\xa4{]\xdf[@b\r\xb8\x85\
+\xcc\x88\x82\x08\x84\xd0\xf6U@I^\x8fJ\xd6\x86_0\xbb^\x9a\x88\xb8e\xd9\x07\
+\xef\x06\xd7\x87}\xcf\xf4\x89\x8c\xbc\x99\x9d\xf0}\xf3\xcd\xaf\x0c\xb2\x91\
+\xe1\xb2\t!\xadW`\xfb\x19^\xfe\xa0\xbb\xfb\xf8\xe0R\x06\xdf\t\x01\x80x\xe1\
+\xfb,7\xb7\x97\xae\xa7\xbeW\xe4\xce\t\xea\xdb\xbc5\xac\x84t\xa1k\xb9{\xeb\
+\xe1\xbb,dc\xf5\xcf\xd1/\xabqLm\xbb<\xf0O\xf5<\xcf\xa6\xd6\xfc\xfb\xf5\xacX\
+\xb3s\x88\xe8z.\xa54\x13{\xa0\xddn3\xc6nj\xdbkM\xbb\xa9"G1\x1b\xf1U\xc5QT=x\
+\xca\xb7.\x04\xd2\xef\x1d\x9f\r\xdd5\x08\x01\x9aZ"G\x00@H\xd9h4\x17\xe6\xe7o\
+\xe2\xb5\x86PJ\x95\xa96\xc9\xc1@\x979\xd4\xf8\x8e\x92\x8b\xfe@\x07\xe2b\xcf\
+\xaf\xeb\xe4*N\xee\x06\xbb\x10+a\xade\xc9z\x00@\x08p\x01\x88\xe0\xda\x87Vs\
+\xd7\xc6\xf4(\x8a\xc2\xc1\x16\x19\x98a\x9c\x13\xa8\x85\x95\xca\x03\x9b\x95\
+\xef\x93VN\xd9\x95\x94\x1b\x9c9\x97\x14BP\x10)Nf\xf4wDbg\x1a\x91\x12\xf5\xa0\
+\x16\x93~Y\xfeS\xb8\xe3o\xc3\xe4\xd91\x0f\xbfZ1|\xc33^\xde\x84\x10\xd1\xbb\
+\xf9\xf4F\xbaJ\x86\xa1J\x8b9q\xd6\xfa;c\xac^x\xdf|\xe3+C&d\xf4\xc1\xed\'Epo\
+\xb8\xfdu\x9dP\xe6\x06\x1e,@\xf9\x0e\xd3\x07|\xac\xf4\x83\x93\x9c\xe4m\x92,"\
+#\x06\x12!\x02!\xdc)o\x95?u\xe3\x82\x0f\x8b;\xa8\x01\x9a\x04l\xf0}?\x0cC\x12\
+\x86\xbe\xef\x8f\xbd\xd3u\\\xd7q\xfb\xe9\xdd\xe3z\xbd\xfe\xfa\xfa\xc6m\xb7\
+\x9d>\xe0{5\xb2\xeb\x83f\xb3)D&\xc4\xe3\xadc\xf4\xab\xc5\xf7tb\x99\xbf\xb5S\
+\x80~\x97\xe3:\xd0K5?!Dk\x10j\xe6\x16%\x8a"]!o\x8d\x08b\xbc\xb3\xaa\xac\x83r\
+\x1f\xb6\x9d\x90\\\xe5@\xad\x08E\xc4Z\x03\x7fJD\xd0{\n\x1c>p\xcf\xa8\xedQ\
+\x14\xe5{\xca\xbd:\xbb\n_I#\xbco{\xe6\x01\xdb\xf6\xf4\xdak\x92\x80\xbb\xf6\
+\xcf%\x848\xb2=\x86\xd5\x81,\xfa\x98]\xa5\xef- \xb1\x01\xb3\xbb\xda\xeb\x14H\
+o\x03/\xfe.\xbc\xefg\xe1F\x1b\xfa\xdc\xb4\x0c\xd5\xe1\xc1\xff\xa9yF\xb4\xbd\
+\xf7\x93{\'\x88\x90\x19$\x00\xc6\x81\xfe\xe0\xf6\x81V\x95\xf1\x89\xec\xf8g\
+\x1a\xc1]\xa5\xfe\x8b\x00i=/\xc9\x9b\xbb\xf5P@+n\xb42\xccm\x9ac\x8e\xa6>BK\
+\xa7\xc6\xda*\xccWs\xab\x18;U\x9f\xaf\x0f\x07\xb9\xf4\xd7/u_,\xc8\x8d\xc8\
+\x1f\x1f\x8d}T\xa8\x8c$\xf5T\xfa\xf6H\xdc\x95\x8c\xc9D\x1dX\x16\r\xc3\\\xc6\
+\xd5\x9ds~}e\xe5\xe0\xe0nr}\x00 \xa5\xac\xd7\x9b\xa3\xb4\xcc\x81\x03\x8a\x0c\
++\x02\xf7\xa0\xc8_\x85dU\xcc\xd1\x0f\x94\x0fC#\x14\xfb\xe0\xfe\x8d\x8dM\xb5@\
+\xe9\xd6\xde\xdah\xb6F\xf6\xb7\xba\xc5\xa9\xcc\x9bAP2\xde\x1e\xc4#\xe2|\xcf\
+\x92x\xf9i\xdb\xcb\x1f$A\xd6\xbc\x8a\x92\x03\x00\x10\xe0|\xe8us(\r\xaa\x86)\
+\x95\xc5ql\xb1\xdd\xf1\xf7\x11\x02\x844\xa7>\xe3\xe7\n\xb9\\.\x97\xcb\xe5\
+\xd3\x92\xcb\xe5\x82 p]\xd7\xb6\xadR\xff\\V\x01\x1f\xd0\x05\xa0z\x88\xa9[)\
+\x89\xbd\x85Vpg\xf6\x8d\xe61"\\\xf8\x1dq\xee\xb7\xf6\xda\x8dH\x89\\{H^\xff\
+\xf3[\xae\x8b\xec8D\x80t\xd7\xa1\xb7y\xd3\xe9\x8c\x15\x93\x8b\xcf^I\x99U\x07\
+~A\xb6\xbbY\xfaxr\xff\x98\t\x8d\xd5[-/\xfd6An\x189\x93;\x11$\r\xc4\xf4\x07\
+\xc6:x\x90\x11i\x07\xb7gk\xc0(\x8b\xcb6\xa7;\x0f\x05A\x10\x04A.-\xc1\x88L\
+\xb2\x0b\xa7\xd6\x7f\xad\x0c\x9b\xeaf\x1d\xe7G\xe3\xbb\x99\r\x00\xd0\x88\x9f\
+\xcb\x05\xd9\x92\x02\xac\xae\xae\x8d\xdbFuO1\xf1}w\xb7\xd6\xed\x99\xcf\x92$\
+\xd6\xcf\x01\xb1\xcc\x18\x84^{\x0b\xe4~\xa6#U!\xa5b\x81\x90\x94\x11\x02\x00\
+\xb6\xb6w\xae^[:\xf8kL\xbe4\x8a\xe2\xcd\xad\xed\xf4hw\x88\x91\x1d\x00X\xe2\
+\xdb.\x10\x84\x1c\xaf\xb6\x13j\x07\x13\xa7\x0e\x92\x9a\x8c[\xbc\xb3\x0e\x00\
+\x84(\xfa~X5\x87\x12\xdc\xcd\x95\x8a\x8c1\x82\xa3\xee\x8f\xc3\x0eo\x853a\x18\
+\x86ah\xc2z\x18\x86\xaa\x93\xabUs\xe5\xeesa\xff\xf2\xe0A2\x82e\x98\xd2\xda\
+\x88\xb1\x94nK\x03\xd9xe\x9f\x00\x01\xf9\xc4?\xe7\x8f\xfd\x1c6\xaf\x0c\xd3\
+\xd3\xa69\xc1\xc5+\x7f$\x1e\xfcI\xfe\xf5\x7f \xae}\xe5\xa6+"\xe5\xb4\x97\xd8\
+B\x81\x90h\x1b\x96or\xb4H\xd9c\r\x9dOy\x8c\xecK\xce\x8c\x84\x9a\xb9=\xb6+\
+\xa94u\xf6\x08\x01D*\xfb\xc3\x93)\x8f\x14\xe4\xc5;I\xe5\xae\xbd\\\t3\x86\xc7\
+\x9d\xd2\xc7\x98U2\x86a\xa3\xfe\x11\x81\x90\xc9\x8d?\x98j?\x9c\xdfCT\xab\xc8\
+\xe5re\xb92w\xfdW\x0b\xf5\x87\x17_\xf9\xd9\xe9\xd6\xd7\xc30\x17\x86\xa1\x8e\
+\x1f`\xae\xda7\x91]\xfd\x16\x0b\x05\xdb\xb23XS\xaf7\x1e{\xe2\xa911\x1e\xf6\
+\x10M\x0f\xf6\xa3\xe8\xca\xb5k\xc6n\xa8\xf8j\x80\xec\xb5\xd0\xdco\xfcxF\xe3\
+\xf1}/\x1f\xe62yf\x8c\x9d;\x7f!\xbd#\xeb\xde\xafL\x86:U\'\xcb\xcb+\xedvf\xa4\
+$\x07\xcc\xdb\x9bPPDC\'\x19\xbe\xa7q\xcc/-X\x8e\xbf\xc7\xc5\x94\xc4\x8dW\xf4\
+\xc8\xa7\xe6\x01Z\x0e1-\xa3I\x15\x03\x86\x0c\x98#\x833\x85\xde\x8b,\xf7\x01\
+\xa5\x82\x99\xde\x17jM\xbf\x94\xd2g\x1bS\xeb\xbfC \x1d\xd4ph\xb1LQ\x8a\x19|i\
+\x87w\xf7\xdc\xf9\x80\xad\xa9\xcb\x19\xaf\x0f\x9d\xa0<\xf7\x7f\xe3\xda\xc3d\
+\xfa=d\xe6{\xa0t\x1b8\x05d]\xac\x9d\xc3\x95\xaf\xc1\xf5?\x03\x11\x01\x80x\
+\xe4\x1f\x13\xcb\xa3\x8b\x1f;@\x1dX\x03\x83R\n\xfb\x8cc\xd6\x83\x17~UR\x9b\
+\xbe\xeds`\x19\x9bR\xb2\x8e\\\xfd&T\xdf\t\xde\xd4\x98TM\x0f\x19\xc0\xa1\xc9j\
+O\x9d~\xe8\xb3o\xba\xcdD\xee\xd4z\xf1\x13\xc7\xd5v"\x19|\x1f%\xf1\r\xfd\x1d-\
+7\x9e\xf9^\x1aT\xf6B\xf6L\xfd\xf7\xdc\x99\xed\xfc\x07\xe7\xea_\x1e&\x95r\x91\
+\x02 r\xe2\xf2\xaf\x04V\x14\x9f\xfa\xe1L\xe6\xb5\xd7\x8d\xb3\xf6\xe7\xe1\xc5\
+_\xb5\xfak\x00h\xf7\xd7\'.\xfe|\xd8\xbb\x14\xbf\xfd\'\x88_P\xe5\xcaL#\xcc\
+\xc5\n\x94\xd2 \xf0\'\xb31i\x11\x80\\|\xf9\xe5\xa9\xea\xe4;\xee\xb9{|\xdd\
+\xe9[\r\x0f\x1c\xce\xf9\xb9s\x17j\xf5\x06I\xf9\xa8\xdc\x02e>|\xf6Uk\xb8\x07z\
+\xdc\xec\x11\xb6m\x17\x8b\x85V\xbb\x93\x19\x96\x96\x97W\x9e~\xe6\xd9\xf7}\
+\xcf{\x0fb\x03\xd0\xbd{kk{iy99\x8d\x06\xac\xbf\xe6\x93\x92\xef\x90\xc4\x8d+\
+\xca\xb7\x9dK\x10r\x8fUK\xb6\x1f\x94\x16\x0f\x92\x1a\xefn\x8a~\r\x00\x08\x01\
+1\x92\xe0\xe1\x03w%z!\x89\x94\x92[%G\xd4\x86\xd7R|4\xe4\x97\xbf\x18\xcf\xdfO\
+\xe7\xdeo\xce\xaf\xd5X\'\x84\x08v\x1e\xae\\\xfcuW\x87\x84\x844\x1eA\xaas\x91\
+\xf4\x12$\xcb\xb2b+\xb7T\xf9[wl\xfc\xd2 \xf6\xac\x89\x8f\x86\xfa\x0e\x88X?\
+\x8f\xb5sp\xf9\x8b\xe0U\xc0\xf6\x81G\xd0\xdf\x02i\xe82\xfd\x1a\x7f\xf8\xa7\
+\xec\x0f\xfe\x12]\xf8\xc8hy\xcd.!,_P\xcf\xd2VS\xd3gF\x1f\xf76\xe5\xe3?\xc3\
+\xae|\t\xc2yby\x88\x12X\x17:\xd7\xb1\xbdl}\xea\xffE\xb7:\xbeZM\xdf\x15\x1d?k\
+_\xdf\x1b\xdd\xa55\xf3\xce\xb9\xdd\x08\xefc\xcd?ux\xb2\xe7u&}\xf3\xd80\x87\n\
+wZ,|\xca\x1fgJ\xd5\xb0\xaek^\xbdw\xb3\xf4\xf1\xc9\xf6#\xae\xa8\xa529H\x13\
+\x01\x81\xb0Fp\xee\xff\xf4v\x1f\x93\x8b\x9f\x96s\x1f\x05\xaf\x92\xcc\xf6\xeb\
+\xb0\xfe\xb0\xbd\xfag\xf6\xc6\xc3D\xf6\x00\x92\xf9\x19A\xf7\xfa\x1f8\x9dW\
+\xe4;\xfe\x072\xfb~\x8dY\xa6~\x9a\xc9\xc6\xc4Di\xb7V3\xd4m\x02\x00\x82\x8bG\
+\xbf\xfd\x18c\xec\xdd\xf7\xbdk\xaf\xaa\xd3$\xbb\x10\xa2\xd7\xeb=\xf5\xf4\xb3\
+K\xd7\x973\xc8>\xbc\xf9&\x14U\x92\xfa\xe7\xf5\x14s\xc4\xd5\x1f\xa5\\.\xed\
+\xee\xd6{\xfd\x94)\x02\x11\x9fy\xf6y\xd7\xf5\xee{\xd7;\xf7I\xd0\xd4\xdb666\
+\x9f~\xe6\xb9\xd1M\xba\xc7\xae\xcc>\x14"\xfa\xbb\xa2\xbb\x01\x00\x08\xc0\xf7\
+\x8e\x11\x16Vo\'\x07\xb0\xd2\xa1\x8c\xe3\xfa%H\xf4X6\xb2\xdf\xcc\xa1\x04ws\
+\xe2\x86\x88\xb1;\xe5\xf4j{\x81\x08\x89k\xde\x13?\rw\xfcWt\xfeC\xa4t\x06,\
+\x0fYW\xb6\xae\xd3\x9d\x97\xfc\x95\xaf\xdbk\x7f9\xe8\xdb0\xc2\x98\x03\x98\
+\x9a`\xa6ck\xe7\xeef\xfe\xde\xad\xf6\xfdS\xed\x87G\x00=\xfd\xa7\x12\xd1\x87\
+\xee\xea\xf8R\x11\x02\xbd-\xfe\xc8\xffd\x7f\xf8W\xe8\xcc{\xf7)>\xb7+\xb1=\
+\x19\xc81{D\xa4\xca.b\xdc|\x0c\x90\x0c\xf8l\x85wV\x00t\\\xbbA\x84\xd1\xa9\
+\x8f6\xd5\xee!\xaaNT=\x98>\x91\xb17\xdf\xf4\xef\x9c\xec<6L\\\x97qlV\x01\x00\
+\x91\x17\xef\xa4\xe1\xac5.\xd2\x96~\x9d9Q\xb0,+\xf2\xe6W\xca?pj\xe7\xb7\xc7\
+\xa4?\x8cA\xc6\xe9\xfa\x83t\xf3Q\x08\xfe\x15\xe6\x8f\x83\x9d\x07\xd6\x82\xf6\
+2D;\x03\xb7\xa2\xcc\xfa\x00D\xb2\xfb\x8c\xf5\xc8O\x92w\xfe#z\xfb\x0f\x13\x9a\
+\r\xd1\xa3\xf3\xa0\n\x9e\x0b\x82\xa9\xea\xe4\xeaZv\x87\x8a8f\xdf~\xec\x89\
+\xddZ\xfd\xae\xb3w\xce\xcd\xcdf\x8a\xa3\x91\x9d1v\xe5\xea\xd5\x17^8\xb7\xb9\
+\xa5\xd4\xffQ\x1eFY\xba\xdfp@\x1bO\x10\x8d\x8ev\xbe\xe7U*\xe5\x95\xd5\xf5\
+\xcc#\x9c\xf3G\xbf\xfd\xedN\xa7\xfd\xae{\xdf\x99\xcf\x8f1\x15\xeaIL\x1c\xc7\
+\x17.\xbe\xfc\xdc\xf3/\xf6R\x8e7\xdf\xb9A\xebu\x12\xd6\xbc\xa6\x0e\xa4\xdc3\
+\xd8\x80\x13L\xb8\xe1\xe4\xc1R[R\xdc}\xc6\x8e\xaa\xe5P\x82;\x18\xeeh\x88\xd8\
+\xf6\xef\x08\xbb\x17\xc6`\x90\xc6\x8e\xfe\x0e<\xfb\x05\xf9\xc2\xaf\x80?\x05v\
+\x08\xbc\x03\xbdm\x1b\x19\x98K\xa5M\xa0\xd9\x17\xce\xac\xf4VD\x9c{\xcb\x13?\
+\x14\xb0\xd5||5\x95T\x863\xc1\x11\x85#\x0b\xa6\x04\x10\xa1\xbd,\x1e\xf9i\xf8\
+\xc0\x17\xe8\xf4}c\xdfN\x08\x89\xbd\x99\xc8\x99\r\xe2\x95\xf1\xa9\x99\x13\
+\x17L\xb8\x15\xcdTPg\xbc&\xae]V\xc6[\x1d\xf6\xd42L|\x1f\xd6\x89\x93\xdb\xc9\
+\xdf_\xe9>E\x90\x8fB\xe7\xd8/%\xad0>\xfe\x83\xce\xde\xdb\x89\xe8\xc15\x13\
+\xd3f\xbb\xf0\xa10\xba<\xddzp$\xe54\x18\x89\x08:+\xa4\x93T\x9a9\xde\x8cU\x0b\
+\xa2\x1a>\xfe\xcf\xb0\xb3B\xdf\xfbOL\\\xa6\xe3BGLV*\x9dN\xb7\xd1le^*\xa5\xb8\
+p\xe1\xe2\xa5K\x97\x8f\x1f[<u\xead\xa1P\xf0=\xcfq\x1d\x94\x18\xc7q\xb7\xd7\
+\xdb\xdd\xdd\xbd\xfc\xca\x95\xad\x94\xc1P\r!\x06\x9b\xf5f\x81326/d\xc4\xae\
+\xce\x18\x9b\xacL\xb4\xda\xedf\xb3\x9d\xb9YJ|\xf6\xb9\x17\xae\\\xb9v\xcf=w-.\
+,\x14\ny\x1dvI"\xb28\xeet\xbb\x9b\x1b\x9b\xe7.\\\\_\xdf\xb8\xd5\x95\\oR\xe1\
+\xddM\x197\x01\x00\x01\x98\xd8\xa3h\x84\x04\x95\x93\x07I\r%\x17\xddM\x18gG\
+\xd5rX\xc1\xdd\x94\x9d\xd2\x87\'\x1b_\xb3E\xc6\x97\xd1 \xc1\x11\x80 \x88\x18\
+\xda\xcb)f6\x03\xe8\x19\x18\xd2\xc7I#\xd3\xb4\x8c\x9dD`W{\x0b\xc4\xfe\xfc\
+\xd5\xca\x7fq\xfb\xf6\xaf{|{\xc0\t@B\x0e\x80\x81\xb9C\xcep\xe4E\xc6\xeb\xb0~\
+I<\xfcS\xf0\xe1_\xa6\x93w\xa7/\x0e\x04\x89\xdb\xf1N\x95;O%N&\xc9"{Hc\x96\xf6\
+BI\xbf(YL8"\xe3\xac\x05\x07\x99\x01\xd3\x91P\x04\x96euroo;\'\n\xf1\xe5\xe1}&\
+\xe73$\x7f\x069\x14\xe1q\x9c\xb9\x7f\x1f\x0fHH\x03\xab\xaa|\xce\xb9p\xc2\xeb\
+\x95\xcf;\xbc1\xd1\x7fn\xfcz\xda\x14\x11?2\x87\x18{F\x1d\x17N\x90\x85\xac\t\
+\x84\x18\xab\xb7t\x1e\x1c\xc7^X\x98\x13R\x1a\xa6\xbf!/,\x84\xb8r\xf5\xea\x95\
+\xab\xd7\xd4\xe3\xb6c\x01\x12\xc6\xc6\x04\x1dSR*\x15\xfa\xfd~\x14)7\x81=\xd7\
+.\xbe\x11\xa2)\xef\xe4oc:kj<R\xca\xb9\x99\x998f\xfd\xfe\xe8\x0eJ\xd0l5\x1f~\
+\xe4[\x00d\xb2R\xa9LV\xc2\\\x8e\x10\x88\xe2\xb8Qolnm3\x96\xf5-&\x04\t\xb1\
+\xa4\x14F\x8d\x1d6\xdcG\xc9Z\x03\xb5]\xed\xc81\xf6\xb3\xba\xe1\x94\xe3\x97\
+\xc6]\xc9\n\xef\xac\xa1\x88U"{\xf9S\x1eJo\x190Z\x15\xa54\xf2\x8e\xad\x97>=\
+\xb8\xa0\x9dFR\xe6\xa8\x94Z4T\xd6\x92\xfa\x104h\x04w\x0f\x11G\'e\x92\x15\xc9\
+{5\xb8\xa8\xee\xadL\xb5\xed\xdc\xd9\x97\xab?\xd6\xb3\xe7R\x13h\x92\x01\x914\
+\x8e`\xc2\x97@\x16\x7f\xb1\xf1\xb2\xf8\xc6?\xc4d\r\x9b\xc9l\xaa\xdf\x9d\xf2\
+\xc7\xba\xce|\xd6~h\xe4rx\xa0\xdf\x95\xa8\xe4*\xd8\xc7\xf8j\xddk\xd4\xd9[\
+\xc6vo\xcb\xb2\x84Sn\x05g\x87\xa5\xd3\xa3lf\xc0H\xea<\x9e\xfe\xf0\xa8\xf5r\
+\xec\x8b\xf4(\xa2w(\x15\xee\xe4\xe5\xa9\xffz7w_\xda\xf002Hg*$95v8\xc7\xe2i\
+\xbc\xff\x0b0{\xff^y\xb0\x8dP\x8e\x96ey\xae{lq>\xcc\xe5\x86\xc9\xa6?\t\x0c\
+\xd2E\x16s\xc6\xd8(P\x02 \x00\x86anvf\xda\x98\xbb\x10\xcc\xde\xf6FI\xba\x13\
+\xe9?\xd2\xdfEo\xc7\x91\xcb\x05\xc7\x16\xe6]g,w<\x18\xf6vvw_~\xf9\xd23\xcf>\
+\xf7\xf43\xcf\xbe\xf4\xd2\xf9\x95\xd5\xb5\x11dG\x00\x98(O\x14\x0b\xf9t\xabx3\
+\ry\x07\x10\xdeYG\xd6\x85\xfd\xd9vBs\x95S\x07I\re\xcc\x9a\x03\xd7R\xb9\x8fa\
+\xf6\x96\xb2\xfa\x06K\xc6e\x85X\xcef\xe9S\xbb\xe1{\xd5\xb5\xe1\xaf\xa1\x18\
+\x0e\xbd\xee\xcc\xe9n\xe2\xc1}\xbd\xf2\xb9\xed\xdc{\x07\x8fd\x94\xd64Ga*nj\
+\xff\x01\r1\xed\xdc\xd9\x0b\xd3?\xb1\x1b\xbc+;<$O\x0e\x95\xeb\x94\x0e\x0b\
+\xd9\x9b\xd5\xf9\x85\x8f\x9a\xe4\xb8i\xcb\xa5\x94rwj\xb9\xf2\x80\xa0\xfe\xf0\
+YS#\xceHz\x82"\xf7\x8aQ\x04\x06\x08\x1a\x83\xc1\xfe\x06U\x9d\xbdQ\xe5}\xab\
+\xf4\xf1\xbe3\x95\x86\xdaq\x0b\xc4\x10\x857\xc9\x8f\xff\r\xcb\x88h\xbf\xff\
+\x8b\xf4\xc6UzON\xe1V/O\xfe\xe8Z\xe1\x93\x98i\xd2\x9ak\xd2\xa3\xfe\xe0\xed&y\
+\x95\xcdU<\xfd\xe1\xe8=\xbf \'\xee\xc9\xac\xc0\x1c\xcd\x83\xb9)\x87\xefy\'N,\
+NV&\xf4\x88\xad_\x9f\xfc\x8e\xed\x83C\xd0\x0cs\xa1\x02D\xc3\x8b\x12o\xd9]\
+\xfd\xb5]\xc4dTC6M=\xb4k\x8dG5\x800\xcc\x9d8q\xcc\xf7=\xd8O\xd2\x9f#\x9b8)\
+\x14\xc2\x99\xe9\xaam\xdb\x88\xa3W\x0f\x87\xa0\xe4\xac=\xf0\xf9\xd9\'\xb4\
+\xaf_Z\xb0\x92}\x86\xf7\x17\xd6\xb8\xa6\xc3\xdf2\xb1g\xa5\x1c>ZF\xab\xb1\xa6\
+Q\x8b\xbb\x13\x97\xab\x7f\x8f\xef\xf8\xd3\x9d\x87\xb2\xe8lB^\xca\r\x06\x00@R\
+o\xa5\xf2C\xeb\xc5O\xce\xd4\x137s\xd5\x86L\xd2F\xdbf\x13\x93\x9an\xca\xdacG\
+\xdd\xd0\xf7\x8f_\x9a\xfa\xfb\xd5\xf6\xc3\x0b\xcd\xafxlk\x08\x19Y"\xc8\xa0SF\
+\xb8~Y8\x8dw\xff\xa4}\xea\xaf\xa1\xed@\xb2_\x8f\x1e\xc9\xb4\xd9\xaa^x\xdfe\
+\x11\x9f\xde\xf9\xb7\xb6\xec$/J\x05\xc31\x12\x1f\x8eR\x03\xb5},^g\xb4l\xb3\
+\x0e\xf7\xd5\xe5\xf7R\xde#o\xae\xed\xbf\xcdo\xa7\xb7\xae7K\x9d\xe43\x9a\xfe\
+\x18\xcd\xcf\xef\xcf\xc9@2\xc2!\xa2\xae|s\xdb\x13\x0e\x95k\xd5\x1f\xa9\x07\
+\xf7,4\xbe\\\x8c.\x0e\xbfrfn4\x96aO\n.\xecR\xe3\xd8\xdf\x16\'\x7f0(L[\t\x7f\
+\x85F\x04|\x9d\x07\xcb\xb2\xcc\x06\xa0\xee\xf4=\xef\xd8\xe2|\xa1\x90\xdf\xd8\
+\xd8J\xdcE\x12vn|\x8f\x1e*\xf8\xd3S\xd5\x99\x99)\x8bR\xce3\x91\x84!I\xe7\xe6\
+\xe4\xb5X\xc4\x84:\xe7\xfb|\x14Hb6(\x8d\xc7\xac\x930\x17\x9c>y|s{g{{\x8f\x95\
+\x86\xd9\x1c\xa6\xfe\x9c\xaaNNOU)%I\x17;\x94\xb4\x0co\xaf\xa8-\x01\x10@\xec\
+\xc1\xb6\x13\xcb\t\xca\x07ZM-Y\x87w\xd6\x01\x08\x10\xe4bO\xb5\x9dX\xee\xe1\
+\x03w0\xd4g\xd5\xc9\xd5^\\\xb1[\xbe2\xf5\xa3m\xef\xe4|\xf3\xcf}\xbe\x010\xd6\
+\xb0\x99\x08"\x10\xd2\xf1\xcf\xacU\x1f\xa8\x05\xef \x12-\xbd\x12\x8a\xc0\x10\
+\ru"\xc9\x12S\xb3)\xeb\xd8\xbff\xc68)n\x94>\xdd\x08\xee\x99j?Tm\x7f\xcb\x17\
+\xc6No\xc3\x03b\x8c\x1f\xc3\x87\xb9[\xed\xcf~\x1aO\x7f\xce\x9d\xbc\x9d"\xd0\
+\x11L\xd1l\x00cL\x08\xb1[\xfc@lW\x16\xeb\xff\xa1\xdc\x7f1\xd5\xdc\xb3\xd0l\\\
+\xe1}\xe5f\x9b\xaaO\x14\xa0\xf6\x0bTw\x8fN\x02P\x8c\x1f\x0f\xc6}\x11\xc3\'\
+\x92\xef\x84\xef\xabt\x1e\xa72\xcabk\x1a\xdf\xf9\xcc\x87\x9c\x1b\x05\x93\xd1\
+\xa2gN\x1a\xd6\x15\xb0\x12B8\'\xf5\xf0\xbe\xb6w\xdbd\xe7\xdbS\x9d\x87\xf2\
+\xd1U\x0223\xf7\x1a\xd4\x0c\x18s)B\x00\x91\xd9\x13\xf5\xf2\x87\xda\xd3\x9f\
+\xa2\x95\xbbrN\x0e\x0c8\x1b\xc55\xf5-p\x18\xfbw\x90\x01\xc5*T&\xca\xf90\xac7\
+\x1a\xb5Z\xa3\xd3\xed\xde\xb08\xc5bqz\xaaZ*\x15\t\x80\x82\xc5\xd1\xc9\xd7\ra\
+:=!C\x00\xa26\x13\xde\xff\xa9\xfdE\x15\xcbL\x13\x11\xc7\xce\xfc\xf4G\xc9\x8c\
+v\x00\xe0y\xde\xc2\xfc\\1\x9f\xdf\xdc\xde\xe9t\xba\x07\xccR\xb1\x90\x9f\x9a\
+\xaa\x96KED\x14B\x8cz\x82\n)\x0e\x05\xc4\xa3d\\\xed\xc8\xb1\x87O\x8b\x92\xbd\
+\xf6Z\x1a\x15\xd6\xb8\x02 \x01\x00\x8d02\xa3\x92\xab\x9c<\x94\xe0\x9eAv\x05\
+\xee\x88\xc8\x006J\x9f\xd9\t\xef\x9fn}\xad\xda}\xdc\xe5\xbb\x96\x8c\tp\x02R\
+\xb5S\xa4\xb6\x04GR?rgw\xca\x9fh\x94\xee\x97\xd4\xb7\xa4$DF\xee|-w/\xc2\xc0i\
+\x84\x12B-\xcb\xb2\xa8eY6\xc6P\x1c\x86\nQ@\x06\x00\x8e\xe3\x98\xd3v\xad_s\
+\xcec\xbax\xdd}`\xb5\xf4\xd9J\xfb\xf1\xc9\xde\x13\x01[\xb3e\x97\xca\x98\x80$\
+\xc0\x07~,\x08\x928\x92\xba\x82\x06\xb13\xd3.\xff\x95\xde\xcc\'\xbd\xd2|.\
+\x08\x9d\x91xL\xa3EV\xfd\xa7\x9d;{\xde\xbb\xad\xdc}f\xa6\xfd\x97\xb9\xe8\xba\
+\x051EFS\xa1\x10\t\x02A\xea"u\xc1\xf2q\xea\xdd\xe0O\x1a\x03\n!\x840w\xaa\x9e\
+\x7f7\x08\x8e\t\x88PB\xa8E)\xb5l\xdb\xb6!\x86\xd2\x1d\xe4F\xb0\x9bQ\xde\xd5\
+\x08\xd4,\xbew\xa3\xf7\xbd~\xbc\x86d\x18W\x11\xd4\x00B)\xa5\xc4&\x88\x85\x93\
+P}\xd7\r\xd5v\xfd\x160\xb0\xd5Dv\x95\x01\xce\xb9\xa0\x13\x1b\xf6\xa76\x0b\
+\x1f-\xf6\xcfM\xb7\x1f\n\xa3\xab\x0e\xb6\t2*cBp\xb0"\x01\x88\x04\x0b\xa9#\
+\x88\x1f9\xd3\xf5\xfc{\x9b\xe5\x0fB8\xe7y\xbe{\xa3\xdd62\x03|\xa6\r\xa8q\xd7\
+u\x9d\xe9\xa9\xeaTu\xb2\xd3\xe96\x9a\xcdN\xa7\xc79\x17R\xeaq\x85R\xe28N!\x9f\
+\xafV+\x85|\x9e&[\t\xaa\xc7\x8d\xb7\r\x0c\xb37\xc4\xc40\x17\x94\x8aE `QjY\
+\x94Zv\xe0\xfb\x8e{\x8bA\x8dT\xd9=\xcf-\x16\x0b\x04\x80RbY\xb6\xfa\xb8\xc5Ba\
+\x9f\nq]7\xf3]\x18cD\xcaR\xa9X*\x15\xdb\xed\xce\xf6\xeen\xb7\xdb\xd7\xb3.3\
+\x11J\xc9\xc0\xb5t\xaa:1Q\xb6(U\xc3\'!$\xcc\xe5\x84\x90T\xb51\xdb\xb6,+\x9f\
+\xcf\x1fD\x15x\xc3E\x07\x1b@\t|\x0f\xb5\xfd\x86{-i\x11\xff\x7f{\xef\xfe\x1b\
+\xc9u\xdey?\xe7\xd4\xbd\x9a}#\xd9\x9c\x1b\xa9\xb9*\xf2\xcc(\xc9h\x94D\x91w\
+\xe1\xd7\xce\xeb\xbc\xf6\xc2\x86\x9c56\xbbX`\xb1\xc0\xfe\xb4\xc0b\xff\x9c @\
+\xb0X\xe0\x85a\xc0p\x04\x08+!\xc6+\xad\xbck\xbdr\xa2\x89\x12{4N\xc4\x19\xc7\
+\x99;\xc9\xb9\xb09$\xbb\xfaR\x97sy\xf6\x87\xd3],V_\xd8\x9c\x19r\xd8\x9c\xf3\
+\x81!\xf74\xabO\xd59]\xf5=O?\xe79\xcf\x13m\x88\xe8\t\xc0\x0eS\x85\xe1\x14\
+\xdd\xe2\xb1\xc9\x13\xf7\xf4NJ\x1d\xdf\xea\x01S\xb7\xa3z\xb6\x1fN\x7f\xffA\
+\xf5O\\\xb6\xea\'K\x1e{`\xca\x0e\x01Dj2\xa3\x12\xb9\'\x13wA:3\x86a\x98\xbd\
+\xdc\xd9\x9c\xf3f\xf5_l\x96\xfe0m\xca4M\xc7qT^@\xb5\x19\xbd\xff2\xd4\x05\xc0\
+v\xbf\x84a\x18*\x82BJC\xd0\xf2Z\xe5\xff\xae\x97\xff\x88\x8a\x8e#\xd6\xbd\xe4\
+\x81\xcbWM\xd9\x06\x90\x80 \xa9\x9bX\xb3\xa1\xb3\xc0\x9d\xa3\xe0TU\x1aBJ\x07\
+Gy\xf7\xfb\x82\xd2\x87GP\xbaY\xfc\x83\x8d\xa9\xdf7D\xcb\xe5\xab^\xf2\xc0\xe1\
+u\x03{[H\xa8\x8dVI\xfa\'h\xe5Uo\xfa\x94W\x9au\x1c\x87d\xa0\x94\x86\xa5\xdf\
+\xb9\xe3\xbc\xa6&\x0c\xd5\xa6\x99I\x8b855\xe5\xba\xae\xea\xe5\x98_\x8a\n#Q\
+\xcf\xf9\xf2\x91\xff\x94\x8b\xcfQ\'U\xdf\x9d\xe7y\x85B\xc1w\xfd\x11K\xa9\xfd\
+\xe7\xea\xdf\xe2\xa4N\x1d\xc7q7\x84F\x08)\x8d\xc0\xb8\xd4\xf0\x7f\x97"3\xf9\
+\xa6\xc7\x1ez\xec\xa1%6)\x08@\x90\xd4N\xcc\x99\xc8\x99O\x9c\xe3\xd2\x9eN\x17\
+\x03\xd3u\x143\x93M~\xe0e\xa4\x13|\xee\x1a\xd4\r\x90Z\xaf\xc5\xe2T\xb18\x05\
+\xdd]\x97\xa8\n\x15)#\xc0\xb2\xac\xf4\xd7\x98\xea\xbb\x1a\x7f\xc68b\xea\x0f\
+\xe9\xbat\x08\x1d\xb5\xc8l\x18\xc6\xdc\\mz\xbaJ\x08\xb1m\xdb\xf3<\x95:I\xe5\
+\xb3\x1cgT\xfb\xc7\x93RZ.\x95\xbe\xf2[\x1e"Z\x96\xa5\xbe)\xf5,\x0c\x9b\xf3\
+\xb2\x93n\xb6\x9d\xde7"\xd5hH)\x19\xe3Q\x14\xc5I\xa2f2B\x88eY\xbe\xef\xf9\
+\x9e\xa7*\xbe\x1a\xbd\xf2\x8a*\x85\xd4\xb1\xa3G\x8e\x1e\x993\x0c\xc3q\x1c\
+\x95$\xca\xf7\xfd]\xe5U~!lK6 \xb6\xfdP\xcf2v\xad%d\x99,&bxz\x8b\xc2\xcc\x19\
+\xd8\x93T\xe3\xfbB\xf6wq\xf6N\xea\t\xabDDf\x1co\xb8\xc7\x1b\x00\x90y\x0c\xd4\
+\x07\xdd^6\x02\x00\x90\xbd\xf2\x8f\xa9h*uK}\xc7\xfd\x16e\xd6TIU2\x8d\xd2K\
+\x92D=\xde[Na\xb3\x94`1\xf1N62-\xe4>\xa5V\x08\xbbU\x8d\x06\xd5S\xcd\xfa\x82\
+\xb0W-\xde0\x8c\xf4\xc9A\xb3\x12\xd9\xe5\xc8\x7f5\x1d\x10\x00H\xa7@\xdf\xf7\
+\x89]\xc8\xc9zjh#"\xa54\x15\xf7tS\x929<\xf0\xbc\x1f\x92YVU\x93\x90j6\xe7\x1f\
+\xc8NTN\xa6\xc6\xec\xae4H5\x92\xde\x0cYaU\xf7@z\x1bHi\n\xd3m\xb9G[\xf0Fn\xf0\
+\xd5\xa7\xec\x9e+)U\xf6\x1d/\x89\xf4\xaa9\xabk\xc8\x8dg\xf6\x06\xc8*\x9di\
+\x92\xfe\x83\xd3\xf5gedt\x7f\n\xf4m\x81\xf3=\xaf\x7fJ\xcb}\x89\xea\x9d\xec};\
+\xfexf\x9bM\x1f\x13\xd3\xec\xeaC\xeeY\x18\xf8)\xe8\xdd\xa2\xd9v\xb2_J:\xe1\
+\xa9q\xf3<7\xfb\xd9\xfe1Q\xefs\xce\xd5M.\xa5T\xedg\x1f\xc9\xdd\xce[\xfb\x0c\
+\x0b\xee)/\xa8\xaa\xc81\xf0\x98\xf1k-\xf1\xf6#\x994\x01\x80\x00\xb0\xe1\x0b\
+\xb3v\xa1fyU\x98\xc4\x05U\xe8\xbb\x93\xd2\xbb\xdc4\xcd\xecm\xa4\xa4\n\xb7\
+\xafI\xe6d\x0b\x00\xb2\x85\xe7\xb37\x9fR\x9f\xd4\x82\x1bv\r\xe9\x05\xa42\xad\
+<\x12\xe9\x84\x91u\xcb\xe6|\x08\xe9S\x94\x86\x7f\xe4j\xd5\xe7\xce\x98\xfeV\
+\x80\x8c\xa1\x94\xceg\xfd.\x02\xe8\x89{\x1a\xd1ad\xf6\x7f\xa6\xa7V\xe9X9\xe7\
+\xe9\xe5e\xbb?\x8e\xb7\x04\xb6kMV\xd9S\xa7Y\xae#\xd9\xf9l\xb4\x1bd\xd8\r\x90\
+\x1e\x9c\x15#%\xac\xb9\xc1O\xef\x04\x80m\xd3jv\x19#\xbd\x18k{y\xeb\x11\xfa\
+\x0e\x99\xf4\x90\xe9x\xe6n\x80\xec\xb7\x9f\xfd\xe2r\xeb\x13\x84\x10\xe5\x7fP\
+%\n\x84\x909?{\xb1\xcf\x19\x92\x1bIe\xe8\x00@6Y\xf1SL\x99\xb9\x1bCM\xfc\xb9g\
+aG}\x1f8\xdbe\xed\xa7\x9c?-7z\xe9\x98\xa8\t/+\xeei4\xcen\xbb\xb6\xffH\xd6\
+\xe6\x9d\xee\xbe\xe5\x11\x159\xfc\xe9\xd3\xa3\x03\x16\x14(\xf9V\xf8#\x0c\x9d\
+*\x80\x1a\xfeL\xd7\x87<\x91\xe2\xae\xc8\xca_\xaa\xda\xa9\xb8gWu\xb2bjf\xf3\
+\xd3\xf6\x9czY-H\x8dbs{\xdc\xee\x08}\xcf\xdd\xca*]e\xf6\xd7@\xbf\xecf\xaf\
+\xc7\xc8\xec\xddO\x7f1\x8c0\xdea\xbb\xb2g\x1c\x11\xf9\x05F\xb2\xdd\x94V~\x00\
+\xda\x0b\x96W\xef\xab\xc0\x0f\xd5\x02\xf4\xe6\xc2\xac\x83e\xfc\x07\x89l\xffa\
+N\x081MS\x8d\x00d\xb45\xed\x882\x96\xd3\'y\xb72\xa4&\x0f\xd8>\xb9\xe6f\xd6\
+\xdc\xe4\x9a\x1b\xfc\xac\x9d8p\xf0G_Rv\x8e\x19x\x03\xf4\x7f\xfb\xd9KUW\x9b\
+\x1a\x19\xea#\x94\xd2\xcdFC\x88\xec\x86\x1d \x84\x94J\x03<\xdd\xa9\xb2\x03\
+\x80a\x18J\xdcS}\x1cx\xd3\xee8\xaa\xb9\x1bCiqz3\x8c\xfeA@\xb6[<\xd9\x11\xce\
+\xcd\xb8\xfd\x8b%\xe9\x80\xa4\x93\xab\x9a\xf0\x84\x10jH\xd5\xe47\xda\xe4:P\
+\xb0\xe0nZHoXE\x0e\xcb\x9fVV\xf6\x8e\xf0\xe6\x12\x8a\x08v2\xdb\xbd\xf2B\x1aO\
+9\xa9\xe2\x9e{\xb6S\xa1L\x83grK\xf6\xa9\xa8\x99\xa6\xb9\xb6\xf6\xa4\x11\x04\
+\xae\xe3\xbe\xf6\xda\xab\x00\x90\x95\x80t\x85\'\xfb\xf0\xef\xf8k4k\x0c\xaa\
+\xe7!\r\x1bP-g\x7f\x9e\xc3\xf6\x1b:\xd5w\xb3\xb7\x8e\x97^j\xee\x8c9\xcb(}\
+\x08\xfbE\xa4_Gr\x06\x11\xc9\x98\xd84\xe3\xedI\xcf\x95\xed\xfe\xf8\x0fR\xd6\
+\x04S\x8d\xa4\x01\x8b\xb9#\xd3\x87y\xe0L6&\xd9\xc95m07\xf8\xfd\xe2\x9e\xf6.{\
+\r\xd9/:\xfd\xae\xc7\xec2f\xaa?g\xe5,\xfb\xd5\xe7\xc66\xab\xefF\xcf7\x98Z\
+\xee\xbd]\xfb[\xa6\x9e\xeb:\xae\xe3\xe6\x86(\xf7%*9\x86\xde\x1d2\xfa\xbe\x1d\
+\xdd\x97\xec\x8d\x91\xfd17\xd0g8\xf0KI\r\xfc\xd4J\xc8*{\xeeq\xc8}\x17\xd9\
+\xdf\x07\x88\xa8\xc4=\xfd\x06\xd39`W?\xf5\xf6\x1f\x99\x04\xdd\x95O\x00\xc6q\
+\xb0\xd9>~\xad%\x1e\xf1\xf6\n\x00\x90\x91\x1e\x1ej\xba^e+\x9d\xe4\xa4\x8a;\
+\xf4\x19\xce\xeb\xeb\x1b\x96e\xfa\xbe\x9f\x0b\x7f\x86\x8c5\xaa\xfe\x1b4[W\
+\xbf\xf8\xd5\x89\xe3\xc7_\x7f\xfd\x02\x00\x18\x86\x81\x99\xca\xcbi\xe3Y\xfbn\
+\xc4\r\x9d\xbei\xf4*=\xa9{4;a`\x86\xac\xa1\x97U\x99\xf4\xf5\x08e\xe9\x973u\
+\xdf\x8fp\xfed\x85\xcf\xcc8\xd0\xb3\x97af\x16\xc1\x06v?mj\x9c/%m_\xd9\x929a\
+\xcd\xb5\xfft\xde\x83\xfe1\xc9\xcd\xafr;\x03\x07\x9f\xf4<3\xd9\xaf8;8\xe3_\
+\x80\xea\xe0?\xdf\xbcu\xe2\xc4q\xdf\xf3\xb2\xdf~\xf6\xab\x87\xed_J\xdaq\xe5|\
+\x00\x00D\\[{\xd2\xe9f\xcb\xda\xba\x86\xa3G\x8e\xa4\x1e\xeal\xaf\xd3\x99^u9\
+\x15\xf7\xec\x17\xb7\xdb\xc1\xcc\x1aLYq\x1f\xff\xcb\xea\xbfKS\x81NM\x10\x99\
+\x8f\x93\xd9\xf6 \xa4W\xae~4\xa8\'\x143\xfe\xd5\xdd\xce[\xfbO\xd2\xb8\xab"\
+\xa3\xfa3\xf1\xa68\xc5\xa3c\xd7Z\xba\x83\xb2\x1bC\xc5F,\xccN\x9f&tK\xd2\'X\
+\xdcS\xc9@\xc4\x1b\xbf\xfe\xa7\xff\xff\xd3\xbfv\x1c\xe7;\xff\xea[33\xd3\x98Y\
+h\xcd\x1e\t\xdd;I=\xe1\xa0\x8c\xa6\xf4\xd6\xc9i\x10\xd9\xce\xe8\x8bIoh\xf5_u\
+Sf\xe7\x8c\xec4\x03\xdb\x1f\xf2\xf4\xbf#d=w\xa2\xec]\x9e\x13\x11\xd8\xee\x00\
+\xc9\x9e"7E\xa5\xef\xf7\xf7}\xb7\xdd\xef\x1f\x87\xb4e\xd8>\xfe\xc3\xda\x7f\
+\x96\x07\x95d\xe6We{fG\xbe\x7fv\xc9\r~\xfa\x02v)\xeb\xd9\x1b\xec\xfa\xf5_\
+\x7f\xfa\xd7\x7f}\xfc\xd8\xb1?\xfa\xc6\xff\xa5\xa2\xf4p;\xc3:\x0e\x00\xa9u\
+\x1f\x04\xcd\xbb\xf7\x96rIT\x08\xa1\x0b\x0b\xf3\x96e\xf5_[z\xe5\xfd\xb3\xd7S\
+\x0fl\xf6\x86\xe9\x9f\x93\xc6o0w\xa3\xa6_D\xce\x8a\x82\xbe\t/w\nu\x93?\xaf\
+\xde\xed\x0f"Z\x97q7\t\xf9\x08\xe7\xb8W99Nk2i\x88\xb0\x0e\x00D%m\x1f\xe2\xe1\
+1\xbd\x8a35\xb7\xed\x9d]\\\xf2A"\xf7\xd8,/\xaf\x00@\x1c\xc7\x0f\x1e><rd\x0ez\
+\x0f\x1e\xf6\xb1\xd5\x02\x00\xf4n\x14\x18.@\xb9\x17\xa3\xc9\x1e\x9f}6\x06\
+\xce\x1c\x90\xb9M\x9f\xe2,\xa4g0f5t\xc4Y\xb2\xff\xcc\x1d0\xb0\xef\xb0\xfb\
+\xee\xe7N\xaa\xfe\xb9c\xe3\xbbm\x7f\xc7\xf3\xa6\xc3\x02\x991\xc9\xa9\t\x8c\
+\x1c\x96q\xc8\xdeT\x0f\x1f=\xfa\xfc\xef\x7f!%.\xaf<\xf8\xff>\xfa\xf8_~\xf5\
+\xed\xe3\xc7\x8f\xa5\x87\r;\xbb\xfag*ya\x18.\xde\xf8u\xbb\xd3\xd9\xfe\x0b\
+\x9eT*\xa5\xda\xec\xcc@e\xcf\xbeHO\xf1,\x03;\xac\xcd\xfe?\x8d\xdf\xda\x8e7\
+\xea\xb0g!k\xa3<\x97\xde\xed\x1b,\xb8\xab^\x8c0\xdb\xbd\xf2\xfcx\xb5\x96\x90\
+\xf5~\x04\xe0\x0e\x1e\x9e\xfc\xc2\xec\xa4\x8a;\x00dm\x81\xdf~\xfdb\xbd\xbeV*\
+\x15/\x9c\xff\n\xdd\xbe\xe0\x83\xbdm\x84\x99\xd8\xb8\xbc\xd5\x00\xcf\xf5F\
+\x19\xf1\x84\x8c8\xf8\xa9O\x94>\x06\xbb=\xcb\xd3i\xf7\xf8\x17\xb6G\x8d\x8fy\
+\xf6=\x1d\xfc\xf47\x81\x94\xb2\xd9l}\xfa\xf3\xbf\t\xc3Py\xc9\xeb\xf5\xb5\x8f\
+>\xfe\xe9\xef\xfe\xceo_8\x7f\xde\xf3\xdc\x11\xa7H\x1b\x11B<~\xbcz\xedW\xffP\
+\xaf\xe7*\x9b\xa3a\x98\xe7\xce\x9e\xf5}\x7f\x98\x95\xba\x17_\xe2sos\xcco$w\
+\xba\x89\xd0\xf1~DgU\x05,*-\x1e|\x10!N\xf1\xd8x\xad\xd5e\xbc\t\x00\x84\xc0\
+\x88d\x03N\xf1h\x7f:\xc9\x89\x14\xf7\xd4bJ\x17g\xaa\xd5\xca\x9f\xfe\x9b\x7f\
+\xad<q\xd8[hM!\x84(Y\xef\xad\xb0\x89\xb4\x95}\xb8\xda}\xb8/\'\xe8\xd6\xdfg\
+\xf6bd\xd2{\x8fs\xdel\xb6\xfe\xe6\xb3\xbf\xdd\xd8\xd8TgS\x07t:\xe1\x95\xbf\
+\xfd\xbb;w\xee\x9d:u\xf2\xec\x99\xd3\xd5jeD#\x0f\x1f>\xba}\xf7\xee\xed[\xb7;\
+a\xd4\x97f\x80\x1c=:w\xf2\x95\x85\x81\xfe\x8a\t\xe5\x10ta\x14(\x934\xb5\xef\
+\xa8P\xf4\xd9\xb1\xccv\x14\xe9\x8f\x00\xc4\xa1S\x051,\xbfz\xaa\xff\xfd\x89\
+\x14wEj:\xa5\x8b3\xc3\xee~\xf5 \xa9x\xf6\xf4x\xec\xbd\x7f\xc8\xef6\xcds%\xab\
+\xec\x8c\xb1_\xff\xd3?-\xaf\xacd\x1d\x08)\x8f\x1e?~\xf4\xf8\xf1?~\xb9xd\xaev\
+\xfc\xf8\xb1j\xb5\xa2b<\xd4\xad\x18E\xf1\x93\'OVV\x1e<Y\xdf\x88\xa2T\xd6\xb7\
+\xb5P*\x15_\xbfp\xfe\xe0G\x86hR\xb6\xa5\xf6\x1dZ\x91\x83\xfa\xd5\xd3c\xb5\
+\xd6z\x80<De\xb6\x8f\xceKc\x0eH\xbd9\xa9\xe2\x9e\xf5xJ)[\xad\xd6\xd2\xf2\n\
+\xa5\xf4\xf2\x1b\x97 \xf3\xd3/\x8e\xe3\xc5\xc5\x1b\x8fWW\xa3(\xb6,\xb3V\x9b=\
+u\xf2\x95\xee_1\xef\x0f\x8d\xe3x\xf1\xfa\x8dz}-\x8e\xe3R\xa947W;w\xf6\x8c\
+\xe3\x8cNX\xaay\xe9H\xc5=I\x92r\xa945U\xc8\xd4\xe8vd\x9b\xa7\x00\x00 \x00IDA\
+T\xe8\x1e\x92\xcat\xbb\xdd\xba}\xa7}\xe7\xee=JiV\x9c\x11sUSH\xcel\xf7<\xf7\
+\xb7/^(\x16\x8b\xe6n6\tk^ (9k-\xa9\xd7#R\xfb:\xc5\xa3\x86\xed\x0f\xfa\xcb\
+\xf6\xd6D\xc2\x9aK\xea\x9e\x90rh\xf1&\xc3\xf6\x87\xe5\xa5\x99Tq\xcf\xd1jw~y\
+\xf5\x1a\x00\\~\xe3R*\xd9K\xcb+\x1f\xff\xf4\x7f\xc7\xf1V-\x98{\xf7\x97n\xde\
+\xba}dN\xad)o-\xb1"\xe2\xe2\xf5\x1b\x9f\xff\xdd/2\x07\xaf,^\xbf\xf1\xcb\xab\
+\xd7\xbe\xfd\xff|sn\xae\xb6\xcf\xdd\xd1\x1cd\xd2_\x81I\x92LM\x15~\xe7\xf5\
+\x8b\xbf\xf9\xe7\x9bO\xd6\xd7{\x8b^9\x03\x9c\xa4\x1f\xc9\xb6\x91Q\xf3T\xd3\
+\xb7>55U\xb8x\xe1+\xb3\xb33\xd9\x1d=\xfb\xd17\xcd3\xc0[+\xc8#\xe8\xe6k\xdc\
+\x9d\x0b\xa5\x1f\xd6\xbc\x87\xd9\xa4\xedC\xc3\x1f\xcf\x0c\xcbK3\xa9\xe2\x9e[\
+a\xdf\n\x1c\xeb\x85\xd0\xae\xae\xd6?\xfe\xf8\x7f\xc5IR,N]\xbcp\xde\xf3<!\xc4\
+\xfd\xa5\xa5\xbbw\xefon6\xa0\xe7\x96Q\x07/-/\x7f\xfa\xf3\xbf\x01\x80\xdf{\
+\xf3\xf2\x99\xd3\'K\xa5R\xab\xdd\xfe\x87\x7f\xf8\xf2\xfa\x8d_\x7f\xf8??\xfe\
+\xb7\xff\xe6\xfb*\x01\x93F\x93]\xecQ\x9e\x19\xc3\xa0gN\x9f\x9c*\xf8\x8fW\xd7\
+z9\xdcw\x84\xe0V\x01o\xb2-\x8f\x0c!G\xe6j\xe7\xce\x9e.\x97\xcbin\x86C\xe3p?\
+\xc4\xa0d\xbc\xd5\xad\xd0;"G\x98[\x9e\xa7\xe6\xce\xf9\xce$k\xa5\x19\xc7\xc4\
+\xc8\r\xaevavX#\x93*\xee9\xd2YR\xf6\xb2\x88,\xde\xb8\x11\'\xc9\xcc\xf4\xf4\
+\x1f}\xe3kj\xfb\xb2\x10\xa2Z)\x97K\xa5_\xfd\xc3\x97\xb9\x83\x7f\xfe\xd7\x9f\
+\x01\xc0\x1f\xbe\xf5\xfb\xaf\x9e;K\x08a\x8cy\xae\xfb\xd5\xb7\xdf\x8a\xe2\xf8\
+\xf6\xed;\x8b\x8b7._\xbe\xa4\x1f-M\xd6\x8f\x97\xf5\n"\xe2\xf4t\xd5\xf7\xbd\
+\x8d\xcd`\xb3\xd1\x08\xc3\x81\x12\xdf\r\xbe\x85\xee\xffeBAz&|\xb9\\\x9e\xab\
+\xcd\x9e8~\xcc\xf3\xbc\\r\xca\xbd\xee\x9a\xe6\x19a\xc1}eh\xab\x1d\xa4\x03\
+\xbf0b:^y\xac\xd4\xbe\xacq\'-B0<\xfc\x91\x8e\xde\xe0:\xa9\x8e\xbc\xdc\x03\
+\x96\xfa.S{\xea7\xbf\xb9\t\x00*\xc1@6o\xd1\xc2\xfc\x89J\xa5\xac\x9aP\x07?z\
+\xfc\xb8\xd9lMM\x15N\x9d|\x851\xa6\x0eV\x9c:\xf9\n\x00,-\xaf\xbc\xa8nj\x0e\
+\x14\xd9\x90\xbetGejY;\x8es\xf4H\xed\xcc\xa9W\x16\xe6OT\xabe\'\x9f\x906\xbf^\
+\x9a\xe28\xce\xf4t\xf5\xf4\xa9\x93\xaf\xbdz\xf6\xc4\xf1c\xae\xeb\xba\xae\x9b\
+\xcb\x97\xa9\xf5\xfd \x83<\xe2\x9dLj\xdf!\x87\x15\xb6\xef \x1d\x86\x88\xd6E\
+\xaf~\xf2\x88Hy\xb7tl\xf4\x06\xd7\t\xb6\xdc\xd3\x18\x98l\xf6\x12\x15\x0f\xf3\
+\xe0Aw\xa0\x8f\x1e\x99K\xd3Y\xa4\xe9;\x8e\x1f;\xba\xb9\xd9\xc0\xde\x9eo\xb5\
+\x01*\x89\x93\xff\xfd\xc9\xa7i\xe3\x04\x08!\x84q\x06\x00\xc3\xc2!4/\'$\x93\
+\x8e-\xbd\xf7(\xa5\xea\xdes\x1c\xa7\xe683\xd3\x15!e\x14E\xedv\x18\xc51\xe7\\\
+J\x81\x12\xa4\xca\xe7N(\xa1\xc44\x0c\xd7u\xa6\n\x85B\xc1O\xb3\x1f\xab*\x02J\
+\xdc\x9f"?\x8c\xe6\x85\xc0\x82\xbb %\x10\x90\xc3w\x90\x1ava\xbc\xd4\xbe\xc8\
+\x1a\xb7\xbb\xafFF\xca\xbb\xe5\x1d\xca\xf2M\xb6\xb8+\xbd\xde\n]\x07`\x8ce\
+\x17\xafR#\xab?w\x15bw&\x10B\x02@\xc2\xd8\xeaj\x1d\x86\xa0#&5\neD\xab\xbc+*\
+\x92\x8ad\x12\xeb\xa7\xb9\xb1\xd4\x04`[V\xb9T\x1a\xdd\x1a\xcd\xa4\xa1V\t\xe5\
+]\xd7M\xbd\xed\xfa\xae;\xf8\x88h\x83\x87u\x00\x00\x1c\xb5\x83\xb4P\xfb-\x18\
+\xe3\xdbd\xc1=\xc9\xba\xc1W\x9c\xe3\xd0j\xda\xa5\x13;F\xcaO\xaa\xb8g\xb7\x08\
+\xa6Ie\x01@%%O\x0b\'EQT,\x16s\xca\xden\xab@\xd4nm\x04\xc3\xa0\x00P\x9b\x9d\
+\xf9\xea\xdbo\xa5\x8d\xab\xa7NYRi\xbe=\x8d\x06z\x96{\xf6u\x9a\xd56\x9b~y`\
+\xc6\xb4\xf4S\xa4\xaf\xc0@6\xa1\xff8\t\xe55\x07\x03d\xc1m\xb5~\xca\xf9\x88\
+\x1d\xa4\xc7\xfaw\x90\xf6#y\x877\xbb\xc1\x94R\x02\x17\x83[\xa3\xa6\xebO\x9f\
+\xda\xb1\xb5I\x15w\xc8\xe5\x8d\xe9e\x14PO\x94\xef{\x85\x82\xdfnwV\x1e<|\xfdb\
+5\xeb\xa0O\x92\xe4\xc1\xc3G\xea\xf3\xea!\x9c\x99\x9e\x06\x80\xfa\xda\x93\x8d\
+\xcd\xcdj\xa5\x92m\xbc\xd9l"b\x9a\x1bO\xa3\xc9\xba\xddS\xbb\xdb\xc8\xd4\x12H\
+30g\x93\xfd\xa6\xf7O\xff\x07\xd3l\xcc\xd9\x84\xfe\xbb\xca\xc4\xa9y\x81\xf0\
+\xce\xaaL\xda@F\x86?R\xd3\xab\xbc2Nk\xacqG\x15b\x04\x00&\x86\xfc\x08\x00\xf0\
+\xa7O\x8d\xe3\xbb\x9f`qW\xe4\x16TS#\xfd\xf4\xa9S_.^\xbf\xf6\xab\x7f4M\xf3\
+\xe2\x85\xf3\xea1k\xb6Z\x7f\xff\x8b\xab\xaaD=\x02(\xab\xdfq\xec\x85\xf9\x13K\
+\xcb+W\xfe\xf6\xef\x7f\xff\xcd7j\xb5nh\xd1\xe6f\xe3W\xff\xf8%!\xe4_\xfe\x8b\
+\xb7\x8f\x1d=\xaa=3\x1aE\xea\xebK\r\xf04\x8f|\xaa\xec\xb9\xdaXYq\xcf~*\x9b\
+\xc4<\x97\xd0\x1f\xf4\x1a\xcf\xc1\x07eZ\x1dI\x88\xe1.\x94\xf1r\x84\x89xS\x84\
+\xdd\xe4B#\xd6Q\xc7/\xcb7\xf1\xe2\xde\x8fR\xe1\xaf\xbc\xf6j\x10\x04\xf7\x97\
+\x96\x7f\xf1\xcb/\xfe\xe97\xff\\(\x14P\xca\xc7\xabu\x00(\x97K\x8dF\x00\x99\
+\xect\xaf\xfd\xd6\xb9\xa0\xd9l4\x82\xcf\xfe\xf6\xef*\x95\xb2*e\xa7\xb28\xcdL\
+O\x97J%mCir\xa8\xfb!\x9b\xc4_\xd9\xef\xd9<\xfe\xfd\xe9ma\xbbO&\x1bocLNiP\x8d\
+\x82\xb7\x1f"\x0f\x81\x00"\x0e\xdbAJL\'[@c8\xc8\x1aw\xba\xafF\xac\xa3\x02\
+\x14f\xce\x8d\xe3\xbb\x87C#\xee\xfdy\xec\x10\xf1\xed?\xfc\x83\x99\x99\xe9\
+\xc5\xeb\xbfn6[\xcdf\x0b\x00|\xdf?\xff\xda\xab\x9d0T\xe2\x9e\xa6\x99\xb6m\
+\xfb\x0f\xff\xe0\xf7n\xdd\xbe{\xef\xfe\x92\xda\xe2\x04\x00\xb6m\xbd\xb2\xb0\
+\xf0\x07\xbf\xff\xa6\xab3\x10h\x06\x91\x9a\xf0\xd0\x8b\x8c\xc4\xbe\xac\xe5\
+\xc3\xc4=+\xf1d7\t\xfd5\x07\x04\x94\x9c\xf5\xfc\xe3\x9c\x0f\xdfAZ=9\x8e\x0b\
+\x85\xb7\x1f\xcb$P\xafG\xfc\x08p\x8aGMw\xd4\x12}\x96\x9d\xb3\xc5\x1e@T<\x8c\
+\nHW\xff\xc5L&H\xf58\xa5!\r\x94\xd2\'\xeb\xeba\x18QB\x8a\xc5)\xec\x15\x12#\
+\xbd:\t\xb2W7U}\xa4\xbe\xf6\x84\x10\xa0\x84\x1e;v4[CUG\xa4iF0p\x7fS\xfape\
+\x9f\xb2\xfc\xe6\xeag\xc8)\xafy\x81\xb0\xe0.\x0b\xee\x03\x01\x94\x18%C\x13\
+\xbf\x94\xe7\x7f\x8f\x90\x1d\xb6\x13\xa1\xe4\xd1\xe3_\xa0\x88\x01\x00\x11"\
+\x86\x03\xa7\nB\xcd\xf2\xfc\xef\x8d\x97\x05\x1e`\xa2-\xf7\xac\xed\x03=\x1fhv\
+\xd3\xa0\x8ad\'\x84\x94\x8a\xc5\x82\xef\xab@\x9a\xf4G\xb4\xb2\xb3\x08!\xb9"\
+\x9fs\xb5Y\x9aA\xffL\xd6\x8cCV\x9d\x07j\xfa\xc0\xe3A\x0b\xfad\x82\x92\xf1\
+\xd6\x03\xf5\x9a\x89|\xa6\xe6\x14\xbfzzGe\x07\x95\x94Ft\xb3Zq1X\xd9\x01\xc0\
+\xab,\x8c\xaf\xec0\xb9\xe2\x9eU\xf6\xb4\x1c\xb3zN\xd2\xe0\xc8\xdcBk\xfa#:-\
+\xca\xac\xde\xa7\x94\xa6\xfa\x9e\xfb\xbd\xac\xf5]\xf3\x14h\xe1>\xf4\xb0\xe0>\
+J\x0e\x04\xa4\xc4\x11u\xefF$~IA\x11\xf3\xe6\xb2z-qx\xf8\xa3\xe5\xb9\xe5q|\
+\xf7\x99\x0b\xd8\xd5\xd1\x07\x87\xac\xb2g\xa3\x17\x00@9^\x94d\xa7?\x93\xd3\
+\xc0\xe4\xac\xb8\x13B\xd2\x0cPiTrj\xdako\x8cF\xa3\x19\x00JU\xd4\x14\x00\x18\
+\x1fa\xb6\x9f\x1ak\xd7R\xe3."\xef\xb564\xfc\xb10<\xfb\xe30&R\xdc\x95\xfb%U\
+\xf6\xac[\x06zR\xdeo\xbc\xa7\x06x\x1a\x9f\x00\x99\x99 -\xe2A2\xbbK\xf4.\x12\
+\x8dF\x93\x83wVQ$\xcal\x97r\xb0\xd9n\x17j\x967\xa0\x02W\x0e\x994y\xe7\xb1z="\
+\xfc\xd1\xf2\xa7\xed\xa9]\'\x1e\x9fHq\x87\x9e\x04C\xa6\x82h\xaa\xc2\xca\xe7N\
+3E\xd3\xd3\x8f\xa4.\x97tA5\x15\xf7t\xbf\t\xf4"\x1f\xd2\xc3\xb4\xbek4\x9a.(\
+\xd2 \x99\x91\xf9\x1a\xc7\xaa\xb5\x944n\xa79m\x87\xa7\x91\x19\xb7\xb5\x1c\
+\x93*\xee\xd0\xd3\xf7\xdc\xde?\x85\xb2\xc4\xb3\x11\x0b\xb9\xc8\x84\xac^\x0f\
+\x14\xf7\\t\x9aF\xa3\xd1\x00\x00k=P\xb1\xedB\xa0\x1c\x96\xafq\xbcZK"\\S\xc5\
+\xaf\x01\x80\x8f\xd8\x03U:f:\xc5\xa7\xb8\xd4I\x15we\xb0\x0f\x13\xdf\xac\x15\
+\x9f}3\xf7b\xd8\xc1::M\xa3\xd1\xf4\xb3U\x91cd\xb9jo\x9cZK(\x93t\xd7\x12\x02\
+\x13\x83\x8f"\x86\xedUO>\xcd\xb5N\xae\xb8\xc3N\xb2\xbb+Q\xd6\n\xae\xd1hv\x84\
+\xb7V\x94\xb7\x9d\x8b\xa1a\xae\xdex\xb5\x96x\xeb\x01\xf2N\xf7\xf5\xf0\xf0G\
+\xbf\xfa\n5vnm \x93Z\xacC\xa3\xd1h\xf6\x13\x14qj\xb6\xf3!f;5]w\xacZK\xc8z5\
+\xf9F\x84?\x1av\xc1)\x1d\x7f\xba\xab\x05-\xee\x1a\x8dF3\x0e\xacy\x1f\xa5\x00\
+\x022\x9fQb\x0bo\xbcd\x03"|\x82\xa2[\x8bQ\xad\xca\x0e\xa40sv\x9c=P\xc3\xd0\
+\xe2\xae\xd1h4; y\'\x8dYT\xb1\xed\xfd\x18\xce\x94[<\xbas[(\xd3\x1caB\x0e]\
+\x95\xb5\n\xb3\x96?\xfdtW\xab\xd0\xe2\xae\xd1h4;\xc0\x82{\xaa\x90\x9e\x10Cc\
+\xdb\xc7\xdc\xb5\xc4[\x0fd\xeam\xe7C\x0e"\xb40\xb2\xf8\xf58hq\xd7h4\x9aQ\xc8\
+$\xe8fZ\x1f^\x91\xc3\xf2\xa7\xc7J6 \x19k\xdeS\xafU\xf8\xe3@\xbc\xf2\xfc8\xc1\
+\x94\xa3\xd1\xe2\xae\xd1h4\xa3`\xc1\xfdn!=\x89"_\x8c\xb9\x8b?N\xf8#\x00\x0b\
+\xee\xa2\xe4\xa0j8\x0f\t\x7f\xa4\xa6\xe3U\xc7\xaa\xdc4\x1a-\xee\x1a\x8dF3\
+\x14\x11m\x88h\x1d\x94\x1c\xf3\xc1\x0e\x19\xa7xd\x9c4\xeb\x92\xb5y\xfb\x91z=\
+\xcal\xaf\x8eUEoG\xb4\xb8k4\x1a\xcdP\xba^\x14\xd2\xad\xa1\xd1\x0f\xa1\xc6X\
+\xbb\x96\x00X\xe3\x0e\xa0\xaa\xa9;\xaa\x8a\xdeX\xab\xb2c\xa0\xc5]\xa3\xd1h\
+\x06#\xc2\xba\x8c\x83\xb4\xfe\xf5\x10\xb3\xfd\x98ay;7\x15m\x88\xe8I\xf7\xb5\
+\x1c\x12LIHa\xe6\xec\x98U\xf4vD\x8b\xbbF\xa3\xd1\x0c\x04\xd3\xfa\xd7\xc3\xbc\
+(\xc4\xb0\xc7\xf3\x8f#\x0b\xb6\x92\r\x0c\xf3\xb6\xdb\x85\x9a\xe9\x96\x9f\xe6\
+J\x07\xa1\xc5]\xa3\xd1h\x06\xc0\xdb\x8f$k\xab\xfa\xd7\xc3\xccv\xaf2?Nz\x00\
+\xde~$\x93f\xf7\xf5P\xf7\x8eY\x989\xfb,\x17\x9cC\x8b\xbbF\xa3\xd1\xe4A\xc9X\
+\xb3k\xb63\x0e\x03\xbd(\x86]pK;\'\x1b@\x91\xb0\xe0\xaez="\xd9\x80W=IM\xe7)/w\
+\x10Z\xdc5\x1a\x8d&\x0f\x0b\xee"\x8f\xd5:\xea\xe0Bz\x84L\xd5^\x1b\xa7:R\xd2\
+\xb8\x85"\xe96;$\xd9\x80\xe5U\xbc\xca\xc23]q\x1fZ\xdc5\x1a\x8df\x1b\x92wx\
+\xfb1@w\xd7\xd2@9\xb6\xfd\xd9\xb1\xc2\x1f\xe3\x86\xe8\xac\x02\x00\x01\xe0bH\
+\x90\x0c!\xfesu\xc8(\xb4\xb8k4\x1a\xcd6XpO\xc5,\xf2a\xb9_\xc6\xad\x8e\x84i\
+\xd2v\tC\xe3m\xdc\xe2S\x96\xe3\x18\x8d\x16w\x8dF\xa3\xd9b+\xd9\x00\x0cM\xed\
+\xeb\x96\x8e\x8fUk\xa9S\x97I\x03\x94\xd9\xcea\xd8:\xea\x98a\xf2\xbbE\x8b\xbb\
+F\xa3\xd1l\xc1\x82{j\xfdt\xe8&RB\xdcq\xd2\xac\xa3Hz\xe1\x8frx\x98\xbcW=9Nq\
+\x8f\xa7@\x8b\xbbF\xa3\xd1t\x11\xf1\xa6\x886\x00\x00\x87{Q,\xaf:\x8e\xd9\xce\
+Z+\xc8{I\xdb\xc5\x90,\xc1\xb6?^q\x8f\xa7A\x8b\xbbF\xa3\xd1tI3\xad\x8f0\xdb\
+\xc7\xf1\xb6\xa3\x88ys\t\x00\x08\x80\x9408\xde\x06\xc0\x9f~\xa6r\x1c\xa3\xd1\
+\xe2\xae\xd1h4\x00\x00\xbc\xb3\xaa\xb6\x1a\xa9]K\x03\x8fq\xa6\x8e\x8c\xb3\
+\xf8\xc9\x82{\xdd\xec\x8f\x00lX\xbcMa\xd6.\xcc<\xcb\x05\x8fF\x8b\xbbF\xa3\
+\xd1\x00\x00*[\x1b\x00\xb8\x80\x81\x15\xab\xc7\xcc\x11&Y\x8bw\x1e\x81ZG\x95\
+\xf0l\xf16O\xcfsH,\xa9\xd1h4\x93N7\xd9\x00\x80\x1c\x9el\xc0)\x1d7,wT#\\p.dp\
+\x97\xa0\x04 8"\xde\xa6|\xc2\xb0\x0b\xcf\xe1\xba\x87\xa3\xc5]\xa3\xd1\xbc\
+\xf4\xa0H\x93\rp\x01\x08\x83\xccv\xc3\xf6+Cs\x84\t\xce\xe3(\x899!l\xcdN\x9e \
+\x10\x02\xc0\x04\xc8A\xbf\x00\x80\x90q\xf2\x16<#\xda-\xa3\xd1h^vXk\x05y\x0c\
+\x00\x12\x87$\x1b\x00\xf0*\x0b\xc4\xb0\x06~\\\n\xb9Y\xafGq\xe8{\xe8\xc3c@IF\
+\x86?\xda\x85\xda\xe8_\x00\xcf\x05-\xee\x1a\x8d\xe6\xa5\x06%\xe7\xad\x15\xf5\
+\x9a\xf1\xc11\x8b\xd4rG\xc4\xb6wZ\xad\xf5\xfa\xaa\x8c\xb8\xc16x\x14\x00\xa1\
+\xa0\xc2\x1f\x87\x14\xf7\xf0\x9f\xb9\xf8\xf58h\xb7\x8cF\xa3y\xa9a\xcd%\x14\
+\x0c\x00\x84D!\x07\xdb\xda\x85\xe9\xb3#r\x84!`\xb9:\x8b<\x8a7\x97\x08\xa1\
+\x04@\x0c\x0f\x7ft\xcb\x0b\xfb`\xb6\x83\xb6\xdc5\x1a\xcd\xcb\x0c\x8a\x98\xb7\
+\x1fB/fq\xe01\xa6[\xb2\xa7j#\x1a1\r\xd3-\xcd8f\x8b`\xac\xd6Q\x87\x85?R\xcb}\
+\xee\xd9\x1f\x87^\xd5\xfe\x9cF\xa3\xd1h\x0e ,\xb8\x07\x92wK\xa4\x0e\xa9k::f1\
+l\xb5\xe3\x04\x817l\\\x070\x08\x00\x178\xacD\xea\xe8_\x00\xcf\x17-\xee\x1a\
+\x8d\xe6%E\xf2\x0e\xef\xac\x82*}7$f\xd1.\xd4,\xaf:\xac\x858\x8a;\x9d\x18\x81\
+:r\x8d C0$\x02\x1bR\x8e\xc3\xf2\xaa\xa3\x7f\x01<_\xb4\xb8k4\x9a\x97\x14\xd6\
+\xb8\x0b(\x81\x80\xe08,f\xd1\xab\x9e\x1c\xfca\x84v\xab\xcd\x12&\xc1\xb0ih$u\
+\x04J\x080\x8eBH\xa2\xd6e\t\xd9\xca.@\x88?\xb3\x1f\xeb\xa8)Z\xdc5\x1a\xcd\
+\xcb\x88L\x02\x11=\x81n\xc5\xea!\xc9\x06\x8a\xc7Lgj\xc0\x1f\x10\xda\xadv\x14\
+\xc6\xc4\xb0\x0c*\xccd\x85 "\xa1j\x03\x94\xe5\x95-\xafBA\xb2\xb8\xc9\xa2@\
+\xe9\xbcS<\xba\x17I\xdbG\xa0\xc5]\xa3\xd1\xbc\x8c$\xc1]\x95d\x80\x0f1\xdb\t5\
+\xfd!f{\xb3\x11\xc41\xa3\xa6%\x05\xb7I\x83\x88\x06\x12\x83\x00\xb4#\xe9\x94^\
+)\x1d9\x0b@\x00c\x0fxg\xed~\xd8xDL\xdb\xaf\xeem\xb2\x81~t\xb4\x8cF\xa3y\xe9\
+\x10\xd1\x86\x8c6\x81\x8c2\xdb\xdd\xf2\xfc\xc0\x8a\xd5a\xbb\x13F\xcc0-!\xb8e\
+Q\x8b=\x02B\x08@\xc2\x91\t\x07\xd0\xdf\x9a)\x088~\x15\xd0\xf2\xab\xaf\xecQ\
+\xd2\xf6\x11h\xcb]\xa3\xd1\xbcl \x0b\xee\xaaW\x9c\xe3\xe0\x1ca\xa6\xe3U\xe6\
+\xfb?\xd9\x0e\x9aQ\x94\x98\xa6\xc19\xb7\x1d\xcfL\xee\x81\x0c\tP\x00h\xc7H\
+\xa9\xddn\x85^\xc2\x12\x01q\xc8\x00\x19\x01#\xa633\xa5\x01M\xed5\xdar\xd7h4/\
+\x17\xbcS\x97I\x13\x08H9\xd4l\xf7+\xaf\x10\x9a\xb7}[\x8df\x181BM)\xd1\xb2l\
+\x13\x03\xc2\xd6\x10\x08\x10\x888\xc4LJ\xe4\xa6c\xb5;a\x1cE\x12%\x97T\x80\
+\xe3\xcd\x9c\x88\xc2h\xef\xbb\x95G[\xee\x1a\x8d\xe6\xe5"M6\xc0\x05\x0e\xcc\
+\x11f\xd8\x05\xa7t,\xf7fs\xa3\x113i\x18\x94si\xdb\x14y\xcc\xc2\x15\x872\x00\
+\x8a\x08\xedP\x98\xa6e\xf93q"\xa2\x8du@\x04@\x02\x84PJ\x08mq6\x7f\xe64!\x03#\
+$\xf7\n-\xee\x1a\x8d\xe6%B&M\xc9Z\xb0C\x81\xa4\xd3\xb9\x02I\xc1F#N\xa4eR\t\
+\xc4\xb2@\xb2$\x0e7\x8a\xb4\t@\x81@\'\x92\x12\x8c\xf2\xec\xaba\x9b\xb7[\x1b\
+\x94\x1a@\x00\x94G\x1f\xa0[\x915a\x96\xb3\xafnw-\xee\x1a\x8d\xe6%\x825\x97\
+\x10\x91\x000>\xd8l7\xdd\xb2]\x98M\xff\x89R\x06\x9b\x01\x13\xc4\xa0\xc8$\xd8\
+&P\x14\x89\xe4\x164\x08\x05\x00\xc2\x85\x88\xb9Q\x9a9\x9b0\x82\x86e{\x9e\x14\
+R}\xb4\xd7\x04\x18\xa6aX\xfb-\xb6Z\xdc5\x1a\xcd\xcb\x02\x0f\xeb<\\#\x00|X\
+\x8e0j\x14f_\xdd:\x9e\xb1v\xb3\xc38\x02H\xa4\x86c\x12\x1e\x85\x1c\xc0\xb2\
+\x11\x92\x0e\x01@\x94\x9c\x94\xfc\xca\xd1(\x01!\x85\xe3\xfa\xaec\xb6:m!$H\
+\xd9m\x92\xd2\x99Z\x8d\xd2\xfd^\xe0\xd4\xe2\xae\xd1h^\x0eP\xb0\xc6]\x00\x18U\
+ \xa9t<\xdd\xb5\x94Dq\xb3\xd1"\x86E\x08P\xc3\xb6\x0c\x19wZ\x86\xe5\x94\xa6+\
+\xebK\xbf,\x98\x08\x88`\xcdPz\xa4\x13K!\x98\xe3\x97l\xdb\x8c\xdb\x9b \x18\
+\xa1\xc4v=\x02`\xdb\xceT\xa9h\xdb\xfb\x1d\x07\tZ\xdc5\x1a\xcdK\x02k?\x92<$\
+\x00L\x0c\xd9\xb5d:i\xad\xa5\xa8\x13\x86a\x8c\x84\xa0\xe4\xd4\xb4M\xc2\xe3v\
+\xc7t\xddR\xb5\x1a\xb6\xd6\xa9\xe8\x10\x13\xd0=\x96\xc8J\x94\xa0\x14\xcc/V)\
+\xf0\xa4\x1dl>yD1\xa8\xce\xccU\x8e\x9c"\x94\xee\xf3"j\x16\x1d\n\xa9\xd1h\x0e\
+?(9k.\x03\x00\x02\x88\xa1\xe1\x8f\xddZKQ\'l\xb5"\x94\x80\x08\xd4\xb0lC\x84\
+\xed\x96\xe9\xb8\xe5\xe9i\x00X\x7f\xf4\xcf\x96\x89\xd2\x99O`\xb6\x13\x0b!\
+\xb8_\x9c\x06\x99\x88\xa8\xb3^\xbfo@\xb3\xe0\x19\xe5\xb9\xd3\xd40^\xa0\xb2\
+\x83\xb6\xdc5\x1a\xcd\xcb\x00o-\xa3\x88\x95\xb7}\xa0\xd9nX\xaeS:\x0e\x00a;l\
+\xb7BjP!\xa4i\x9a&\xe1\x9df\xdb\xf5\xfd\xd2\xf44\x00l\xae-\x9b\x18R\xef\x95\
+\x04*\xedNH\r\xcb\xf3\xa6PD\x98\x84O\x9e\xac\x984,8X\x9c\x997,\x7f\xdf\xbb\
+\x98G\x8b\xbbF\xa39\xe4\xa0d\xac\xf5\x00Fz\xdb\xbd\xe93\x84\xd0v\xb3\x1dE\
+\x8cR\x82HL\xd3\xb4M\xe8\xb4:n\xa1P\xaaV\x01@\xf0$X\xbb[,\x1d\x13\xc6L\xd8j\
+\x98N\xd12M\xc0\x84G\xed`\xf3\x81I\xc2\xa2\x07\xa6\xedy\xc3\xebh\xef\'Z\xdc5\
+\x1a\xcd!\x87\x05\xf7Qr\x00\x10C\xbc\xed\x96[r\xa6\xe6Z\x8dV\x14s\x02B\x12\
+\x93\x12\xb0\x0cl\x05\x81_,\x16+\x15u\xd8\xfa\xe3\xbb~\xf1\x88\xe1\xcct:M\
+\xd3\xab\x82\xe4\x06\xc1vc\xbd\xdd\\5HX\xf6)\x00\xf8\xd5\xd3\xfd[[_\x08\x07\
+\xe2"4\x1a\x8df\x8f\x90<d\xed\x87\x00\x08H\x06\'\x1b \xe0N\x9fk5Z\x9d01(\x02\
+5)J\x83@\xd8iOU*\x85b7Oo\x1c\xb5)1M\xaf\x9a\x84M\xc3.\xa1H\\\xc7j\xae?\x0e\
+\xdbk&\r\xcb\xbe\x81\x08\xa6[v\x8aG\xf6\xb5{\xc3\xd1\xe2\xae\xd1h\x0e3,\xb8\
+\x07R\x00\x19\xe6m\x97V\xe1x\x1ca\xcc\x84a\x10 &%\x92\x00&Qg\xaa2\xed\x15\
+\xba\xaesD\x8c\xda\x1d\xcb\xadD\x9d\x80\xd8\x15@\xee\xdafc\xedA\x1c\xae[F\\\
+\xf4\x0c\xc4\x17P\x8ec4Z\xdc5\x1a\xcd\xa1E\xb2\x16\xef\xd4ahE\x0e\x04bJZ\x91\
+\x92\x12\xc2\t5(H\x90"\x89\xda\xe5\xd99\xc7s\xbb\x07I\x99D\xb1\x14$J"\xcb\
+\xa9H\xc1\x1d\x8bl\xd4W\x92\xe8\x89ks\xdf\xa1*\xcb\x8035g\xb9\xe5\xfd\xec\
+\xddh\xb4\xb8k4\x9aCK\xd2\xb8\x07\x80@\x88\x18\x98\xda\x17%\xda5I\n(\x05\xa5\
+\x06\xa5(9\xe3I4}\xf4\x98iY\xea\x10)e\xd8\xea\x84\x9d&\xe3\xc4\xb4\\\x94\xc2\
+s\xcc\xc6\xdaJ\x14\xd6\xa7<tM\xda-\xa8GM\x7f\xfa\x00\x99\xed\xa0\xc5]\xa3\
+\xd1\x1cVD\xbc\xd9+\xa4\x87\x03\xcdv\xa4\x8e\xe9\x1d\x13\x80\x84\x10\xc3\x00\
+\x91\xc4\x9c%\xd3G\x8f\x1b\x86\xd1m\x81\xf3\xa8\x1dFaK\xa0i\x98\x065\x0c\x93\
+\xca\xcd\xb5\x87a\xa7^\xf6\xd12\xb6&\x0b\xaf\xb20\xb0\xb2\xc7\x0bDob\xd2h4\
+\x87\x13\x16\xdc\x03\x00\x02\xc0\x05\x0c\xca\x11\x86\x86w\x84\x83\rRX\x16\
+\x15I\xc8YR;~bK\xd9\x19\x8f\xda\x91\x94L\x10\x07\x91X\xb6E\x91\xb7\xd7\x1f\
+\x85\xed\xc7EWf\x95\x9dZ\x9e[Y\xd8\xafn\x8d\x8b\xb6\xdc5\x1a\xcd!D\x84k"n\
+\x00\x80\xc4\x81\xa9}\x11\x89+\x8d\x19\x90\xdcv,\x1e\xb58\x17\xb5\x13[\xf5\
+\x92$\x17Q\'\xe4\x8c\t0\xa4H<\xcf\xe3q;j\xae\xb5\xda\xf5\x92\x8f\xb6\xb1\xad\
+\xbd\xc2\xcc\xb9\\\x8a\xe0\x83\x80\x16w\x8dFs\xf8\xc0$\xb8\xaf^\r\xac\xc8\
+\x81\x88\xc4;\n\xd4pL\x83\x85\x81DR;q"\xfd+OX\x14F\x9cq\tF\xc2\x98\xefyq\xd4\
+\x8a\x9b\xab\xed\xce\x93\xb2\x0f\xd6ve\xb7\xbc\xaa]\x98\xd9\xf3\x0e\xed\x1e-\
+\xee\x1a\x8d\xe6\xb0\xc1\xdb\x8f%k\x11\x001\xc8lG\x94\xc4*\x12\xbbj\x1a4\xe9\
+lR\xcb\x99\xad\xd5\xd2\xbf\xb2(N\x92\x841.\x91r\xc1]\xc7\x8e;A\xd4\\M\xd8f\
+\xc5\x07s\xbb\xb2\x03!\xfe\xcc\xd9\xfd\xe8\xd2\xee\xd1\xe2\xae\xd1h\x0e\x17(\
+Ys\tz\xc9\x06\x06x\xdb\t!\xce\x11\x83\x1a,l\x18\xb6[\x99\xdd*\xcd\xc1\xe2\
+\xb8\xddj!1\x04\x12D\xe99\x16\x0b[\xed\xe0\x91\xe0\xc1\x94\x8b\x96Ap\xfb\xba\
+l6E\xf0AC\x8b\xbbF\xa39T\xb0\xd6\x03\x95\xdaW\x0c\xae\xc8!\xa9U1\xac2\x0f\
+\x03\xcb\xef&\x8dQ\x84\xadN\x12E\x02\r)%%\xd40\x08\x0b\x9b\x9b\xeb\x0fQ\xb6\
+\x8a\xde\x00e\'\x86\xe5UO\xee}\x87\x9e\x92\x03\xb7\x08\xa0\xd1h4O\rJ\xc6Z\
+\xdd\xd4\xbe\x8c\x0f8@"!N-\t\x9b\xceTiK\xd9\x11\x92(N\xa2\x88#\xe5\\\x98\x86\
+I@\xca\xa8\xf9\xa4\xbe\x1c%\xad)\x17\xfa\x95\x1d\x00\xfc\xea)j\xbc\x80*\x1cc\
+\xa2-w\x8dFsx`M\x95\xda\x97p\x81\x12\xf3f\xbbD\xe4\xe0\x13N\n\x95\x8a?\xd5s\
+\xa7 F\x9d(\x8a"\t\x06\xe7\xdc\xb6-\x94\\F\xcdf\xf0\xb0\x13\x87\xd3S\xc46\
+\xa1_\xd9\rg\xca)\x1d\xdb\x87\x1e=5Z\xdc5\x1a\xcd!\x01E\xc2\xdb\x0fa\xe0\xae\
+%\x02RB\x98\xa0\xe5NMM\xcf\xb8\x9e\xd7\xfd\x08B\xdc\xeeDq\xcc\x05\xe5\x82;\
+\xb6)\x05\xc3\xb8\xc9\xa2\x87\xed(\xf2l\xe2;\x03\x94\x1d\x00\n\xd3g\x0e`\xf8\
+c\x16-\xee\x1a\x8d\xe6\x90\xc0\x9a\xf7Q0 \xc0%l\xcb\x11F@H\x88\x12D\xe2NM\
+\xcfo)\xbb\xc4\xa8\xdd\x89\xe3X \x15R:\xb6\x89R\xc8\xb8)\xa2\xc7(#\xcb$S\xee\
+\x80\xfc\xc0\x00`\x17j\x96?\xbd/}zz\xb4\xb8k4\x9a\xc3\x80\xe4\x1d\xd6~\x04\
+\xa4/G\x18\x01! b\x88\x08\xb3\xf3\xe7\x0b\xa5nn/)e\xdcnG1\x13\x12\xa4\x94&\
+\x05\x14\x9c\x88\x90B\x13H\x87Ib\x19`\x1b\x83\xcf\xe5U\x0fD9\x8e\xd1\x1c\xe8\
+\x9f\x15\x1a\x8dF3&,\xb8\x07(\x00@\x08\xd8\xca\x11F\x80\x0b\x08\x19"\x82_\
+\x9c)\x94\xba+\xa8R\x88N#\x88b\xc1%A\xa0\x86\x01\x049\x05\xe6\x16\\\xc9\x1a\
+\x96I\x85\x04\xdb\x00c\x90@\x9an\xd9\xb4\x0fh\xf8c\x16-\xee\x1a\x8df\xe2\x91\
+I\x93w\xd6\x00\x08"p\xb9e\xb63\x0e\x11C@ \x94\x94k\xa7\xbb\x07\x0b\x19\xb5ZL\
+\x12\xc6%\x01B\x89$R\x10\x10\xa5\xe9\xe9\xa4\xb3\xea\x9a\x02\x11\x84\x04\xd7\
+\x1e\xe4mWI\xdb_h\xe5\xeb1\xd1\xe2\xae\xd1h&\x9e$\xb8\x07\x80\xa0r\x84\xf5\
+\xcc\xf6D@\xccQ\xe5\x0c\xf3\x8bs\xb6W\x04\x00\x14"l\xb5\xa3D&\x8c\x9b\x86A@\
+\x10\xc1\x00dy\xb6\xc6Y\x08q\xdd4H\x98\x80k\r\x16pg\xea\xc8\x81J\xda>\x02\
+\xeds\xd7h4\x93\x8d\x88\x9e\x88h\x1d\x00\x101M6\x90pHT-l\x02\x94\x9a\x95\xb9\
+3\x00 8\x0f\x9b-&\x80\t4\r\x03@\x12\xc9,\x8bLUg\x81\x90h\xfd7\xb6I\xd4_\x0b\
+\x8e\x9a,\xb6A\x0c\xdb\x9f>\xbd\xaf}{\x06\xb4\xb8k4\x9a\x89\x06\x93\xcd[\xea\
+\x95\xda\xb5\x84\x00Q\x02"\r\x97A\xa8\x1c9k\xda\xaeH\x92v\xab\x13s\x90B8\xb6\
+)\x04c\x9dV\xb5V\xb5\x0be\x00H6o\x99\x10\x02@\'F\xd7\x1a\x1c$3U\xfb\xad\x83\
+\x96\xb4}\x04Z\xdc5\x1a\xcdD\xc2\x19\x8f\x19B\xbcJX\x9b\x10\x83\x0b\x94\x12%\
+B\xc4@f\x02!-\xc7/V\x8fK\xa5\xec\x0c\xa5\x94\x96e\x08\xc1\x08\xebL\x1f\x99\
+\xb1\xbc"\x00H\xde\x11\xed\x87\x00 $\x18\x04\xe8 i\xb7\xbc\xaa]\x98\x1d\xf0\
+\x87\x83\x8a\x16w\x8dF3a b\xb0\xd9\xe0`ZT\xd2\xce\x12\x10\n\x00\xa2\xab\xec(\
+e\x9a*\x8c\xa0\x14\xb3\xc7\xcf\x8b8j\xb7\xa3\x98\xa1\x90\xc26\r\x94\x02X\xa7\
+R\x9b\xa5v\xb7\xfe5\x0f\xee!JBT\x0c\xe5\xa0=K\x07\xac\xf8\xf58\xe8\x05U\x8dF\
+3al\xae=\xd9\xac\xaf9&\xf5\xc8:\x91!\x01"\x042\x0ea\x92Uv@)\xa6\xcaG\x08\x90\
+\xa0\x19\xc6\x1c\x84\x94\x8ee"J"\xc2J\xad\x96*\xbb\x887\xd3"\xda\x88\x83\xd7\
+Q\xdd\xd2q\xd3)\xeeS\xf7\x9e\x13Z\xdc5\x1a\xcd\x84\xd1i\xb7\x81K\x8c[\xbc\
+\xfd\x08\x80"@\xccPmS\xca(;\x1a\xa6\xe5\x17\xe7\xda\x11p\x01(\xa5cQ)\xb9\x88\
+\x9a\x95\xd9Y\xc3\xf6z\x8d!k\xdc\x01\x00B@\xe2\xc0,\x92\x07=\xfb\xe30\xb4\
+\xb8k4\x9a\t\xc3/\x95\xc04\x93\xe6}\x14\x11\xa1$f\xd8Ir\xca.M\xd3\xa8\xce\
+\x9dK\x84\xc3\x18\x07\x00\xdb\xa2\x823L\xc2\xea\xdc\x1c\xb5\xdc\xb4)\xdeY\
+\x95I\x13\x00\x10\x81\xf1A\x0e\x19\x00\xbfz\xf2 g\x7f\x1c\x86\xf6\xb9k4\x9a\
+\t\xa3\\.\xf1\xce\xa6-\xdb\x00THhG\x98u\xa7\xa0\x94\x96\xe5\x94f\xcf&\xd2\
+\xe7\\PJL\x83\xf0$F\x11\xcf\x1c\xd9\xa6\xec(9\x0b\xee\x01 !\x84\t\x14r@\x90\
+\x8ca\x17\x9c\xd2\xf1}\xea\xd8sE\x8b\xbbF\xa3\x990\xa8a\x14\xbdX\x84\x00\x04\
+\xc2H\n\x89Ye\xb7\x1d\xbf<{\xb6\xc3,\x004\x0cJ\x08J\x96\xa0d3G\x8f\xe4\x02\
+\x19yk\x19y\x08*\x15\xf0\x10\xb3\xbd0s\xf6\x80g\x7f\x1c\x86\x16w\x8dF3a\xc8\
+\xa4)\xc2:\x01\xc29F\xc96ew\xbdbq\xfaL\xc4\x0c)\xa4e\x99\x94"\x8f"\xd3\xc0Rm\
+\x8e\x9a\xdb\\+(b\xd6ZQ\xaf\xb9\xd8\x9eE\xb2\x87U\x98=\xf8\xd9\x1f\x87\xa1\
+\xc5]\xa3\xd1L\x18I\xe3.\xa0\x04\x02\x9d\x18\xa5\x94\x00@\x08E\x94\xae_\xf6\
+\xcb\';\x89!\xa54\r\n x\x18\x19&\x94ks\x84\xe6\xb5.i\xdc\x01\xc9\x01\x00\x11\
+\x06\x9b\xed\x84\x16&g?j?Z\xdc5\x1a\xcd$!\xa2\r\x11\xad\x03\x81\x84c\xc2\xc1\
+v\xa7\x00\x80\xb3\xd0\xf7g\xbc\xd2+\x9d\x98 \n\xdb\xb6\x00%\x8f:\x8ek\x17\
+\xa7g\t\xcd\xfbUd\xd2\x14\xe1\xaaz\xcd\x04\x0c(\xa2\r\xe0\x95\xe7\r\xbb\xb0\
+\xe7\xfd\xd93\xb4\xb8k4\x9aI\x82\xb7\x1f\x01\x00 rt\xe7N~\xc5\xf1K\x92\x85I\
+\xd8N\x18\xed\xc4\x84\x80\xb4\x1d\x0b\xa5\xe0a\xc7\x9br\x0b\x95\x192(p=i\xdc\
+V)\x1f\xa5\x844\x1dM\x16b:^ea\xaf\xfb\xb2\xa7L\xe4B\x81F\xa3y9A\x1e\xf1h\x03\
+\x080A\x98\xa8\x18v\x89\x10\x8a`p\xe9\xc6\xdc\x00\x90\x06E\x94\x82\x85-\xbf\
+\xe8OU\x07+\xbb\x08\xd7d\xdcP\xc6:\x13\x03\x8b\xe8\x81_=E\x0ck\x8f{\xb3\xb7h\
+\xcb]\xa3\xd1L\x0cIp\x1f$C\xc0(1\x98$Rpi\xd8\x8c\xa1@b\x9a\x00\x12\x11\x08o7\
+\xa7\xa6+~qhb^\xd6\\\x02\xe8\xd6\xf1\x18\x18\xfeh\xba%\xb7xt\x0f\xbb\xb1/hq\
+\xd7h4\x93\x81d-\xdey\x0c\x04\x92\x04b.\t\x91,a\x89 I$\x01\x89I a\x8c \xab\
+\x1e\x99\xb1\xdc\xa1\x95\x92d\xd2\x94\xac\x05#\xd6Q\x01\xfc\xe9\xc9(\xc71\
+\x1a-\xee\x1a\x8df2H\x82\xfb\x80\x12\x01:\t\xa2\x04\xbb\xe8%\x9c#\x17\x02%\
+\x01\x90\xd4\xa0\x14*\xd3\xb3\x86\xe3\x8fj\xa4qG\x95\xf3\xe0\x1c\x07\x86?:\
+\xc5#\x96W\xd9\xbb^\xec\x1bZ\xdc5\x1a\xcd\x04 \xe2@t\xd6\x80@\x9c \x17(\xc1n\
+\xb7\xc28f\x00@\t\x01\x00B\r@Q\x99\x9d\x19\xd5H\xb8&\x93\xcd\x01E\xb4{\x10jz\
+\xd5\t\x0e\x7f\xcc\xa2\xc5]\xa3\xd1L\x00,\xb8\x87\x80\x04\x81\x0bp-`\xe8D\
+\x9cp\xc6\x00\x08\x00\x02\x02\x02 "\x8f\xda\x865$\x0f\x0c\x8a$\xb8\x03\x00\
+\x04 \xe1\x88\x83\xccv\xb7\xb2`d\xf2\x13L4Z\xdc5\x1a\xcdA\x87\x87Ox\xb4NT1\r\
+\n\x14\x88A\x84\xb4\x1c\xc1\x85Rv\x00D$\xa6IL\xc7\x1b\xdaH\xfb\xa1J6 \x86\
+\x84?R\xcb\xf3\xca\'\xf6\xb0\x1b\xfb\x8b\x16w\x8dFs\xc0A\x16\xdc\x07\x00\x04\
+\x10\x12\x01\x00\x81P\xec\x14\xdd\x16\xf7\xa7\xe3XJ)\x00\xc0\xa0dv\xa6l\xd8\
+\x83\xedn\x14I7H\x06\x80q\x1c\xb8k\xc9\x9f>\xdd\xbf\x91ur9<=\xd1h4\x87\x12\
+\xdeY\x15I\xa0\xcc\xf64r\x11\x81@\xb4\xe6\xb8\xb1\xed\x14,\xff\x88a\x9a\x96\
+\xed\x1a\xe6\xd0\xc4\xbc\xac\xb9\x84\x92\x01\x00"\xc8AI\xdbM\xaf\xe2L\xcd\
+\xedY\'^\x00Z\xdc5\x1a\xcd\xc1\x05Q$=\xb3=\xbb\x04J\x00\x00\x08\x0b\x9b\x86\
+\xc5\nG\xbf2\xc8\x10O\x9b\x10\xc8\x1a\xbc\xf5@\x1d2\xd8l\'\xa40s\xf6\xf9_\
+\xfd\x0bE\x8b\xbbF\xa39\xb8\xf0\xf6c\xc9:\x04\x80\xcb\x01\x89\x1bI\xb7\xb4\
+\xe9 e\x97\x11\xf0\x16\xf2f\x126d\xd2V\x95Q\xa5\xc4\x81\xdev\xa7xl\xe2\xaa\
+\xe8\xed\x88\x16w\x8dFs@A\xc9\x93`\t\x94\xb7}P\xe4\xa2\xe1\x96\x9d\xa9#\x99\
+\x0f\x08\x90!\xf0\xa6H\x828lFa\x12\xc7\x9c\x0bY\x9d"\x94\x12\xc0\xc1f;1,\x7f\
+\xfa\xd4^\xf6\xe3\xc5\xa0\xc5]\xa3\xd1\x1cPXk\x05ED\x86\xe5[\'\xa4X{\x15\x00\
+@\xc6 \xdb\x984X\xdc\x8a:\xed8\xe6I"\xb8\x90\x88\x80\x00\x96A(%\x00\xc0\xe5\
+\xe0ZK^\xe5\x95I\xac\xa2\xb7#Z\xdc5\x1a\xcdA\x04\x05c\xcd\x07\xa0\xf2\x04\
+\xc8\x01f\xbb\xedM\x89$\x88\x9bK \xdaQ\x98\xc4\t\xe7L\xaap\x1a @\x00(\x05&\
+\xc04\t\x81\xee\xae\xa5AU\xf4|\xf7\x10\x85?f\xd1\xe2\xae\xd1h\x0e"I\xe3\x0e\
+\xca\x04\x00\x98\xec\xdbpD\x80\x0bx\xfc\xa8\x15/\xfd\xa6\xe2\x83AQ\xca\xae\
+\xa0g+\xe2I\x04!\xc11\x11\x10"\x06q\x02\x84\x82A\x00\x00\x10\x81R \x84\x16f_\
+\x9d\xd0*z;\xa2\xc5]\xa3\xd1\x1c8D\xdc`\xedG\x00 %H\xd1\xe7%\x07Xo\xe1Z\x83\
+\xcf\x96\xa8A\t\xe26MOw5%\x82X\x16\xf5|\xdb4\r\xb4\x90\x18\xdc\xa0@\xa4P\xda\
+\x1e3\x191R\xb1&\xb8\x1c\xc7h\xb4\xb8k4\x9a\x83\x06&\x8d\xbb\xdd\xf4^"\xbf\
+\x04J\x08D\x0c6[\xd2wh\xc1%\x08\x90\x86\xbe#\x02\x00\x12J-\xd3p\x1c\xd3\xb6\
+\r\xc7\xa2\x04E\x1c1\xce\x05H\xc9\x19"\x10B\xc00\xa4c\x92\xa0\xc3\x19\x8bGD\
+\xc7O4Z\xdc5\x1a\xcd\x81A4A6y\xb8!\xa2M  \x06\x85?\x02\xc0zS\n\t\xd3\x1e\xa1\
+\x04$ve\xdd0\xa9\xe3\x98\x8em\xda\xb6a\x10\x94R\xf0$\xe9DBH\x04D \x04\x89\
+\x8d\x04(2@\xc98\x98\x14\x0b.\x11,\x06\xef\xb0\x05A*\xb4\xb8k4\x9a\x03\x80dl\
+\xe3\xd7\xedN\x10\'hSn\x99\x04p@\xf8#!\xd0\x89\xb1\xd1A\xdf%\xae\rB\x80D\xb0\
+mZ\xa9\xf8\xb6I@J\xcey\x12&\x82\x0b)\xd5\x07\x80\x00Jb\x81?o8\x15!\x90b\x88\
+\xed;D&\x02\x89A\x80\xb3x\xff\xfb\xba?hq\xd7h4/\x1cl\xd5\xafonlp\x8e\x08\xe0\
+L\xd1\xc1\xbb\x96\x08\x00\xc0z\x0b\x01`\xca!\x84\x10\xcb&\x96A,\x93"\x8b\xdb\
+\x1de\xa4\xf7v\xafn}\x92\xb4\xa2\x82L\x98a\xac\x11B$\x12\x0b=\xcfL\xd4\x91<\
+\t\xf7\xb3\x9f\xfb\x89\x16w\x8dF\xf3\x82I\xc2\xc6\xe6\xc6\x86\xb2\xd3)%\xa6\
+\x01\x88 T\x06\x98^p\x8b\x94 $\nI\n.\x9d-\x13\xc7\xa2\x94\x02A\x94\x88\x82s\
+\xce\xba\xd12\xfdN\x1c\x04\xf0\xa7\xdcvL9\xe7\x00\x08\xc4\xf0lC\xfd\x89\x02p\
+\x16\xedcG\xf7\x15-\xee\x1a\x8d\xe6\x05\xc3\x92D\xc52r\x01\xbe\x05\x04\x80KD\
+\x04\x89 \x04\x08\t\x08@\x081\rb\xdbd\x8a\x02"J)$\x07\xe5\xb5!0\xba(\x1e\xda\
+$\xb0\xcas1/H\x89\x16IL\xdeB\x01\x00@9\x1e!C\x00\x00\x0c\x95IDAT\x08H\x1e#\
+\xe2\xc0:\xda\x93\x8e\x16w\x8dF\xf3\x82\xb1\xdd"\x10\x82\x12\xb9@\xc7$\xc40\
+\x12\x86Q\xc2\t!\x06%\xb6E\x0c\n\x84 J@)\xb9\x04\xe8\x19\xe8\xe3H2\x01"\x92\
+\x0e\x15K\x9e\xe5\x02\x10\xe4\x91\x14<\xfd(\x8a\x04Q\x12b\xecU\xdf^\x1c\x873\
+z\xff%!\x08\x82\xa5\xe5\x95 \x08\xc6? \x8e\xe3\xfe\x8f,-\xaf\xac\xd6\xeb{x\
+\xa1\xbbg\xb5^\xdf\xedU-^\xbf1b(F\x7f\xe4\xea\x17\xd7vw}\xcf\xe3\xec\x07\x87\
+ \x08\x16\xaf\xdfx\x81\x17`9\x9e\xed\xcf\x10Bff\n\xe5\xd9\xb2](x\xae\xe9\xd9\
+\xd4w\x88c\x01%\x12\xa5\x14\x02\x11\xbbq\x8f\xbb5\xb3\t!RJ\x1e\xb5y\xdc\x12B\
+lk\x00\x85\x8a\xa0<|h\xcb}"\x89\xe3\xf8\xc3\x8f>v\x1cgn\xaev\xf3\xe6\xad \
+\x08\xbe\xfd\xad?v\x1c\'{\xcc\xe2\xf5\x1b?\xfb\xe4\xd3\x85\xf9\x13\xab\xf5\
+\xb57/_\xba\xfc\xc6\xa5 \x08~\xfc\xee{s\xb5\xd9\xd5\xfa\xda7\xbe\xfe\xb5sg\
+\xcf\x00\xc0_\xbe\xfb\x1e\x00Dq|\xee\xec\x99\xaf\xbe\xfd\x16\x00\xfc\xd9\x9f\
+\xffE\xda\xc8\xf7\xde\xf9\xee\xc2|~sv\x10\x04?\xf8\xe1\x8f\x06\xfe\xa9\x9f\
+\x9b\xb7n_\xbdz\xed\xdf\xfe\xe9\xf7\xc7\xec\xdaj\xbd\xfe\xe1G?u\x1d\xc7q\xec\
+8N\xa28\xfe\x93w\xbeS*\x95\xb2\xc7\xfc\xe5\xbb\xef]\xbe|I]\xff\xd6\x89n\xde*\
+\x95J\xb9#G_v\xfa\x91\xcf\xae|~\xf9\x8dK\xd9\x83\xd3Ap\x1cG\x8d\xde\xe8\x8e\
+\xecx\xf6a\xf4\x9fh\xb7-<;\x8d\xa0y\xf3\xe6\xad\x8b\x17\xce\xef\xff\xa9S\xaa\
+\xd33\t}bZ\xb2\x13\xb49\xe3\x88H\x00P\x02\xf6<.\xcf\xe87!0\xd8wc\x98\xc6h\
+\x9f\xce\xe4\xa2\xc5}\xf2P\xca~\xf9\xf2\x1b\xf5z}iiyaa\xfe\xe2\xc5\xf3\x1f~\
+\xf4qN\xdf\x97\x96\x96\xbf\xfd\xad?>w\xf6\x8c\xd2\xf4\xcbo\\\xfar\xf1\x86\
+\x92\x8f\xa5\xe5\x95+W>?w\xf6\xcc\xcd[\xb7\x1d\xc7\xfe\xde;\xdf\x8d\xe3\xf8\
+\x07?\xfc\xd1\x9b\x97/\xa9\x16\xfe\xeb\x7f\xf9\xcf#.\xe0\x97W\xaf\x95J\xa5\
+\xc5\xc5\xeb#\xc4\xfd\xfd\x0f\xfe\xea{\xef|\x17\x00\xc6\x99\x00R\x82 x\xff\
+\x83\x9f\xa4\x13\x0f\x00,-\xaf\xf4+\xe6\xe5\xcb\x97v\xd5\xec\xf8\x97\x9dE\rB\
+\x10\x04\xff\xe3\x83\x9f\x9c;{\xe6)\xce\x98\x0e\xc2\xaeN\xf4\x143\xc4\xa4\
+\x83<L\x1aw\x12\x86q\x1c\x01\x00!\x80\xd4\x91H(&\x04\xe43\x0b\xfb\xf0\xf3\
+\x02\x98\x86A\x0fi\xfa\x81\xc3\xd9\xab\xc3\xcd\xe2\xf5\x1b\x0b\x0b\xf3KK\xcb\
+\x8dFp\xf9\xf2\x1b\x8dF\xb0\xbc\xbcr\xee\xdc\xd9\xdc/k\xa5\xec\xd9wn\xde\xba\
+\xad\xdeY\x98?\x11\xc5q\x10\x04KK\xcb\xe7\xce\x9d\x05\x00\xc7q\x94\xd6\xab#W\
+\xeb\xf5aN\x06\xe5\xd8\xf9\x93w\xbes\xf3\xd6\xed\xec1K\xcb+W\xbf\xb8\xb6x\
+\xfd\x86:@\xfdO\x1dP*\x15\xd5\x9b\xd9\x83\xe38V\x97t\xf5\x8bk\xe9\x9f\xd4\
+\x15f/;\x95TuIW\xbf\xb8\x16\x04A\xa9\xb4\xb5\xebd\xf1\xfa\x8dl\x0b\xc3\x18v\
+\xd9;R*\x95\\\xc7i\x04M\xd5\x91\\g\x83 H[\x8b\xe3\xf8\xea\x17\xd7\xae~q-\x8e\
+\xe3\xfeAP=MGx\xf4\x89\xe28V\xfdJ\x1b_\xad\xd7\xd3\xe1M\xc7*\xdb\xf1t|\x94G+\
+m6\x1d\xea\xb4\x85\xf4O\xeaxu\xc1\xe3\x0f\xc8^\xd0\xdax\x10E\t \x10B\x10\x88\
+\xb0\x8f\x91\xd2W\xd4\xff\xc0,\xe1\xde\xb9M\x10\x00\xb9T\xab\xab\x87\x0e-\
+\xee\x93\xc7\xd2\xd2\xb2\xf2\x12|\xe3\xeb_[\x98?\xf1\xd5\xb7\xdf\x9a\x9f?q\
+\xf1\xc2\xf9\xa5\xa5\xe5\x81\xc7\xff\xec\x93O\xdf\xbc|\t\x00\x82 H\xad\xc2r\
+\xa9\xd8\x08\x9a\xdb\xde)\x97\xd4C\xee8\xce\x95+\x9f\xff\x8f\x0f~\xf2\xfe\
+\x07\x7f\xd5\xdf\xda\xe2\xf5\x1b\x0b\xf3\'J\xa5\xd2\xc5\x0b\xe7\xbf\\\xec*\
+\xc5\xcd[\xb7\xaf\\\xf9\\]\xdb\xe2\xf5\x1bW\xaf~\x01\x00W\xaf~\xb1\xb4\xbc\
+\xb2Z_\xbbr\xe5s\xc7q~\xf6\xc9\xa7Jt\x82 \xf8\xd9\'\x9f:\x8e\xf3\xd9\x95\xcf\
+o\xde\xbc\xa5\x8eT^o\xf5CD\xb5\x99J\x8f\xfa\x94\xba\xa4(\x8a\xd5\xeb\xd5\xfa\
+\x1a\x00d[P\xef\x0cc\xe0e\x8fF\x9d\xfd\xc3\x8f>\x06\x00\xe5\xddR}T\xfe.\x00X\
+]\xad\xff\xf8\xdd\xf7R\xbd\xfe\xec\xca\xe7\xea\xcd\x0f?\xfa\xb8\x11\x04\xd9A\
+XZ^\xb9z\xf5\x1a\x00,.^\xef\x9fZr\'\x02\x80\xf7?\xf8I\xa3\x11\x00\xc0\x87\
+\x1f\xfdT\xa9\xf3\x87\x1f\xfdT\x8d\x8f\x1a\x8d\xfe\xa1K\xc7\xc7\x1d4\xd47o\
+\xdd\xfe\xe4\x93\x9f\xa7\x97\x07\xbd\x1f\nQ\x14GQ\xac\xae\xfc\x05\x92$I\xcf\
+\xf9\x82\x89\xf0\x1b\x01\t\xeak\x9d\xf5\'\xcd\x8dV\xd0\xf1\x01\x9e\xd3j\'J\
+\xec"\xb7\xde\x13L\xb0\xe4\xf9\xb4\x7f\xc0\xd0n\x99\t&\x8e\xe3\x9c\x9f\xbd\
+\x1f%C\xbb\xf2\xe4\xfe\xc7\xff\xf0\xef\x1d\xc7\x89\xe3\xf8\xfd\x0f~\x92\x1a\
+\xfb)_.\xde\xf8\xf6\xb7\xbe\t\x00\x17/\x9e\x7f\xff\x83\x9f(O\xce\xd5\xab\xd7\
+\xbe\xfd\xado\xa6\xf3\xc4\xe57.\xfd\xd9\x9f\xff\x85\xf2H\xa4V\xe4\xeb\x17\
+\xcf\xdf\xbcyka\xfe\xc4\x97\x8b7^\xbfx>\x8ec5?\x01@\xd6\xeb\x9d\xeb\x91\x9a\
+\xb1\x94\xe4\xbdy\xf9R\xd6/\xacZ\xf8\x8f\xff\xe1\xdf\xab3\xfe\xe0\x87?\x1a\
+\xd1\xa9\x81\x97\xbd\xe3P\xdc\xbcy\xbbT*~\xef\x9d\xefd\xdf\xfc\xe5\xd5k\xfd\
+\xcb\x00\x00\xf0\xd5\xb7\xdfRc\xf5g\x7f\xfe\x17\xdf\xab\xd5\xbe\xf7\xcew\xd3\
+A\xb8\xfa\xc55\xc7\xb1\xe7\xe7O\x0c\xfb"\xb2\'\xbay\xebv\xa9TL\'\xb9\x9b7o9\
+\x8e\xadFI}|\xd8\xd0\xa5\xe3\x93\x1bj\x00\xb8z\xf5\xda\xe5\xcb\x97\x1c\xc7\
+\xa9\xd5j?\xfb\xe4\xd3 \x08\x94\x8fN\x1d_.\x97\xd4T\xf1\xa2\xb0\xdcR\x14>6\
+\x08\x00\x82a\x19\x96i\x0b\xc6\x04\x17@\x88k\x1b\x94R\x94\xe2Y\x9d3\x84\x80{\
+\x94\xdaU!\xa4!60\xea\x9a\x02\x04P\x8a\x04\xc0\x7f\x0e\xdd8`hq\x9f<\x16\x16\
+\xe6\x17\xaf\xdfx\xfd\xe2\xf9\xcf\xae|~\xee\xdc\xd9\x9b7o\x95\xcb\xa5z}-\x95\
+\x83\x94\x9f}\xf2i\xbd\xbe\x96jS\xa9TJM\xf5F\xd0,\x97\x8a\xea\x1d\x80\x13\
+\x00\xd0h\x04ss5\xe8\xc9\xab\xe38\xe7\xce\x9d\xc9\x99\x99\xca\x11\xa1\xd6`\
+\x157o\xdd\xbex\xe1\xfcj\xbd\xbe\xa3\xa7\xf8\xe2\x85\xf3\xff\xed\xbf\xff\xbf\
+_}\xfb\xad\xc5\xeb7\xfe\xdd\x9f~\x7f\xb5\xbe\x16\xc7\xb12o\x01\xa0\\*\xaa\
+\xae)U\x82\x8c\x96\xa5\xe4N\xb1Z_+g\xfc3\xd9\xd79\x86]\xf6\xe8\x0b\xbe\xfc\
+\xc6\xa5sg\xcf\xfc\xf8\xdd\xf7r\x93h\xee\xe7N\xfa\xfe\x88\xd9B\x9dKY\xdf\xfd\
+\x13C\xeeDA\x10\xac\xd6\xd7\xe2\xde\xc8\xd4j\xb5\xb9Z\xed\xcd\xcb\x97\xae^\
+\xbd\xf6\xb3O>\xfd\xc6\xd7\xbf\xa6\xa6\xde\xdc\xd0Af|rC\r\x00\xab\xf5\xfa\
+\xe2\xe2\xf5\xf4\xf8(\x8e\xeb\xf5zz\xc3\xbcp/\xbf_\x9am\xaf\xdf6\xa8\x00$&\
+\xb6\xca\x05\xcf\xf6J\\\x00rN\x92u\x1e\xb3gv\xbbc;\x9e\x92\xd27\x19\xa7\x94\
+\xc6\xa2l\x88\xb6mt\xd4\xc6\'\x9e\x84\x8e_y>=9Hhq\x9f<.^8\xff\xe1G\x1f\xbf\
+\xfd\xf6[\x00\xb0\xb8x}n\xae6?\x7f\xe2\x93O~\x9e30\x95\xcd\x9e\x8d\xeeP^u\
+\xb5\xa0\xea:N\xa9TZX\x98_\\\xbc~\xf1B\xd7\x8e\xfe\xea\xdbo--\xaf\xd4\xebu\
+\xa5\xaaKK\xcb\x17/^\xc8\xb6\xb9\xb8x\xe3\x1b_\xffZ*\x8b\x8b\xd7o\xfc\xf2\
+\xea\xb5\x8b\x17\xce\x9f;{fiyea\xfeD\xea\xd8\xe9\xbfl\xc7q\xd4\x95+\xf7H\xa9\
+Tr\x1cG-\x02\xc7q\xdc\x08\x02u\x85?~\xf7\xbdr9/\xeb\x03Y\x98?\xf1\xb3O>U\x82\
+\x18\xc7q\xea\x96\xb9y\xeb\xf6\xc2\xfc\x89\xec5\x0c\xbb\xec\x1dOQ*\x95\xde\
+\xbc|\xe9\xb3+\x9f\x7f\xfb[\x7f\x9c\x1d\xc6\xab_\\S\xd1G\xa9i\xbc#\x17/\x9c\
+\xbf\xfc\xc6\xa5\xcf\xae|\xae\xbe\x82\x11\'\x9a\x9f?\xb1\xb4\xb4\xacL\xfe\
+\xd5z\xbd\\*\xa9\xce^\xbcp\xfe\xe6\xad\xdb\x8b\x8b\xd7\xbf\xf7\xcew\xfb\x87.\
+Kn\xa8\xd55_\xbcxA\xcd\x9aK\xcb+s\xb5\xda\xc2\xc2|\xbd^W\xef\xd4{!\xa7*\xf6t\
+\xaeV\x1b\xa7G\xcf\x11\xd3r\xbc\xca\xc9\xa4q\xdbP\x9bN\xdb\x8fY\xb2I\rCr&\
+\xf8\xb3+;\x00\x10\xc7+4;1\x8b%\x01D4\xa6\x1c\x97\x90\x0e\xaa\x94b\xf4\x10\
+\x06\xb9\x83\x16\xf7ID=\xd8\x1f~\xf4q\xa9T\x9a\x9b\xab5\x1a\xc1\xd2\xd2\xf2\
+\xb7\xbf\xf5\xcd\xfeP\xc8\xf4\xbf\x00\xf0_\xff\xcb\x7f~\xfd\xe2\xf9\x1f\xbf\
+\xfb\xde\xd2\xd2\xb2\n\x85\x04\xa5SW\xaf\xfd\xe5\xbb\xefEq|\xf1\xc2y\xc7q\
+\xca\xa5\xe2\x87\x1f}\xbc\xb4\xb4\x1c\xc7I\xad6\x9b\xf5\xc9,-\xaf4\x82 \xfb\
+\xce\xb9\xb3g>\xbb\xf2\xf9\xd2\xf2\xca\xe5\xcb\x97\xde\xff\xe0\'s\xb5\xd9F\
+\xd0|\xfd\xe2\xf9\xcbo\\\x9a\xab\xd5\xfe\xf2\xdd\xf7.^<\x9f\xb5\n\xcf\x9d;\
+\xfb\xfe\x07\x7f\x95\n\xe5\x9b\x97/\xfd\xe0\x87?R\x9fz\xf3\xf2\xa5\xb9Z\xadT\
+*}\xef\x9d\xef|\xf8\xd1Oo\xde\xbc\xad|\x11K\xcb+\xeaR\x07\x92m!\xed\xbe\xf2n\
+g\xe3m\x86]\xf68\xa3\xad|\xf4\xd9\x83\xbf\xf1\xf5\xaf}\xf8\xd1\xc7\x9f]\xf9\
+\xbcT*\xcd\xd5fG|6\x1d\x848\x8e\xbf\\\xbc\xa1\xd69\xfed\xfb\x1c\xdc\x7f"\xa5\
+\xc8?\xf8\xe1\x8f\xd4\xf1\xdf\xfe\xd67\xe38\xf9\xf0\xa3\x8fU7U\xb8j\xff\xd0\
+\xe5Z\xcb\ru\xfa\x05\xa9\xafUM\x15\xef\x7f\xf0\x93\x9b7\xbb\x0b\x06j\xb4\xd5\
+?\xf7_\xdc\x01\xa0<\xbb\xb0\xcec\xd6zhRI\x80\x08\x16\x0b\x06\x00*t\x06\x80\
+\x00<\xc3\xaa*"\xdaf\xa7\\\x9d\x8b\x12@D\x8b0\x07C\xb5\x8c*\xc1:\x94f;\x00\
+\x90=\\\x89\xd6\xec1A\x10\xa4\xde\x951?\xa2,\xdc\xdcG\x96\x96W\x1c\xc7N\x1fi\
+uL\xf6\x9d\xa7hy\xe0\x89\xc6\xbc\x1e\x00X\xad\xd7\xe38\x19\xe7\x1a\xd4 \xcc\
+\xd5f\xc7\xf1\xa1?w>\xbb\xf2y\xb9\\\x1a\xf6# \xdb;\xd5\xa3\xf1\xaf3\xd7\xaf\
+\xfe\xefz\xcc\x11\xce\x92\xfb\xa2\x07\xbe\xf3bI\xa2v\xd4\xd9\x14I\x07\x90\
+\x0b\x16#\n\x90\x1c@J!\x08H\x00\x15\xf7\x8e\x84\x0c4\xe6I\xf7?\x83$\r\x11\r\
+\xdb\xa5\xd6\x94\x94\x88\xac\x89"\x01 B\x82?\xfb\xdaT\xf5\xd8\xde\xf6\xea\
+\x05\xa1\xc5]\xa3\xd9\x1d\x1f~\xf4\xf1\xdc\\\xadV\xab\x05A\xf0\xcb\xab\xd7\
+\xfe\xdd\x9f~\xff\x85\xcc+/\x0b\x88\x88R\x08\xc6;u\xd1y\xd0\x8cK,a\\JJ\x90\
+\x82\x04\x82\x04$\x01iP\xa4\xc0)\x05\x89\x06!j\xdf\xa9\xe85\xd0\xdd\xa5D\x89\
+\xf2\xc2\x00\x00\x91H\x90:\xfe\xf4\xe9\xa9\xca\xd1\x17\xd8\xb9=E\x8b\xbbF\
+\xb3;V\xeb\xf5\xc5\xc5\x1bjY\xf5\xcd\xcb\x97^\xf8j\xe4KB\x12\xdc\x83x\x15\
+\xcc\xb9\xb5\r\x16q0(\x11\xbd\x80F\x02x\xa4j\xc4\xf1F\xc1\xe2\xb2p\x86\x85\r\
+\x16\xae\xf3\xa4\x8d\x08\x94\x80\xef\x10\x04\x90f\x95\x83KP\x10\x02\x12\xa8\
+\xed\x95\xfd\xe2\x0c5\xac\x17\xda\xa7\xbdE\x8b\xbbF\xa3\x99\x00\x82\xd5\xdf\
+\xd8\xfc\x91\xe3\xd5\x82\xd0F\x80v\x84\x11CB\x08"\x9a\x94\x1c\x9f6\x9el\xd6}\
+\xb3#\x91\xf2^\x89\x0f\x04\x98r\xc0\xf3\x08 \x80Y\x86\xca\xef\xbe\xd8.\xec3z\
+\x13\x93F\xa3\x99\x00\x92$\x8e\x99\x94l\xdd\xb7y\xb9`Z\x96i\x1a\xc4\xa0\xe0\
+\xd9\xb4\\0\x92\x84I\x115C\xcc*\xbbA\xc0\xb5\tH\x00\x04`\r\xe8\xdcy\xb1]\xd8\
+gt\xb4\x8cF\xa3\x99\x00\x04g\xad\x0e\x98\x94!\xac\xb5\xa2J\xb9P\xf2,\x94(M\
+\x83\x08\x166\xdb\x1bR\nD\xb2UM\x1b\xc1u\x80\xd0\xcc\xfaj{\x19\xac\x19\xb0^\
+\x167\x9av\xcbh4\x9a\x03\nJ\x86\xac\x83\xbcIy\xe3\xd1\xea\x93(\x91&\x05\xdf\
+\x81\x84#\x80I\xa8\t\x84\xa0\xe4Rp\x00D$\x12\xc1w\x08\xf4\xcc\xf6\xeaT_\x11\
+\x0e\xc3\x87\xea\x1bp\x18\xb3\xb7\xf7\xa3-w\x8dFs\x80@\xc9\x90wd\xdc\x90I\
+\xd0\x8dY$\x80\x08B\xa0\x12\xea0\x01\x93\x12\x00\x0e\x92\x03\x00\x010\r\x02@\
+\x12\xbe\x95\xbb\x17\x11\xbc\x9c\xd9\xae\x10\x1dh\xdf\x85\xa9\xb3\xfb\xda\
+\xa5\x17\x84\x16w\x8dF\xf3BA\x81\x92#\xef\xc8\xa4!\x93&\xb2\x16J\xd6U\xe5\
+\x9e4K\xb9\x15\xd1\xa8\n\xa5\x1a\x84\xa4\xd1\xee\xb2{\x00RJ\x08\x01)\xc1\xa4\
+\xe0\xdad\xf0\xbe\xa7\xf0\x01x\xc7\xc08\x84\xc9drhq\xd7h4\xfb\x8eL\x80\xb7\
+\x91\x05<jH\x1e\x82d\xd9L\x8d9\x08\x80D\x90\x98\xf9w\x06\x04\x00\x04\x95H\
+\x80\xf6v0\x15\xdcAf{\xfa\x89\xe6o\xa0\xfc;pH\xd3\xb8\xa7\xfc\x1f\x1b\x081\
+\x83\xa9\x05{\xd0\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getIDESplashBitmap():
+    return BitmapFromImage(getIDESplashImage())
+
+def getIDESplashImage():
+    stream = cStringIO.StringIO(getIDESplashData())
+    return ImageFromStream(stream)
+    
+
 #----------------------------------------------------------------------
 def getActiveGridData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
-\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x01\xe9IDAT8\x8d\xc5\x93\xbfkSq\x14\xc5?\xf7\xfb}\xf1\xe5%1\xadVm1\xa5Z\
-\x7f\x81%\xa8\x88\xc5\x0e\xba\x89?\xb6n\x82[\x07\'E\x07\xb1\xff\x808(\xe8\
-\xea`\x11ADpPp\x10\xa5(\x08..b\xb0C\xd5\x8a6\xadF\xb4\xe5\xd54\xef%/y\xef}\
-\x1dl,-\xa9\x0e\x1d<\xeb\xbd\xe7\xdc\xc3\xbd\xe7\x8a(\xcdj\xa0V\xc5\x06\xc4\
-\xf7}\xa3\xf5\xbf]X\x96"6B\x14C\xd0\x88\x98\xf8:GWVai\xad\x11\x11\x94j\x9a1\
-\x08B%hPr\x03\x9c\x84\xe2\xc1\xab\x12\x9f\xbey\xf4v\xa5\xf8X\xaa\x90\xb65CGz\
-\xc9$\x05KD(\xfe\xf0\x19\x9b\x9eg|\xb2\xcc\xf1\x03\x9d\x9c\xb9Q\xa0\xf0\xa5B\
-\xe8\x06\\?\xbf\x8f\xab\x0f?\x90\xeb\xb0\xc9o\xc9p\xfa\xe86\xf2=Y\xe2\xd8\
-\xe0y\x1e\x96\xd6\x8a\x9b\xcf\x8a\\\xb9;\x0e\xc0\xcb\t\x97\x83;\xdaI\xa7,f\
-\xe6\xeb\x94\xfd\x90\xdd\xb9\x14\xd7\x86\xf6\x90\xefi\x03 \x8ebXpm\x85a\xc4\
-\xf0\xe0N\xdeM\x97\xd9\xd8f\xd3hD\xec\xda\x9ae\xe4\xe9g6mHQk\x84\xdc:\xd7O\
-\xf7\xfa$\xc647\'\x008\x8e\x83\x12\x112\xb6\xe2\xfe\xc5\x01\x1c[s\xfbq\x91{\
-\xcf\x8b\x8c\\\xd8O\xbd\xd6\xe0\xd8\xdeN6\xb7\'\x89cC+H\xbd^7"\x821\x06\xad5\
-w^L26\xf5\x93\xd7\xef\xe7\x88-x4<@\xca\xb6\x16\xa7/\xc3\x9f\x1c\x88\x08Q\x14\
-q\xeaP7gOl\xa7Z\r\xe9\xcb\xa5y[,\xafH^"\xd0\x14\x11\x11r\xeb\x1cF/\x1fF)\x8b\
-\xd1\xc2\xf7\xdf\xc7m\xa1\x12E\xd1\xcaI\\\xa3\x15\x97N\xf615[er\xb6\xda\xb2\
-\xa7V\xab!A\x10\x98\xc5\x10-\x87\xc1\xf5B\x9e\xbc)1\xd8\x9f#\x99P\xc8\xc2\
-\x05\x00|\xdfG\\\xd7\xfd\x8b\x00\x08\x90\xb0-J3\x1e\x1dk\xed%5\xdf\xf7\x91\
-\xff\xfe\x8d\xbf\x00\xff\xd5\xb5\xd8\x1d!\x93\x80\x00\x00\x00\x00IEND\xaeB`\
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x02\
+\x00\x00\x00\x90\x91h6\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\x00\
+\x02\x10IDAT(\x91\x95\x92Kk\x13a\x14\x86\xcf7\xb7d\x92I\xa7I\'7\xa9)\x1a\xab\
+\xb5\xc1R\xabh\x15\x04\x91\xd2\x8d\x08\xaet\'\xf4?\xf87\xfc\r\xee\xdc\xb8\
+\xd0E\xc1\x8d(bP\xf0\x86Z/i\x02m\x9a\x98\xa9\xc9d&\x9d\xc9\xdc\xe7\x9b\xf9\
+\xdc\x84Rb@|\x97\xe7\x9c\x07^x\x0e"\x84\xc0\xff\x84\x998m\x7f}j\xd4\x9f\xc8n\
+\xd1d\xe7o\xdf\xd9@\x88:\\Q\x7f_\xebJ\xb3\xbd\xb59-\xb2y\xde\xc8\xe3\xf7\xb5\
+7\x8f\x8e\xb6\x98\x00\xb4\xb66\tv\xf6~\xfb\x10\x1a\t\xc6\xea\xec~&Q8\xb9R\
+\x14a\xa3\xbf\xa7\xb6\xbf$hp\xfc\xa0\xa6\x10u\x18\x9d\xb9P\xa1hf\x1c\xc0\xbe\
+\xd3\xf9\xf1Lm\xbeS\x15\x99\xa1B+ \x1e\x06\x96\x02\x9a\xa6OWV}[e\xe3"\xa2\
+\x98\x11\xe0Y\x83\xed\x97\x0f8\xbf)q H\xa4\xa3\x11\xdb\x8b,\x8f\xeckAnv\xc5\
+\xb4\xd9~\xf5q\x02\xf6sgoN\x1f\xbf\xc4\x00@\xe3\xedC\xceo\n1\x12ci!\x81x6\
+\xdc\xe9\xa1\xbe\x11F\x84.\xcc\x9d\xcag\x93;\xdb\xbf\x1c\xaf^\xab\x0eS\xd2+\
+\n\x00\xec\xeeG\x8e&b:#-,%\xc5l\x8c\xa3\xae,\x1d\xbbq1wn\x8e\xf9\xf6\xe1E*\
+\x9d\xe1\xd3E3\x10\xf2\x8bk\xf9\xf2U\x06\x00\x10\x10\x00\xc4\xcf\xe4P\xa1\
+\x14*\xdd\x08h\x96\x17y\xd7\x88s(I\xe9\x8d\xfa\xcf\xd2\xca]~\xba\x14\xf4?iz\
+\x86\x01\x00N<\xe9\xb9MM\x96\x13\xba\xae\xabj\x80#\xa5\xd7\x1b\x98\x9e\x87!\
+\x19G\xc3AO\xa8,\x0b\xe7oEx]\xdb}M\x01\xc0\x89\xcb\x1b.\x11z\x8a\xd1i\xc9\
+\x86\xe5\x99\x0e\x96\xbb\x9a6\xb0\\\x0f|\x8cf2\xe2H\x19\x13\x93\xe6\xd7(\x00\
+\x98\xca\x96\xcb\xd7\xef\xe3\xd8\xec\x81\x03\xa6\x0b\xa6K\x0c;\xd4\xed\xe8\
+\xc0\x8e0\x95,\x96\x16\x8e\xbaB\x87\xda\xb1o\xb7\xbe?\x97\x1bUC\x95]\x0f\x0f\
+\x1d\x12\xd2S\xab\xeb\xf7\x16\x97\xafM\x06F\xb2\xc3@W\xe5\xa1\xaeF@K\x85\x92\
+\x90J\x8f=\xce8\xf0\xcf\xfc\x01\xc1h\x0bqbR\xd1\'\x00\x00\x00\x00IEND\xaeB`\
 \x82' 
 
 def getActiveGridBitmap():
@@ -2032,21 +4934,32 @@ def getActiveGridIcon():
     return wx.IconFromBitmap(getActiveGridBitmap())
     
 #----------------------------------------------------------------------
-def getDPLData():
+def getSkinData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00LIDAT8\x8dc<p\xe0\xc0\x7f\x06\n\x00\x13%\x9a\x07\xa1\x01\x0e\x0e\xf6\
-\x0c\x0e\x0e\xf6x\xf9\x04]p\xe0\xc0A\x14\x85\xe8|\x82\x06\x90\nho\x80\x83\
-\x83=\xc3\x81\x03\x07\xc97\x00\x9ff\xa2\x0c \x040\x0c \xe4d\xf4\x18a\x1c\xcd\
-\x0b\x0c\x00\x81@\x19X*\x8dbG\x00\x00\x00\x00IEND\xaeB`\x82'
+\x00\x01CIDAT8\x8d\x85\x931K\xc3@\x14\x80\xbf\xd4\xba\xb5\xfe\x04\x03J\xe9Vp\
+5\x83Z\x97\xacB;dppw\x10\x04\x05\xa9\xa0\x90:\xa8\xa3\x14qs(8\xd4\xa1\x9bd\
+\xa9\x8b\x08\x15\xe2$\x82\xb4)U\x8b\x93\x8b\x11\x1d\x14\xe2\x10\x936\xb9$}\
+\x10\xc8\xe3\xe5\xfb\xde\xbb\xcb\x9dt\xdb6\x1dB\xd1\xee}\xf9\xef\x1b\xda\x82\
+\x14\xae\x8fF\n \x93\x9f\x0b<EU\x01@V\x14\xd6\xab\x17B\x03A\x10\x17\xb3YX^-%\
+J\xd2I\x82\xb3Z#\xa9\x9c,\x90\x15\x05\xd9]\t\xa7\xbbGB\xfd\xa7\xba\xe2\x00\
+\xa4F7\xcc\x8b\xae\x9d\xdc\xd5\x83#'\x08\xc3\xe1\xdc\x83_\xee\xbf9\xb7\x1e\
+\x87\x82\xa8\xae\xe3\xe0\xfa\xd3\xaf+\x18\xd75\x0e\xee|\x0e\xa4t\xc7z\xf37+v\
+\x92\xcb\x13\xeaK:\x00\xbd\xc1\x9e\x0fC\xe8\x1c\x84\xe1BS\xa3\xd0\xd4\xa8\
+\xed\xcc\xa3\xb7*\x00\x01\xd8\x17t\xedh\x18 S\xdc\x02`[\x9dDoU\x020\x80\xa4\
+\xae\x1d\n\xa7l3o\x06\xe0\x87\xe32\xaf\x96\xfb\xd9\xbe\xd9\x0f\n\xa4\xd4\x84\
+\x9f\x18\x07eA\xd67\xef\xc8\x19\xef\x00,~\xd8\xc2\xc5\xf2\x7f\xe3\xf5T\xd6\
+\x996\x87\xebx6n\x00\xc8\xfd\xe7Q\xb00\x81UR\x85\tf\x1aW\x89\xd7\xf9\x0f\x9f\
+\xff\x90p\xb7%\x8e\xf9\x00\x00\x00\x00IEND\xaeB`\x82" 
 
-def getDPLBitmap():
-    return BitmapFromImage(getDPLImage())
+def getSkinBitmap():
+    return BitmapFromImage(getSkinImage())
 
-def getDPLImage():
-    stream = cStringIO.StringIO(getDPLData())
+def getSkinImage():
+    stream = cStringIO.StringIO(getSkinData())
     return ImageFromStream(stream)
 
-def getDPLIcon():
-    return wx.IconFromBitmap(getDPLBitmap())
+def getSkinIcon():
+    return wx.IconFromBitmap(getSkinBitmap())
+
index a2215723d726898ba32b29e0b290587570972a92..2e666d400d1679d662ae4a9d842efa576ef0f458 100644 (file)
@@ -11,6 +11,7 @@
 #----------------------------------------------------------------------------
 import wx
 import wx.lib.docview
+import sys
 _ = wx.GetTranslation
 
 
@@ -36,10 +37,17 @@ class ImageView(wx.lib.docview.View):
                                 _("New Image File"),
                                 wx.OK | wx.ICON_EXCLAMATION)
             return False
+            
+        try:
+            self._bitmap = wx.Image(doc.GetFilename()).ConvertToBitmap()
+        except:
+            wx.MessageBox(_("Error loading '%s'. %s") % (doc.GetPrintableName(), sys.exc_value),
+                                _("Open Image File"),
+                                wx.OK | wx.ICON_EXCLAMATION)
+            return False
 
         frame = wx.GetApp().CreateDocumentFrame(self, doc, flags)
         panel = wx.Panel(frame, -1)            
-        self._bitmap = wx.Image(doc.GetFilename()).ConvertToBitmap()
         self._ctrl = wx.StaticBitmap(panel, -1, self._bitmap, (0,0), (self._bitmap.GetWidth(), self._bitmap.GetHeight()))
         wx.EVT_LEFT_DOWN(self._ctrl, self.OnFocus)
         wx.EVT_LEFT_DCLICK(self._ctrl, self.OnFocus)
@@ -85,15 +93,21 @@ import cStringIO
 
 def getImageData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x02\
-\x00\x00\x00\x90\x91h6\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\x00\
-\x00\x9aIDAT(\x91\x95\x92\xc1\r\xc50\x08C\xdd\xaa\xeb\xc12\xec\x90\x9b\x97!\
-\x0b\xb0\x03\x19\xe8\x1fR\xa9U\xf2\xd5\xb4>DH\xf8\t\x13\xb1E\x04\xbe\xe8\x00\
-@\xf2\x8d\xb5\xd6z\x02\x00\xccl\t\x98\x19\xc9}\xe9#y\x8f\xb0\x00H\xba\xc3\
-\xfd\x8a\xbd\x9e0\xe8xn\x9b\x99*q[r\x01`\xfa\x8f?\x91\x86-\x07\x8d\x00Iww\
-\xf7\xce\xcc\xf0>\xbb\x01\xa8j)e\x80G\xa0\xb7[k\x00J)\xfdU\xd5\xd6Z\x87O_D\
-\x88\x88\x88dff>\x17"r\x02y\xd33\xb3E\xc4\xcb\xe3\xeb\xda\xbe\x9e\xf7\x0f\
-\xa0B\x86\xd5X\x16\xcc\xea\x00\x00\x00\x00IEND\xaeB`\x82' 
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x017IDAT8\x8dcddbfh\x9f\xb3\xf3?\x03\x0e\xf0\xfc\xc5[\x0c\xb1\xfb\x0f\
+\x9f10000l\x9e]\xc2\xc8\x02\x13,Ot\xc6e\x06V\xe0\x9f1\x81\x81\x81\x81\x81\
+\x81\x05Y\xf0\xdc\x0b\x88C\x1e|\xfc\xc2\xf0\xe3\xf7\x01\x86{\x1fO20000(\xf1\
+\x9b3p\xb0:\xc0\xd5\x05\xa9\xf3\xc2\xd9L\xe8&\xa3kf```8\xfah-\xc3\xb57\x9d\
+\x0c?~\x1f\xc0p\t\x86\x01\xe8\x9aa\xe0\xf9\xc7\'X\xc5Q\x0c\x90\xe1c\xc4P\xf4\
+\xfc\xe3\x13\x14\xb6\x02?\x0f~\x17(\xf1\x9bc\xd5\xcc\xc0\xc0\xc0 \xc9/\x03g_\
+\xbbx\ta\x00,\xaa\xc4\xb8\x18\x18\x8c%\xd5\xb0j\x86\x19n$\xc1\x88"\xc6\x82\
+\xaeH]X\x9d!T#\x96\xe1\xec\xf3[\x0cG\x1f\xade````\xb0\x96\x0bf0\x96TcP\x17V\
+\xc70\x14\xc3\x00\x98!\xea\xc2\xea\x0c\xb7\x1a\x1a\x19\x18\x18\x18\x18\xa2\
+\xd6,\xc0\xa6\x0c\xe1\x05J\x00\x0b\x03\x03"iz,\xd3A\x91|l\xf2\x8a\x81\x81\
+\x81\x81au\x87\x18\x8a\xf8\xd5\x8aW\xc4\xb9@VN\x0c\x9f4v\x03\x94\x05LH2\x04%\
+\x10wD]!h#N\x03`\xb9\x0b\x06`\t\x85\x10\x00\x00\xe4\x0ecz\x94h\xf0\x8e\x00\
+\x00\x00\x00IEND\xaeB`\x82' 
 
 
 def getImageBitmap():
index 288d40d5c96d45c4d33393ca5842124083511f6d..1dd15ebd886179505fe485db6edcc576a127017a 100644 (file)
@@ -14,6 +14,35 @@ import wx
 import Service
 import STCTextEditor
 
+#----------------------------------------------------------------------------
+# Utility
+#----------------------------------------------------------------------------
+
+def ClearMessages():
+    messageService = wx.GetApp().GetService(MessageService)
+    view = messageService.GetView()
+    if view:
+        view.ClearLines()
+
+
+def ShowMessages(messages, clear=False):
+    if ((messages != None) and (len(messages) > 0)):
+        messageService = wx.GetApp().GetService(MessageService)
+        messageService.ShowWindow(True)
+        view = messageService.GetView()
+        if view:
+            if (clear):
+                view.ClearLines()
+            for message in messages:
+                view.AddLines(message)
+                view.AddLines("\n")
+
+
+#----------------------------------------------------------------------------
+# Classes
+#----------------------------------------------------------------------------
+
+
 class MessageView(Service.ServiceView):
     """ Reusable Message View for any document.
         When an item is selected, the document view is called back (with DoSelectCallback) to highlight and display the corresponding item in the document view.
@@ -36,52 +65,52 @@ class MessageView(Service.ServiceView):
         txtCtrl.SetFontColor(wx.BLACK)
         txtCtrl.StyleClearAll()
         txtCtrl.UpdateStyles()
+        wx.EVT_SET_FOCUS(txtCtrl, self.OnFocus)
 
         return txtCtrl
 
-
-##    def ProcessEvent(self, event):
-##        stcControl = self.GetControl()
-##        if not isinstance(stcControl, wx.stc.StyledTextCtrl):
-##            return wx.lib.docview.View.ProcessUpdateUIEvent(self, event)
-##        id = event.GetId()
-##        if id == wx.ID_CUT:
-##            stcControl.Cut()
-##            return True
-##        elif id == wx.ID_COPY:
-##            stcControl.Copy()
-##            return True
-##        elif id == wx.ID_PASTE:
-##            stcControl.Paste()
-##            return True
-##        elif id == wx.ID_CLEAR:
-##            stcControl.Clear()
-##            return True
-##        elif id == wx.ID_SELECTALL:
-##            stcControl.SetSelection(0, -1)
-##            return True
-##
-##
-##    def ProcessUpdateUIEvent(self, event):
-##        stcControl = self.GetControl()
-##        if not isinstance(stcControl, wx.stc.StyledTextCtrl):
-##            return wx.lib.docview.View.ProcessUpdateUIEvent(self, event)
-##        id = event.GetId()
-##        if id == wx.ID_CUT:
-##            event.Enable(stcControl.CanCut())
-##            return True
-##        elif id == wx.ID_COPY:
-##            event.Enable(stcControl.CanCopy())
-##            return True
-##        elif id == wx.ID_PASTE:
-##            event.Enable(stcControl.CanPaste())
-##            return True
-##        elif id == wx.ID_CLEAR:
-##            event.Enable(True)  # wxBug: should be stcControl.CanCut()) but disabling clear item means del key doesn't work in control as expected
-##            return True
-##        elif id == wx.ID_SELECTALL:
-##            event.Enable(stcControl.GetTextLength() > 0)
-##            return True
+    def GetDocument(self):
+        return None
+
+    def OnFocus(self, event):
+        wx.GetApp().GetDocumentManager().ActivateView(self)
+        event.Skip()
+
+    def ProcessEvent(self, event):
+        stcControl = self.GetControl()
+        if not isinstance(stcControl, wx.stc.StyledTextCtrl):
+            return wx.lib.docview.View.ProcessEvent(self, event)
+        id = event.GetId()
+        if id == wx.ID_COPY:
+            stcControl.Copy()
+            return True
+        elif id == wx.ID_CLEAR:
+            stcControl.Clear()
+            return True
+        elif id == wx.ID_SELECTALL:
+            stcControl.SetSelection(0, -1)
+            return True
+
+
+    def ProcessUpdateUIEvent(self, event):
+        stcControl = self.GetControl()
+        if not isinstance(stcControl, wx.stc.StyledTextCtrl):
+            return wx.lib.docview.View.ProcessUpdateUIEvent(self, event)
+        id = event.GetId()
+        if id == wx.ID_CUT or id == wx.ID_PASTE:
+            # I don't think cut or paste makes sense from a message/log window.
+            event.Enable(False)
+            return True
+        elif id == wx.ID_COPY:
+            hasSelection = (stcControl.GetSelectionStart() != stcControl.GetSelectionEnd()) 
+            event.Enable(hasSelection)
+            return True
+        elif id == wx.ID_CLEAR:
+            event.Enable(True)  # wxBug: should be stcControl.CanCut()) but disabling clear item means del key doesn't work in control as expected
+            return True
+        elif id == wx.ID_SELECTALL:
+            event.Enable(stcControl.GetTextLength() > 0)
+            return True
 
         
     #----------------------------------------------------------------------------
@@ -139,5 +168,3 @@ class MessageService(Service.Service):
 
     def _CreateView(self):
         return MessageView(self)
-        
-        
index 573327db894e132c4154f3d2e2de68c950badb36..75fc67e0d224acd63fafd0dcb17090029473711a 100644 (file)
@@ -321,7 +321,7 @@ class OutlineService(Service.Service):
 
     def __init__(self, serviceName, embeddedWindowLocation = wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM):
         Service.Service.__init__(self, serviceName, embeddedWindowLocation)
-        self._validTemplates = []
+        self._validViewTypes = []
 
 
     def _CreateView(self):
@@ -493,9 +493,8 @@ class OutlineService(Service.Service):
         if self.GetView():
             currView = wx.GetApp().GetDocumentManager().GetCurrentView()
             if currView:
-                for template in self._validTemplates:
-                    type = template.GetViewType()
-                    if isinstance(currView, type):
+                for viewType in self._validViewTypes:
+                    if isinstance(currView, viewType):
                         self.LoadOutline(currView)
                         foundRegisteredView = True
                         break
@@ -506,14 +505,14 @@ class OutlineService(Service.Service):
         self._timer.Start(1000) # 1 second interval
 
 
-    def AddTemplateForBackgroundHandler(self, template):
-        self._validTemplates.append(template)
+    def AddViewTypeForBackgroundHandler(self, viewType):
+        self._validViewTypes.append(viewType)
 
 
-    def GetTemplatesForBackgroundHandler(self):
-        return self._validTemplates
+    def GetViewTypesForBackgroundHandler(self):
+        return self._validViewTypes
 
 
-    def RemoveTemplateForBackgroundHandler(self, template):
-        self._validTemplates.remove(template)
+    def RemoveViewTypeForBackgroundHandler(self, viewType):
+        self._validViewTypes.remove(viewType)
 
index bd8fa0602980fe5dada2ab46532c422ebc3f290b..5e78d118f676f14aef3f0eb22445c48dbdd9b2d8 100644 (file)
@@ -219,6 +219,10 @@ class PHPOptionsPanel(STCTextEditor.TextOptionsPanel):
         STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "PHP", label = "PHP", hasWordWrap = True, hasTabs = True)
 
 
+    def GetIcon(self):
+        return getPHPIcon()
+
+
 PHPKEYWORDS = [
         "and", "or", "xor", "__FILE__", "exception", "__LINE__", "array", "as", "break", "case",
         "class", "const", "continue", "declare", "default", "die", "do", "echo", "else", "elseif",
@@ -274,14 +278,22 @@ import cStringIO
 
 def getPHPData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00{IDAT8\x8dclh8\xf0\x9f\x81\x02\xc0D\x89f\xaa\x18\xc0\x82M0<\\\x1c\
-\xce^\xb9\xf2%y.\xd0\xd4\xd4$\xde\x05\xf8l\x0c\x0f\x17\x87\x8baS\xc7x\xfd\
-\xfa\xf5\xff\xc8\xb6]\xbf~\x1d\xc3\x05\xf8\xc4\x98\x90\x05\xae_\xbf\x8e\xa1\
-\x88\x90\xd8 \x8aF\x98\x93`~\xc3\x05\xd0\xd5\xc1\r\x80\t\xc0B\xf7\xfa\xf5\
-\xeb(l\\\xeaP\xbc\x80\x1c\x85\xb8\xd8\xe8|&b\x9c\x8dn;2`\x1c\xf0\xdc\x08\x00\
-\x8e\xf2S\xed\xb0\xbe\xaa\xbc\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01GIDAT8\x8d\x8d\x931O\xc2@\x14\xc7\x7fW\xfa\x11\x1c\xe430\xb88\x18'\
+\x8c\x89\x0e\x0c\xc4\xd9\xdd\x85\xc9\xc5`\x82\x1b\t\x84\x98\x98\xe0\xa4_\x01\
+cd`t$\xb8h\xd0\xb8\xabD0\xd4\xd0\xb4%H $\xe7P\x0e{@\xa9\xff\xe4\r\xf7\xee~\
+\xff\xf7\xee^+\x1a\xcd\x8ed*\xab\xef\x02\xd0\xea\xda\x00\xb8\xce\x90\xb3\xa3\
+}\xc1*5\x9a\x1d\xf9\xf6#g\xf1\xea\xf9qyS\x97\xf5o)\x8f\xcfo\xa50b\x84\x85\
+\xb1\xca\xdc\x9b\xc0\xde\xe1\x01'\xa7U\x19v\xc6\xb4\xfa.\xeb\xc4\x01\x18L\
+\xfc\xa4;\xf2\xdb\x7f\xac\xdd\xd3s<\xda\x03+\xb4\x88\x19\x04\x15\x0c\xb0\x93\
+\xde\xc5\x9b\x80=\x86\xf6\xc5U\xa8\x81v\x05\x05\xab\xf6\xedq(\xf7\xd7A\xabk\
+\xb36\xd2\x93A\xd8\x1aF\x18\xcc\x83\xb0\x08\x7f\xbc\xb7\xc2\r\\g8\x03\x97\
+\xc1Q2{\x8e\xa7\x81/\xd7\xb5\x85C\xc9\xc46\xc9\x84>\xcaR!-`\xfa\x88\xab\xe0b\
+>\xb5\xb4\xb2\xfa6\xcc\xf6\xa7\xc5f\x00V\xc0\xc3\xf3\x17w\x95\xa7YN\xad\x83\
+\xfbP\x95\x06@un\xce\xd9\\\x8d\xad\x8d\xf8\xbf\xd6F\xa5\x9c\x11\x95rF\xfbaT\
+\xc50\x15\xf3)\xb29\xbfc!\x8c\x98v\xaf\xe0f\x14\\*\xa4\x85f\x10|\x9c(\xa9)\
+\xfc\x02?r\xb8\xfc~J.\xd0\x00\x00\x00\x00IEND\xaeB`\x82" 
 
 def getPHPBitmap():
     return BitmapFromImage(getPHPImage())
index aaab62a206e470263eefce05fe0aa29c9df2869b..bc7c48f0c12b7f557b6dc9d6626328d87361cc26 100644 (file)
@@ -133,6 +133,10 @@ class PerlOptionsPanel(STCTextEditor.TextOptionsPanel):
         STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "Perl", label = "Perl", hasWordWrap = True, hasTabs = True)
 
 
+    def GetIcon(self):
+        return getPerlIcon()
+
+
 PERLKEYWORDS = [
         "abs",
         "accept",
@@ -392,24 +396,22 @@ import cStringIO
 
 def getPerlData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x01\x81IDAT8\x8d\xa5S1n\xe30\x10\x1cJ\xf9\x80;U\x04\x04~\xc06\xdc\xa9\
-\x10\xd4\xb3K\xf2\x01\xf9\x01F\x92\xce\x8d:vI\x84\xdc\xd5\xaa\xdc%\xd1\x17\
-\x0c\x17ns\xa7\x07,\x16\xe0G6E@B\x91\x9c*\x0b\x10 \xb9\xe4\xecpg\xa8T\x92\
-\xe27q5^\xbc\xbf\xbd\n\x00\\\xdf\xdc\xaa\xb0\xf7\xfc\xf4(\xcc\x8c<\xcfqw\xff\
-\xa0\xa6\x00PI\x8aa\x18\xa4m[\xd9\xedvb\xad\x95a\x18D%)\xfa\xbe\x97\xc5b!\
-\xd6Z\xb1\xd6J\xdb\xb6\xa2\x92\x14\xe3\x91\x00\xc0r\xb5VZ\xeb\x08z<\x1e\xf1\
-\xfe\xf6*]\xd7\xc1\x18\x03c\x0c\xea\xba\x063\xe3\xff\xbf\x0f\xf9\xf1\tD\x14\
-\xe7\xce9\xec\xf7{\x00\x80\xf7\xfe\x1b\xf88\x920\xf1\xde\xc7j\xcc\x8c,\xcb\
-\xe2:\xe4\xeb\xba\x06\x80o,"\x03\xad5\x0e\x87C\xacz>\x9fAD\xb1\xba\xd6\x1aD\
-\x04f\x063\xcf\x19\\\xdf\xdc\xaa\xa2(p:\x9d\xe0\xbd\x07\x11\xc19\x07\xad5\
-\x98\x19\xce9l\xb7[\x10\x11\xf2<\x9f\x03\x00\xc0\xcb\x9f\xbf\xaa,\xcbX!\xcb2\
-t]\x17\xf3M\xd3\xc4\'\xc5\x98\xca\x12d\xddl6\x12d\x0c\x12\xab$\x85\xb5Vf2N\
-\x83\x88P\x14\x05\xbc\xf7h\x9a\x06UUE\xda\xc6\x98\xcbM\x1c\x871\x06\xde{TU\
-\x05\xe0\xcb\'\xe1RY\x96X\xae\xd6\xd1\x91\x17\x19\x00_]_\xae\xd6\x8a\x88\xf0\
-\xfc\xf4(\xe1\xd2\xb4\x07?\x02\x8c\x0f\x8e\x1d85\xd2\xc5\x06\xf6}?\xf3|\x18\
-\xb3\xdco\xbf\xf3\'`\xa6\xbc1\xa7\xd6\xcb\xbf\x00\x00\x00\x00IEND\xaeB`\x82'\
+\x00\x01CIDAT8\x8d\x95\x93\xbfN\x02A\x10\x87\xbf[\xef\x05\xach|\x02m}\x008\
+\x881Z\xd2\x1a\x13\x0bKx\x02{\xa3\xa13\xc6\xc6\xc6\xd2DZ+s\\\x83\x95\x1d\xa2\
+&V\x104\x01/p\x01\t\xa0\xe8X\xc0\x9d\x87\xdc^\xf0\x97Lfw3\xdf\xec\xcc\xfe1\
+\xca\x95\xba0\x95\xeb\xf5\x01h\xb4\xda\x00x\xde\x90\x83\xfd\r\x838\x95+u\xa9\
+\rDj\x03\x91\xe7\xbe\xc8}wb\xa7\xc5\xb2\xdc\xbe\x89\xe4\x8f\xae\xc4PK\xe8L\
+\xc5%\xef\x8da{7K\xee\xf0Rt1\xa6\xeb\xf5Y\x01>\xbea\xf45Y\xec\x8e&\xe5\xdf]\
+\xdb4\xdd\x0e\xaf/-\xed&&\x110\xc0\xfa\x96\xc5\xf1N\x06\x80\xe5\xb5\xac6\x81\
+\x82y\xb87\x9e\r\xeaT\x8b3s+\x95\x14+\x95\x14\x00\xd5h\xb5\xe9\x8e\xe6a\x7f\
+\xf70\x14\xf6\xfeXy\xde0\x08\xf2\xe1\xf6gt\xb9V*)v\xc9\t\xae\xd5.9\x86\x19\
+\x05\x9e\xefe\xe6i\x8dT\xd3\xed\xfc\x0b\x0e\xb7\x00\xd3C\xd4\x95\x1c'\xbf\
+\x15\x15\xbe\xe3\xc6;l\x9e\xdc\x00\xbf\xfe/`\x97\x1c#|\x0e&@\xb1p\x16\x04>U\
+\x1fI\x00\x17\xb9<\t\xa0\xc9*\t\x1e\xf4\xa5D\xbd\xeft:-q~\xe1\xbf\xb0\x88b\
+\x13\x84{\x8d\x9a\x03\xfc\x00\xea\x7f\xa9A\xa7\xc3Vo\x00\x00\x00\x00IEND\xae\
+B`\x82" 
 
 
 def getPerlBitmap():
index 9934eaade7cc2cb9578ac8eec1fb7bff2624479c..af95b890d3edd8e718c9c069cb3e6c3fbaba4427 100644 (file)
@@ -2,7 +2,7 @@
 # Name:         ProjectEditor.py
 # Purpose:      IDE-style Project Editor for wx.lib.pydocview
 #
-# Author:       Peter Yared, Morgan Hua
+# Author:       Morgan Hua, Peter Yared
 #
 # Created:      8/15/03
 # CVS-ID:       $Id$
 # License:      wxWindows License
 #----------------------------------------------------------------------------
 
+import wx
 import wx.lib.docview
 import wx.lib.pydocview
-import types
-import os
-import os.path
-import wx
+import wx.lib.buttons
 from wxPython.lib.rcsizer import RowColSizer
-import time
 import Service
+import copy
+import os
+import os.path
+import sets
 import sys
-import activegrid.util.xmlutils
+import time
+import types
+import activegrid.util.appdirs as appdirs
+import activegrid.util.fileutils as fileutils
 import UICommon
 import Wizard
 import SVNService
+import project as projectlib
+import ExtensionService
+
 from IDE import ACTIVEGRID_BASE_IDE
 if not ACTIVEGRID_BASE_IDE:
+    import activegrid.server.deployment as deploymentlib
     import ProcessModelEditor
+    import DataModelEditor
+    import WsdlAgEditor
+    APP_LAST_LANGUAGE = "LastLanguage"
+    import activegrid.model.basedocmgr as basedocmgr
+    import activegrid.model.basemodel as basemodel
+    import PropertyService
+    from activegrid.server.toolsupport import GetTemplate
+    import activegrid.util.xmlutils as xmlutils
+    import activegrid.util.sysutils as sysutils
+
 from SVNService import SVN_INSTALLED
 
 _ = wx.GetTranslation
@@ -35,131 +53,241 @@ if wx.Platform == '__WXMSW__':
     _WINDOWS = True
 else:
     _WINDOWS = False
-
-
+    
 #----------------------------------------------------------------------------
 # Constants
 #----------------------------------------------------------------------------
 SPACE = 10
 HALF_SPACE = 5
+PROJECT_EXTENSION = ".agp"
+
+# wxBug: the wxTextCtrl and wxChoice controls on Mac do not correctly size
+# themselves with sizers, so we need to add a right border to the sizer to
+# get the control to shrink itself to fit in the sizer.
+MAC_RIGHT_BORDER = 0
+if wx.Platform == "__WXMAC__":
+    MAC_RIGHT_BORDER = 5
+
+
+PROJECT_KEY = "/AG_Projects"
+PROJECT_DIRECTORY_KEY = "NewProjectDirectory"
 
+NEW_PROJECT_DIRECTORY_DEFAULT = appdirs.documents_folder
 
 #----------------------------------------------------------------------------
-# XML Marshalling Methods
+# Methods
 #----------------------------------------------------------------------------
 
-def load(fileObject):
-    return activegrid.util.xmlutils.defaultLoad(fileObject, knownTypes={"projectmodel" : ProjectModel})
+def getProjectKeyName(projectName, mode):
+    return "%s/%s/%s" % (PROJECT_KEY, projectName.replace(os.sep, '|'), mode)
 
-def save(fileObject, projectModel):
-    activegrid.util.xmlutils.defaultSave(fileObject, projectModel, prettyPrint=True, knownTypes={"projectmodel" : ProjectModel})
+
+def GetDocCallback(filepath):
+    """ Get the Document used by the IDE and the in-memory document model used by runtime engine """
+    docMgr = wx.GetApp().GetDocumentManager()
+    
+    doc = docMgr.CreateDocument(filepath, docMgr.GetFlags()|wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE|wx.lib.docview.DOC_NO_VIEW)
+    if (doc == None):  # already open
+        for d in docMgr.GetDocuments():
+            if os.path.normcase(d.GetFilename()) == os.path.normcase(filepath):
+                doc = d
+                break
+    else:
+        projectService = wx.GetApp().GetService(ProjectService)
+        if projectService:
+            projectDocs = projectService.FindProjectByFile(filepath)
+            if projectDocs:
+                projectDoc = projectDocs[0]
+                projectService.AddProjectMapping(doc, projectDoc)
+                if hasattr(doc, "GetModel"):
+                    projectService.AddProjectMapping(doc.GetModel(), projectDoc)
+                
+            
+    if doc and doc.GetDocumentTemplate().GetDocumentType() == WsdlAgEditor.WsdlAgDocument:
+        # get referenced wsdl doc instead
+        if os.path.isabs(doc.GetModel().filePath):  # if absolute path, leave it alone
+            filepath = doc.GetModel().filePath
+        else:
+            filepath = doc.GetAppDocMgr().fullPath(doc.GetModel().filePath)  # check relative to project homeDir
+    
+            if not os.path.isfile(filepath):
+                filepath = os.path.normpath(os.path.join(os.path.dirname(doc.GetFilename()), doc.GetModel().filePath))  # check relative to wsdlag file
+                
+                if not os.path.isfile(filepath):
+                    filename = os.sep + os.path.basename(doc.GetModel().filePath)  # check to see if in project file
+                    filePaths = findDocumentMgr(doc).filePaths
+                    for fp in filePaths:
+                        if fp.endswith(filename):
+                            filepath = fp
+                            break
+                
+        doc = docMgr.CreateDocument(filepath, docMgr.GetFlags()|wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE|wx.lib.docview.DOC_NO_VIEW)
+        if (doc == None):  # already open
+            for d in docMgr.GetDocuments():
+                if os.path.normcase(d.GetFilename()) == os.path.normcase(filepath):
+                    doc = d
+                    break
+        else:
+            projectService = wx.GetApp().GetService(ProjectService)
+            if projectService:
+                projectDocs = projectService.FindProjectByFile(filepath)
+                if projectDocs:
+                    projectDoc = projectDocs[0]
+                    projectService.AddProjectMapping(doc, projectDoc)
+                    if hasattr(doc, "GetModel"):
+                        projectService.AddProjectMapping(doc.GetModel(), projectDoc)
+
+    if doc:
+        docModel = doc.GetModel()
+    else:
+        docModel = None
+        
+    return doc, docModel
+
+
+def findDocumentMgr(root):
+    projectService = wx.GetApp().GetService(ProjectService)
+    if projectService:
+        projectDoc = projectService.FindProjectFromMapping(root)
+        if projectDoc:
+            return projectDoc.GetModel()
+            
+        projectDoc = projectService.GetCurrentProject()
+        if not projectDoc:
+            return None
+            
+        if isinstance(root, wx.lib.docview.Document):
+            filepath = root.GetFilename()
+        elif hasattr(root, "fileName") and root.fileName:
+            filepath = root.fileName
+        else:
+            filepath = None
+            
+        if filepath:    
+            if projectDoc.IsFileInProject(filepath):
+                return projectDoc.GetModel()
+                
+            projects = []
+            openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
+            for openDoc in openDocs:
+                if openDoc == projectDoc:
+                    continue
+                if(isinstance(openDoc, ProjectDocument)):
+                    if openDoc.IsFileInProject(filepath):
+                        projects.append(openDoc)
+                        
+            if projects:
+                if len(projects) == 1:
+                    return projects[0].GetModel()
+                else:
+                    choices = [os.path.basename(project.GetFilename()) for project in projects]
+                    dlg = wx.SingleChoiceDialog(wx.GetApp().GetTopWindow(), _("'%s' found in more than one project.\nWhich project should be used for this operation?") % os.path.basename(filepath), _("Select Project"), choices, wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.OK|wx.CENTRE)
+                    dlg.CenterOnParent()
+                    projectDoc = None
+                    if dlg.ShowModal() == wx.ID_OK:
+                        i = dlg.GetSelection()
+                        projectDoc = projects[i]
+                    dlg.Destroy()
+                    return projectDoc.GetModel()
+        return projectDoc.GetModel()
+    
+    return None
+    
+
+if not ACTIVEGRID_BASE_IDE:
+    basemodel.findGlobalDocumentMgr = findDocumentMgr
 
 
 #----------------------------------------------------------------------------
 # Classes
 #----------------------------------------------------------------------------
 
-class ProjectModel:
-    __xmlname__ = "projectmodel"
-    __xmlrename__ = { "_files":"files"}
-
-
-    def __init__(self):
-        self._files = []
-        
-    def initialize(self):
-        pass
-     
-   
 class ProjectDocument(wx.lib.docview.Document):
 
 
-    def __init__(self):
+    def __init__(self, model=None):
         wx.lib.docview.Document.__init__(self)
-        self._projectModel = ProjectModel()
-        
+        if model:
+            self.SetModel(model)
+        else:
+            self.SetModel(projectlib.Project())  # initial model used by "File | New... | Project"
+        self.GetModel().SetDocCallback(GetDocCallback)
+
+        self._stageProjectFile = False 
+
+
+    def __copy__(self):
+        model = copy.copy(self.GetModel())        
+        clone =  ProjectDocument(model)
+        clone.SetFilename(self.GetFilename())
+        return clone
+
+
+    def GetFirstView(self):
+        """ Bug: workaround.  If user tries to open an already open project with main menu "File | Open...", docview.DocManager.OnFileOpen() silently returns None if project is already open.
+            And to the user, it appears as if nothing has happened.  The user expects to see the open project.
+            This forces the project view to show the correct project.
+        """
+        view = wx.lib.docview.Document.GetFirstView(self)
+        view.SetProject(self.GetFilename())  # ensure project is displayed in view
+        return view
+
 
     def GetModel(self):
         return self._projectModel
+        
+
+    def SetModel(self, model):
+        self._projectModel = model
 
 
     def OnCreate(self, path, flags):
         projectService = wx.GetApp().GetService(ProjectService)
-        if projectService.GetView():
+        view = projectService.GetView()
+        if view:  # view already exists, reuse
             # All project documents share the same view.
-            view = projectService.GetView()
             self.AddView(view)
 
-            if view.GetDocument():    
+            if view.GetDocument():
                 # All project documents need to share the same command processor,
                 # to enable redo/undo of cross project document commands
                 cmdProcessor = view.GetDocument().GetCommandProcessor()
                 if cmdProcessor:
                     self.SetCommandProcessor(cmdProcessor)
-        else:
+        else:  # generate view
             view = self.GetDocumentTemplate().CreateView(self, flags)
             projectService.SetView(view)
 
-
         return view
 
 
     def LoadObject(self, fileObject):
-        self._projectModel = activegrid.tool.ProjectEditor.load(fileObject)
-        self._projectModel._files = self.RelativeToAbsPath(self._projectModel._files)
+        self.SetModel(projectlib.load(fileObject))
+        self.GetModel().SetDocCallback(GetDocCallback)
         return True
 
 
     def SaveObject(self, fileObject):
-        absPath = self._projectModel._files
-        self._projectModel._files = self.AbsToRelativePath(absPath)  # temporarily change it to relative paths for saving
-        activegrid.tool.ProjectEditor.save(fileObject, self._projectModel)
-        self._projectModel._files = absPath                          # swap it back to absolute path
+        projectlib.save(fileObject, self.GetModel())
         return True
 
 
-    def AbsToRelativePath(self, paths):
-        curPath = os.path.dirname(self.GetFilename())
-        curPathLen = len(curPath)
-        
-        newFilePaths = []
-        for path in paths:
-            if path.startswith(curPath):
-                path = "." + path[curPathLen:]  # use relative path
-                if os.sep != '/':
-                    path = path.replace(os.sep, '/', -1)  # always save out with '/' as path separator for cross-platform compatibility.
-            else:
-                pass                            # use absolute path
-            newFilePaths.append(path)
-        return newFilePaths
-
-    def RelativeToAbsPath(self, paths):
-        newFilePaths = []
-        for path in paths:
-            if path.startswith("."):  # relative to project file
-                curPath = os.path.dirname(self.GetFilename())
-                path = os.path.normpath(os.path.join(curPath, path))
-            newFilePaths.append(path)
-        return newFilePaths
-
-
-    def OnOpenDocument(self, filename):
-        view = self.GetFirstView()
-        frame = view.GetFrame()
+    def OnOpenDocument(self, filePath):
+        projectService = wx.GetApp().GetService(ProjectService)
+        view = projectService.GetView()
 
-        if not os.path.exists(filename):
+        if not os.path.exists(filePath):
             wx.GetApp().CloseSplash()
             msgTitle = wx.GetApp().GetAppName()
             if not msgTitle:
                 msgTitle = _("File Error")
-            wx.MessageBox(_("Could not find '%s'.") % filename,
+            wx.MessageBox(_("Could not find '%s'.") % filePath,
                           msgTitle,
                           wx.OK | wx.ICON_EXCLAMATION | wx.STAY_ON_TOP,
-                          frame)
+                          wx.GetApp().GetTopWindow())
             return True  # if we return False, the Project View is destroyed, Service windows shouldn't be destroyed
 
-        fileObject = file(filename, 'r')
+        fileObject = file(filePath, 'r')
         try:
             self.LoadObject(fileObject)
         except:
@@ -167,122 +295,644 @@ class ProjectDocument(wx.lib.docview.Document):
             msgTitle = wx.GetApp().GetAppName()
             if not msgTitle:
                 msgTitle = _("File Error")
-            wx.MessageBox(_("Could not open '%s'.  %s") % (wx.lib.docview.FileNameFromPath(filename), sys.exc_value),
+            wx.MessageBox(_("Could not open '%s'.  %s") % (wx.lib.docview.FileNameFromPath(filePath), sys.exc_value),
                           msgTitle,
                           wx.OK | wx.ICON_EXCLAMATION | wx.STAY_ON_TOP,
-                          frame)
+                          wx.GetApp().GetTopWindow())
             return True  # if we return False, the Project View is destroyed, Service windows shouldn't be destroyed
 
         self.Modify(False)
-        self.SetFilename(filename, True)
+        self.SetFilename(filePath, True)
         view.AddProjectToView(self)
         self.SetDocumentModificationDate()
         self.UpdateAllViews()
         self._savedYet = True
-        view.Activate(True)
+        view.Activate()
         return True
 
-    def AddFile(self, file):
-        return self.AddFiles([file])
 
+    def AddFile(self, filePath, folderPath=None, type=None, name=None):
+        if type:
+            types = [type]
+        else:
+            types = None
+        if name:
+            names = [name]
+        else:
+            names = None
+            
+        return self.AddFiles([filePath], folderPath, types, names)
 
-    def AddFiles(self, files):
-        notAlreadyThereFiles = filter(lambda x: x not in self._projectModel._files, files)  # Filter to the files that are not already in the project
-        if len(notAlreadyThereFiles) == 0:
-            self.UpdateAllViews(hint = ("select", self, files))
-            return False
+
+    def AddFiles(self, filePaths=None, folderPath=None, types=None, names=None, files=None):
+        # Filter out files that are not already in the project
+        if filePaths:
+            newFilePaths = []
+            oldFilePaths = []
+            for filePath in filePaths:
+                if self.GetModel().FindFile(filePath):
+                    oldFilePaths.append(filePath)
+                else:
+                    newFilePaths.append(filePath)
+    
+            projectService = wx.GetApp().GetService(ProjectService)
+            for i, filePath in enumerate(newFilePaths):
+                if types:
+                    type = types[i]
+                else:
+                    type = None
+                    
+                if names:
+                    name = names[i]
+                else:
+                    name = projectService.FindNameDefault(filePath)
+                    
+                if not folderPath:
+                    folder = projectService.FindLogicalViewFolderDefault(filePath)
+                else:
+                    folder = folderPath
+                    
+                self.GetModel().AddFile(filePath, folder, type, name)
+        elif files:
+            newFilePaths = []
+            oldFilePaths = []
+            for file in files:
+                if self.GetModel().FindFile(file.filePath):
+                    oldFilePaths.append(file.filePath)
+                else:
+                    newFilePaths.append(file.filePath)
+                    self.GetModel().AddFile(file=file)
         else:
-            self._projectModel._files = self._projectModel._files + notAlreadyThereFiles
-            self.UpdateAllViews(hint = ("add", self, notAlreadyThereFiles))
+            return False
+
+        self.AddNameSpaces(newFilePaths)
+                
+        self.UpdateAllViews(hint = ("add", self, newFilePaths, oldFilePaths))
+        if len(newFilePaths):
             self.Modify(True)
             return True
+        else:
+            return False
 
 
-    def RemoveFile(self, file):
-        return self.RemoveFiles([file])
+    def RemoveFile(self, filePath):
+        return self.RemoveFiles([filePath])
 
 
-    def RemoveFiles(self, files):
-        for file in files:
-            self._projectModel._files.remove(file)
-        self.UpdateAllViews(hint = ("remove", self, files))
-        self.Modify(True)
-        return True
+    def RemoveFiles(self, filePaths=None, files=None):
+        removedFiles = []
+        
+        if files:
+            filePaths = []
+            for file in files:
+                filePaths.append(file.filePath)
+                  
+        for filePath in filePaths:
+            file = self.GetModel().FindFile(filePath)
+            if file:
+                self.GetModel().RemoveFile(file)
+                removedFiles.append(file.filePath)
+                                        
+        self.UpdateAllViews(hint = ("remove", self, removedFiles))
+        if len(removedFiles):
+            self.Modify(True)
+            return True
+        else:
+            return False
 
 
-    def RenameFile(self, oldFile, newFile, isProject = False):
+    def RenameFile(self, oldFilePath, newFilePath, isProject = False):
         try:
-            if oldFile == newFile:
+            if oldFilePath == newFilePath:
                 return False
 
             # projects don't have to exist yet, so not required to rename old file,
             # but files must exist, so we'll try to rename and allow exceptions to occur if can't.
-            if not isProject or (isProject and os.path.exists(oldFile)):
-                os.rename(oldFile, newFile)
+            if not isProject or (isProject and os.path.exists(oldFilePath)):
+                os.rename(oldFilePath, newFilePath)
 
             if isProject:
                 documents = self.GetDocumentManager().GetDocuments()
                 for document in documents:
-                    if os.path.normcase(document.GetFilename()) == os.path.normcase(oldFile):  # If the renamed document is open, update it
-                        document.SetFilename(newFile)
-                        document.SetTitle(wx.lib.docview.FileNameFromPath(newFile))
-                        document.UpdateAllViews(hint = ("rename", document, newFile))
+                    if os.path.normcase(document.GetFilename()) == os.path.normcase(oldFilePath):  # If the renamed document is open, update it
+                        document.SetFilename(newFilePath)
+                        document.SetTitle(wx.lib.docview.FileNameFromPath(newFilePath))
+                        document.UpdateAllViews(hint = ("rename", self, oldFilePath, newFilePath))
             else:
-                self.RemoveFile(oldFile)
-                self.AddFile(newFile)
+                self.UpdateFilePath(oldFilePath, newFilePath)
                 documents = self.GetDocumentManager().GetDocuments()
                 for document in documents:
-                    if os.path.normcase(document.GetFilename()) == os.path.normcase(oldFile):  # If the renamed document is open, update it
-                        document.SetFilename(newFile, notifyViews = True)
-                        document.UpdateAllViews(hint = ("rename", document, newFile))
+                    if os.path.normcase(document.GetFilename()) == os.path.normcase(oldFilePath):  # If the renamed document is open, update it
+                        document.SetFilename(newFilePath, notifyViews = True)
+                        document.UpdateAllViews(hint = ("rename", self, oldFilePath, newFilePath))
             return True
         except OSError, (code, message):
             msgTitle = wx.GetApp().GetAppName()
             if not msgTitle:
                 msgTitle = _("File Error")
-            wx.MessageBox("Could not rename '%s'.  '%s'" % (wx.lib.docview.FileNameFromPath(oldFile), message),
+            wx.MessageBox("Could not rename '%s'.  '%s'" % (wx.lib.docview.FileNameFromPath(oldFilePath), message),
                           msgTitle,
                           wx.OK | wx.ICON_EXCLAMATION,
-                          self.GetFirstView().GetFrame())
+                          wx.GetApp().GetTopWindow())
+            return False
+
+
+    def MoveFile(self, file, newFolderPath):
+        return self.MoveFiles([file], newFolderPath)
+
+
+    def MoveFiles(self, files, newFolderPath):
+        filePaths = []
+        isArray = isinstance(newFolderPath, type([]))
+        for i in range(len(files)):
+            if isArray:
+                files[i].logicalFolder = newFolderPath[i]
+            else:
+                files[i].logicalFolder = newFolderPath
+            filePaths.append(files[i].filePath)
+            
+        self.UpdateAllViews(hint = ("remove", self, filePaths))
+        self.UpdateAllViews(hint = ("add", self, filePaths, []))
+        self.Modify(True)
+        return True
+
+
+    def UpdateFilePath(self, oldFilePath, newFilePath):
+        file = self.GetModel().FindFile(oldFilePath)
+        self.RemoveFile(oldFilePath)
+        if file:
+            self.AddFile(newFilePath, file.logicalFolder, file.type, file.name)
+        else:
+            self.AddFile(newFilePath)
+
+
+    def RemoveInvalidPaths(self):
+        """Makes sure all paths project knows about are valid and point to existing files. Removes and returns list of invalid paths."""
+
+        invalidFileRefs = []
+        
+        fileRefs = self.GetFileRefs()
+        
+        for fileRef in fileRefs:
+            if not os.path.exists(fileRef.filePath):
+                invalidFileRefs.append(fileRef)
+
+        for fileRef in invalidFileRefs:
+            fileRefs.remove(fileRef)
+
+        return [fileRef.filePath for fileRef in invalidFileRefs]
+
+    def SetStageProjectFile(self):
+        self._stageProjectFile = True
+
+    def ArchiveProject(self, zipdest, tmpdir=None, stagedir=None):
+        """Stages the application files in tmpdir, and zips the stagedir, creating a zipfile that has the projectname, in zipdest. Returns path to zipfile. Optionally, pass in stagedir and we assume the app is already staged at stagedir (we don't stage again in that case)."""
+        if not stagedir:
+            if not tmpdir:
+                raise AssertionError("'tmpdir' must be set when not passing 'stagedir' so we know where to stage the app")
+            stagedir = self.StageProject(tmpdir)
+        if os.path.exists(zipdest):
+            raise AssertionError("Cannot archive project, %s already exists" % zipdest)
+        fileutils.zip(zipdest, stagedir)
+
+        return zipdest
+
+        
+    def StageProject(self, tmpdir):
+        """ Copies all files that project knows about into staging location. Files that live outside of the project dir are copied into the root of the stage dir, and their recorded file path is updated. Files that live inside of the project dir keep their relative path. Generates .dpl file into staging dir. Returns path to staging dir."""
+
+        projname = self.GetProjectName()
+        stagedir = os.path.join(tmpdir, projname)
+        fileutils.remove(stagedir)
+        os.makedirs(stagedir)        
+
+        # remove invalid files from project
+        self.RemoveInvalidPaths()        
+
+        # required so relative paths are written correctly when .dpl file is
+        # generated below.
+        self.SetFilename(os.path.join(stagedir,
+                                      os.path.basename(self.GetFilename())))
+        projectdir = self.GetModel().homeDir
+
+        # Validate paths before actually copying, and populate a dict
+        # with src->dest so copying is easy.
+        # (fileDict: ProjectFile instance -> dest path (string))
+        fileDict = self._ValidateFilePaths(projectdir, stagedir)
+        
+        # copy files to staging dir
+        self._StageFiles(fileDict)
+
+        # it is unfortunate we require this. it would be nice if filepaths
+        # were only in the project
+        self._FixWsdlAgFiles(stagedir)
+            
+        # generate .dpl file
+        dplfilename = projname + deploymentlib.DEPLOYMENT_EXTENSION
+        dplfilepath = os.path.join(stagedir, dplfilename)
+        self.GenerateDeployment(dplfilepath, productionDeployment=True)
+
+        if self._stageProjectFile:
+            # save project so we get the .agp file. not required for deployment
+            # but convenient if user wants to open the deployment in the IDE
+            agpfilename = projname + PROJECT_EXTENSION
+            agpfilepath = os.path.join(stagedir, agpfilename)        
+            f = None
+            try:
+                f = open(agpfilepath, "w")
+                # setting homeDir correctly is required for the "figuring out
+                # relative paths" logic when saving the project
+                self.GetModel().homeDir = stagedir
+                projectlib.save(f, self.GetModel(), productionDeployment=True)
+            finally:
+                try:
+                    f.close()
+                except: pass
+
+        return stagedir
+
+
+    def _FixWsdlAgFiles(self, stagedir):
+        """For each wsdlag file in the stagedir:
+           Ensure the referenced wsdl file lives in root of stagedir. This
+           should be the case if wsdl is part of project (and staging has run).
+           If it is not at root of stagedir, copy it. Then update path in
+           wsdlag."""
+        files = os.listdir(stagedir)
+        for f in files:
+            if f.endswith(WsdlAgEditor.WsdlAgDocument.WSDL_AG_EXT):
+                wsdlagpath = os.path.join(stagedir, f)
+                fileObject = None
+                mod = False
+                try:
+                    fileObject = open(wsdlagpath)
+                    serviceref = WsdlAgEditor.load(fileObject)
+                    if hasattr(serviceref, "filePath") and serviceref.filePath:
+                        mod = self.UpdateServiceRefFilePath(stagedir,serviceref)
+                finally:
+                    try:
+                        fileObject.close()
+                    except:
+                        pass
+
+                # no need to save the file if we did not change anything
+                if not mod: continue
+
+                # write the wsdlag file
+                fileObject = open(wsdlagpath)
+                try:
+                    serviceref = WsdlAgEditor.save(fileObject, serviceref)
+                finally:
+                    try:
+                        fileObject.close()
+                    except:
+                        pass
+                    
+
+    def UpdateServiceRefFilePath(self, stagedir, serviceref):
+        """Returns True if serviceref.filePath has been updated, False otherwise."""
+        if not os.path.exists(serviceref.filePath):
+            # should be an error? wrong place to
+            # validate that referenced file exists
+            # could print warning
+            return False
+            
+        # If the referenced file is in stagedir already, there's nothing to do
+        if fileutils.hasAncestorDir(serviceref.filePath, stagedir):
             return False
 
+        # The path points outside of stagedir.
+
+        # Check if we already have the referenced wsdl file at root, should be
+        # the case if the referenced wsdl is part of project
+        # Copy it if we don't have it
+        relPath = os.path.basename(serviceref.filePath)
+        stagepath = os.path.join(stagedir, relPath)
+        if not os.path.exists(stagepath):
+            fileutils.copyFile(serviceref.filePath, stagepath)
+
+        serviceref.filePath = relPath
+
+        return True
+        
+        
+    def _StageFiles(self, fileDict):
+        """Copy files to staging directory, update filePath attr of project's ProjectFile instances."""
+
+        # fileDict: ProjectFile instance -> dest path (string)
+        
+        for fileRef, fileDest in fileDict.items():
+            fileutils.copyFile(fileRef.filePath, fileDest)
+            fileRef.filePath = fileDest
+
+    def _ValidateFilePaths(self, projectdir, stagedir):
+        """If paths validate, returns a dict mapping ProjectFile to destination path. Destination path is the path the file needs to be copied to for staging. If paths don't validate, throws an IOError.
+           With our current slightly simplistic staging algorithm, staging will not work iff the project has files outside of the projectdir with names (filename without path) that:
+             -  match filenames of files living at the root of the project.
+             -  are same as those of any other file that lives outside of the projectdir.
+          
+           We have this limitation because we move any file that lives outside of the project dir into the root of the stagedir (== copied project dir). We could make this smarter by either giving files unique names if we detect a collistion, or by creating some directory structure instead of putting all files from outside of the projectdir into the root of the stagedir (== copied projectdir)."""
+
+        # ProjectFile instance -> dest path (string)
+        rtn = {}
+        
+        projectRootFiles = sets.Set()   # live at project root
+        foreignFiles = sets.Set()       # live outside of project
+
+        fileRefsToDeploy = self.GetFileRefs()
+
+        for fileRef in fileRefsToDeploy:
+            relPath = fileutils.getRelativePath(fileRef.filePath, projectdir)
+            filename = os.path.basename(fileRef.filePath)            
+            if not relPath: # file lives outside of project dir...
+
+                # do we have another file with the same name already?
+                if filename in foreignFiles:
+                    raise IOError("More than one file with name \"%s\" lives outside of the project. These files need to have unique names" % filename)
+                foreignFiles.add(filename)       
+                fileDest = os.path.join(stagedir, filename)
+            else:
+                # file lives somewhere within the project dir
+                fileDest = os.path.join(stagedir, relPath)
+                if not os.path.dirname(relPath):
+                    projectRootFiles.add(filename)
+                
+            rtn[fileRef] = fileDest
+
+        # make sure we won't collide with a file that lives at root of
+        # projectdir when moving files into project
+        for filename in foreignFiles:
+            if filename in projectRootFiles:
+                raise IOError("File outside of project, \"%s\", cannot have same name as file at project root" % filename)
+
+        # REVIEW stoens@activegrid.com 19-Oct-05 --
+        # We could also validate that user does not already have a .dpl file
+        # since we're going to generate one...
+        
+        return rtn
+    
+                            
+    def RenameFolder(self, oldFolderPath, newFolderPath):
+        for file in self.GetModel()._files:
+            if file.logicalFolder == oldFolderPath:
+                file.logicalFolder = newFolderPath
+        self.UpdateAllViews(hint = ("rename folder", self, oldFolderPath, newFolderPath))
+        self.Modify(True)
+        return True
+
 
     def GetFiles(self):
-        return self._projectModel._files
+        return self.GetModel().filePaths
+
+
+    def GetFileRefs(self):
+        return self.GetModel().findAllRefs()
+
+
+    def SetFileRefs(self, fileRefs):
+        return self.GetModel().setRefs(fileRefs)    
 
 
     def IsFileInProject(self, filename):
-        return filename in self.GetFiles()
+        return self.GetModel().FindFile(filename)
+        
+
+    def GetAppInfo(self):
+        return self.GetModel().GetAppInfo()
+
+
+    def GetAppDocMgr(self):
+        return self.GetModel()
+        
+
+    def GetProjectName(self):
+        return os.path.splitext(os.path.basename(self.GetFilename()))[0]
+
+
+    def GetDeploymentFilepath(self):
+        projectName = self.GetProjectName()
+        return os.path.join(self.GetModel().homeDir, projectName + "RunTime_tmp" + deploymentlib.DEPLOYMENT_EXTENSION)
+        
+
+    def GenerateDeployment(self, deployFilepath=None, preview=False, productionDeployment=False):
+        if ACTIVEGRID_BASE_IDE:
+            return
+        
+        def FindOpenDoc(filePath):
+            openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
+            for openDoc in openDocs:
+                if openDoc.GetFilename() == filePath:
+                    return openDoc
+            return None
+
+        if not deployFilepath:
+            deployFilepath = self.GetDeploymentFilepath()
+            
+        deployment = deploymentlib.Deployment(deployFilepath)
+
+        defaultFlagsNoView = wx.GetApp().GetDocumentManager().GetFlags()|wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE|wx.lib.docview.DOC_NO_VIEW
+        self.GetAppInfo().CopyToDeployment(deployment)
+
+        for file in self.GetModel()._files:
+            if not file.type:
+                continue
+            elif file.type == basedocmgr.FILE_TYPE_SERVICE:  # set serviceRefs
+                doc = wx.GetApp().GetDocumentManager().CreateDocument(file.filePath, flags=defaultFlagsNoView)
+                if (doc == None):  # already open
+                    doc = FindOpenDoc(file.filePath)
+                if doc:
+                    serviceRef = doc.GetModel()
+                    if serviceRef:
+                        documentRef = copy.copy(serviceRef)
+                        deployment.serviceRefs.append(documentRef)
+
+                        if not productionDeployment:
+                            # filePath should point to location of wsdl file
+                            # wsdlag filePath points to relative path to wsdl file from wsdlag location
+                            # but deployment needs relative path from deployment location, so here's the conversion
+                            curDir = os.path.dirname(self.GetFilename()) + os.sep
+                            filePath = file.document.fileName
+                            if (filePath == None):
+                                raise Exception("Cannot find file \"%s\"" % file.filePath)
+                            if filePath.startswith(curDir):
+                                filePath = filePath[len(curDir):]
+                            if os.sep != '/':
+                                filePath = filePath.replace(os.sep, "/")
+                            documentRef.filePath = filePath
+                        
+                            documentRef.document = file.document
+                            
+                        if serviceRef.serviceType == deploymentlib.SERVICE_DATABASE and serviceRef.databaseService:
+                            dataSourceService = wx.GetApp().GetService(DataModelEditor.DataSourceService)
+                            ds = dataSourceService.getDataSource(serviceRef.databaseService.datasourceName)
+                            if ds:
+                                found = False
+                                for d in deployment.dataSources:
+                                    if d.name == ds.name:
+                                        found = True
+                                        break
+                                if not found:
+                                    deployment.dataSources.append(ds)
+            else:
+                curDir = os.path.dirname(self.GetFilename()) + os.sep
+                filePath = file.filePath
+                if filePath.startswith(curDir):
+                    filePath = filePath[len(curDir):]
+                if os.sep != '/':
+                    filePath = filePath.replace(os.sep, "/")
+                    
+                if file.type == basedocmgr.FILE_TYPE_XFORM:
+                    documentRef = deploymentlib.XFormRef()
+                    deployment.xformRefs.append(documentRef)
+                elif file.type == basedocmgr.FILE_TYPE_PROCESS:
+                    documentRef = deploymentlib.ProcessRef()
+                    deployment.processRefs.append(documentRef)
+                elif file.type == basedocmgr.FILE_TYPE_SCHEMA:
+                    # set schemaRefs
+                    documentRef = deploymentlib.SchemaRef()
+                    deployment.schemaRefs.append(documentRef)
+
+                    # set dataSources
+                    doc = wx.GetApp().GetDocumentManager().CreateDocument(file.filePath, flags=defaultFlagsNoView)
+                    if (doc == None):  # already open
+                        doc = FindOpenDoc(file.filePath)
+                    if doc:
+                        dataSourceService = wx.GetApp().GetService(DataModelEditor.DataSourceService)
+                        ds = dataSourceService.getDataSource(doc.GetModel().getDefaultDataSourceName())
+                        if ds:
+                            found = False
+                            for d in deployment.dataSources:
+                                if d.name == ds.name:
+                                    found = True
+                                    break
+                            if not found:
+                                deployment.dataSources.append(ds)
+                                
+                        # set keyServices
+                        keyServices = doc.GetModel().keyServices
+                        for keyService in keyServices:        
+                            # add default key service to deployment
+                            if not productionDeployment:
+                                mainModuleDir = sysutils.mainModuleDir
+                            else:
+                                mainModuleDir = sysutils.MAINMODULE_DIR_VAR
+                            wsdlFullPath = os.path.join(mainModuleDir, "..", "wsdl", DataModelEditor.DEFAULT_KEYSERVICE_WSDL_FILENAME)
+                            keyServiceRef = deploymentlib.ServiceRef(filePath=wsdlFullPath)
+                            deployment.serviceRefs.append(keyServiceRef)
+                            
+                            keyServiceRef.name = keyService
+                            keyServiceRef.serviceType = deploymentlib.SERVICE_LOCAL
+                            keyServiceRef.localService = deploymentlib.LocalService()
+                            if keyService == DataModelEditor.DEFAULT_KEYSERVICE:
+                                keyServiceRef.filePath = wsdlFullPath
+                                keyServiceRef.localServiceClassName = DataModelEditor.DEFAULT_KEYSERVICE_CLASSNAME
+                            
+
+                elif file.type == basedocmgr.FILE_TYPE_SKIN:
+                    documentRef = deploymentlib.SkinRef(deployment)
+                    deployment.skinref = documentRef
+                elif file.type == basedocmgr.FILE_TYPE_IDENTITY:
+                    documentRef = deploymentlib.IdentityRef()
+                    deployment.identityRefs.append(documentRef)
+                else:
+                    continue
+                        
+                documentRef.name = file.name
+                documentRef.filePath = filePath
+                doc = FindOpenDoc(file.filePath)
+                if doc and hasattr(doc, 'GetModel'):
+                    documentRef.document = doc.GetModel()
+                    if isinstance(documentRef, deploymentlib.XFormRef):
+                        doc.GetModel().linkDeployment(deployment, deployment.loader)
+       
+        if preview:
+            deployment.initialize()  # used in preview only
+            
+        if 0: # preview:  # setPrototype not working, commented this out
+            deploymentlib._deploymentCache.setPrototype(deployment.fileName, deployment)
+        else:
+            deploymentlib.saveThroughCache(deployment.fileName, deployment)
+
+        return deployFilepath        
+        
+
+    def AddNameSpaces(self, filePaths):
+        """ Add any new wsdl namespaces to bpel files """
+        """ Add any new schema namespaces to wsdl files """
+        if ACTIVEGRID_BASE_IDE:
+            return
+
+        serviceRefs = self.GetAppDocMgr().allServiceRefs  # wsdl
+
+        processRefs = self.GetAppDocMgr().findRefsByFileType(basedocmgr.FILE_TYPE_PROCESS) # bpel
+        if processRefs and serviceRefs:
+            for processRef in processRefs:
+                processDoc = processRef._GetDoc()
+                process = processDoc.GetModel()
+                
+                modified = False
+                for serviceRef in serviceRefs:
+                    wsdl = serviceRef.document
+                    if (wsdl.fileName in filePaths
+                    or serviceRef.filePath in filePaths):
+                        wsdlLongNS = wsdl.targetNamespace
+                        wsdlShortNS = self.GetAppDocMgr().findShortNS(wsdlLongNS)
+                        if not wsdlShortNS:
+                            wsdlShortNS = xmlutils.genShortNS(process, wsdlLongNS)
+                        xmlutils.addNSAttribute(process, wsdlShortNS, wsdlLongNS)
+                        modified = True
+                if modified:
+                    processDoc.OnSaveDocument(processDoc.GetFilename())
+
+        schemaRefs = self.GetAppDocMgr().findRefsByFileType(basedocmgr.FILE_TYPE_SCHEMA)
+        if schemaRefs and serviceRefs:
+            for serviceRef in serviceRefs:
+                wsdl = serviceRef.document
+                wsdlDoc = serviceRef.ideDocument
+                
+                modified = False
+                for schemaRef in schemaRefs:
+                    schema = schemaRef.document
+                    if schema.fileName in filePaths:
+                        schemaLongNS = schema.targetNamespace
+                        schemaShortNS = self.GetAppDocMgr().findShortNS(schemaLongNS)
+                        if not schemaShortNS:
+                            schemaShortNS = xmlutils.genShortNS(process, schemaLongNS)
+                        xmlutils.addNSAttribute(wsdl, schemaShortNS, schemaLongNS)
+                        modified = True
+                if modified:
+                    wsdlDoc.OnSaveDocument(wsdlDoc.GetFilename())
 
 
 class NewProjectWizard(Wizard.BaseWizard):
 
     WIZTITLE = _("New Project Wizard")
 
+
     def __init__(self, parent):
         self._parent = parent
         self._fullProjectPath = None
         Wizard.BaseWizard.__init__(self, parent, self.WIZTITLE)
         self._projectLocationPage = self.CreateProjectLocation(self)
         wx.wizard.EVT_WIZARD_PAGE_CHANGING(self, self.GetId(), self.OnWizPageChanging)
-            
-    
-    def CreateProjectLocation(self,wizard):   
+
+
+    def CreateProjectLocation(self,wizard):
         page = Wizard.TitledWizardPage(wizard, _("Project File Location"))
 
         page.GetSizer().Add(wx.StaticText(page, -1, _("\nSelect the directory and filename for the project.\n\n")))
-        self._projectName, self._dirCtrl, sizer, self._fileValidation = UICommon.CreateDirectoryControl(page, _("File Name:"), _("Directory:"), _("agp"), startingDirectory=os.getcwd())
+        self._projectName, self._dirCtrl, sizer, self._fileValidation = UICommon.CreateDirectoryControl(page, fileExtension="agp", appDirDefaultStartDir=True)
         page.GetSizer().Add(sizer, 1, flag=wx.EXPAND)
 
         wizard.Layout()
         wizard.FitToPage(page)
-        return page    
+        return page
 
 
     def RunWizard(self, existingTables = None, existingRelationships = None):
         status = wx.wizard.Wizard.RunWizard(self, self._projectLocationPage)
         if status:
+            wx.ConfigBase_Get().Write(PROJECT_DIRECTORY_KEY, self._dirCtrl.GetValue())
             docManager = wx.GetApp().GetTopWindow().GetDocumentManager()
             if os.path.exists(self._fullProjectPath):
                 # What if the document is already open and we're overwriting it?
@@ -296,8 +946,9 @@ class NewProjectWizard(Wizard.BaseWizard):
             for template in docManager.GetTemplates():
                 if template.GetDocumentType() == ProjectDocument:
                     doc = template.CreateDocument(self._fullProjectPath, flags = wx.lib.docview.DOC_NEW)
-                    doc.OnSaveDocument(self._fullProjectPath) 
-                    view = doc.GetFirstView()
+                    doc.OnSaveDocument(self._fullProjectPath)
+                    projectService = wx.GetApp().GetService(ProjectService)
+                    view = projectService.GetView()
                     view.AddProjectToView(doc)
                     break
 
@@ -308,14 +959,13 @@ class NewProjectWizard(Wizard.BaseWizard):
     def OnWizPageChanging(self, event):
         if event.GetDirection():  # It's going forwards
             if event.GetPage() == self._projectLocationPage:
-                if not self._fileValidation():
+                if not self._fileValidation(noFirstCharDigit=True):
                     event.Veto()
-                    return 
-                self._fullProjectPath = os.path.join(self._dirCtrl.GetValue(),UICommon.MakeNameEndInExtension(self._projectName.GetValue(),'.agp'))
-                    
-                
-    
-    def OnShowCreatePages(self):                    
+                    return
+                self._fullProjectPath = os.path.join(self._dirCtrl.GetValue(),UICommon.MakeNameEndInExtension(self._projectName.GetValue(), PROJECT_EXTENSION))
+
+
+    def OnShowCreatePages(self):
         self.Hide()
         import DataModelEditor
         requestedPos = self.GetPositionTuple()
@@ -327,14 +977,17 @@ class NewProjectWizard(Wizard.BaseWizard):
            self._schemaName.SetValue(wiz.GetSchemaFileName())
         wiz.Destroy()
         self.Show(True)
-         
+
 
 class ProjectTemplate(wx.lib.docview.DocTemplate):
 
 
     def CreateDocument(self, path, flags):
         if path:
-            return wx.lib.docview.DocTemplate.CreateDocument(self, path, flags)
+            doc = wx.lib.docview.DocTemplate.CreateDocument(self, path, flags)
+            if path:
+                doc.GetModel()._projectDir = os.path.dirname(path)
+            return doc
         else:
             wiz = NewProjectWizard(wx.GetApp().GetTopWindow())
             wiz.RunWizard()
@@ -345,102 +998,198 @@ class ProjectTemplate(wx.lib.docview.DocTemplate):
 class ProjectAddFilesCommand(wx.lib.docview.Command):
 
 
-    def __init__(self, projectDoc, files):
+    def __init__(self, projectDoc, filePaths, folderPath=None, types=None, names=None):
         wx.lib.docview.Command.__init__(self, canUndo = True)
         self._projectDoc = projectDoc
-        self._files = files
+        self._allFilePaths = filePaths
+        self._folderPath = folderPath
+        self._types = types
+        self._names = names
+        
+        if not self._types:
+            self._types = []
+            projectService = wx.GetApp().GetService(ProjectService)
+            for filePath in self._allFilePaths:
+                self._types.append(projectService.FindFileTypeDefault(filePath))
+
+        # list of files that will really be added
+        self._newFiles = []
+        for filePath in self._allFilePaths:
+            if not projectDoc.GetModel().FindFile(filePath):
+                self._newFiles.append(filePath)
 
 
     def GetName(self):
-        if len(self._files) == 1:
-            return _("Add File %s") % os.path.basename(self._files[0])
+        if len(self._allFilePaths) == 1:
+            return _("Add File %s") % os.path.basename(self._allFilePaths[0])
         else:
             return _("Add Files")
 
 
     def Do(self):
-        return self._projectDoc.AddFiles(self._files)
+        return self._projectDoc.AddFiles(self._allFilePaths, self._folderPath, self._types, self._names)
 
 
     def Undo(self):
-        return self._projectDoc.RemoveFiles(self._files)
+        return self._projectDoc.RemoveFiles(self._newFiles)
 
 
 class ProjectRemoveFilesCommand(wx.lib.docview.Command):
 
 
-    def __init__(self, files):
+    def __init__(self, projectDoc, files):
         wx.lib.docview.Command.__init__(self, canUndo = True)
+        self._projectDoc = projectDoc
         self._files = files
 
 
     def GetName(self):
         if len(self._files) == 1:
-            return _("Remove File %s") % os.path.basename((self._files[0])[1])
+            return _("Remove File %s") % os.path.basename(self._files[0].filePath)
         else:
             return _("Remove Files")
 
 
     def Do(self):
-        status = False
-        projects = []
-        for data in self._files:
-            proj, filename = data
-            if proj not in projects:
-                projects.append(proj)
-        for project in projects:
-            files = []
-            for data in self._files:
-                proj, filename = data
-                if project == proj:
-                    files.append(filename)
-            status = project.RemoveFiles(files) or status
-        return status
+        return self._projectDoc.RemoveFiles(files=self._files)
 
 
     def Undo(self):
-        status = False
-        projects = []
-        for data in self._files:
-            proj, filename = data
-            if proj not in projects:
-                projects.append(proj)
-        for project in projects:
-            files = []
-            for data in self._files:
-                proj, filename = data
-                if project == proj:
-                    files.append(filename)
-            status = project.AddFiles(files) or status
-        return status
-        
+        return self._projectDoc.AddFiles(files=self._files)
+
+
 
 class ProjectRenameFileCommand(wx.lib.docview.Command):
 
 
-    def __init__(self, projectDoc, oldFile, newFile, isProject = False):
+    def __init__(self, projectDoc, oldFilePath, newFilePath, isProject = False):
         wx.lib.docview.Command.__init__(self, canUndo = True)
         self._projectDoc = projectDoc
-        self._oldFile = oldFile
-        self._newFile = newFile
+        self._oldFilePath = oldFilePath
+        self._newFilePath = newFilePath
         self._isProject = isProject
 
 
     def GetName(self):
-        return _("Rename File %s to %s") % (os.path.basename(self._oldFile), os.path.basename(self._newFile))
+        return _("Rename File %s to %s") % (os.path.basename(self._oldFilePath), os.path.basename(self._newFilePath))
 
 
     def Do(self):
-        return self._projectDoc.RenameFile(self._oldFile, self._newFile, self._isProject)
+        return self._projectDoc.RenameFile(self._oldFilePath, self._newFilePath, self._isProject)
 
 
     def Undo(self):
-        return self._projectDoc.RenameFile(self._newFile, self._oldFile, self._isProject)
+        return self._projectDoc.RenameFile(self._newFilePath, self._oldFilePath, self._isProject)
 
 
-class ProjectTreeCtrl(wx.TreeCtrl):
+class ProjectRenameFolderCommand(wx.lib.docview.Command):
+    def __init__(self, doc, oldFolderPath, newFolderPath):
+        wx.lib.docview.Command.__init__(self, canUndo = True)
+        self._doc = doc
+        self._oldFolderPath = oldFolderPath
+        self._newFolderPath = newFolderPath
+
+
+    def GetName(self):
+        return _("Rename Folder %s to %s") % (os.path.basename(self._oldFolderPath), os.path.basename(self._newFolderPath))
+
+
+    def Do(self):
+        return self._doc.RenameFolder(self._oldFolderPath, self._newFolderPath)
+
+
+    def Undo(self):
+        return self._doc.RenameFolder(self._newFolderPath, self._oldFolderPath)
     
 
+class ProjectAddFolderCommand(wx.lib.docview.Command):
+    def __init__(self, view, doc, folderpath):
+        wx.lib.docview.Command.__init__(self, canUndo = True)
+        self._doc = doc
+        self._view = view
+        self._folderpath = folderpath
+
+
+    def GetName(self):
+        return _("Add Folder %s") % (os.path.basename(self._folderpath))
+
+
+    def Do(self):
+        if self._view.GetDocument() != self._doc:
+            return True
+        status = self._view.AddFolder(self._folderpath)
+        if status:
+            self._view._treeCtrl.UnselectAll()
+            item = self._view._treeCtrl.FindFolder(self._folderpath)
+            self._view._treeCtrl.SelectItem(item)
+        return status
+
+
+    def Undo(self):
+        if self._view.GetDocument() != self._doc:
+            return True
+        return self._view.DeleteFolder(self._folderpath)
+
+
+class ProjectRemoveFolderCommand(wx.lib.docview.Command):
+    def __init__(self, view, doc, folderpath):
+        wx.lib.docview.Command.__init__(self, canUndo = True)
+        self._doc = doc
+        self._view = view
+        self._folderpath = folderpath
+
+
+    def GetName(self):
+        return _("Remove Folder %s") % (os.path.basename(self._folderpath))
+
+
+    def Do(self):
+        if self._view.GetDocument() != self._doc:
+            return True
+        return self._view.DeleteFolder(self._folderpath)
+
+
+    def Undo(self):
+        if self._view.GetDocument() != self._doc:
+            return True
+        status = self._view.AddFolder(self._folderpath)
+        if status:
+            self._view._treeCtrl.UnselectAll()
+            item = self._view._treeCtrl.FindFolder(self._folderpath)
+            self._view._treeCtrl.SelectItem(item)
+        return status
+
+
+class ProjectMoveFilesCommand(wx.lib.docview.Command):
+
+    def __init__(self, doc, files, folderPath):
+        wx.lib.docview.Command.__init__(self, canUndo = True)
+        self._doc = doc
+        self._files = files
+        self._newFolderPath = folderPath
+        
+        self._oldFolderPaths = []
+        for file in self._files:
+            self._oldFolderPaths.append(file.logicalFolder)
+            
+
+    def GetName(self):
+        if len(self._files) == 1:
+            return _("Move File %s") % os.path.basename(self._files[0].filePath)
+        else:    
+            return _("Move Files")
+
+
+    def Do(self):
+        return self._doc.MoveFiles(self._files, self._newFolderPath)
+
+
+    def Undo(self):
+        return self._doc.MoveFiles(self._files, self._oldFolderPaths)            
+
+
+class ProjectTreeCtrl(wx.TreeCtrl):
+
     #----------------------------------------------------------------------------
     # Overridden Methods
     #----------------------------------------------------------------------------
@@ -461,7 +1210,7 @@ class ProjectTreeCtrl(wx.TreeCtrl):
                         print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName
                 iconIndex = iconList.AddIcon(icon)
                 self._iconIndexLookup.append((template, iconIndex))
-                
+
         icon = getBlankIcon()
         if icon.GetHeight() != 16 or icon.GetWidth() != 16:
             icon.SetHeight(16)
@@ -469,64 +1218,157 @@ class ProjectTreeCtrl(wx.TreeCtrl):
             if wx.GetApp().GetDebug():
                 print "Warning: getBlankIcon isn't 16x16, not crossplatform"
         self._blankIconIndex = iconList.AddIcon(icon)
+        
+        icon = getFolderClosedIcon()
+        if icon.GetHeight() != 16 or icon.GetWidth() != 16:
+            icon.SetHeight(16)
+            icon.SetWidth(16)
+            if wx.GetApp().GetDebug():
+                print "Warning: getFolderIcon isn't 16x16, not crossplatform"
+        self._folderClosedIconIndex = iconList.AddIcon(icon)
+
+        icon = getFolderOpenIcon()
+        if icon.GetHeight() != 16 or icon.GetWidth() != 16:
+            icon.SetHeight(16)
+            icon.SetWidth(16)
+            if wx.GetApp().GetDebug():
+                print "Warning: getFolderIcon isn't 16x16, not crossplatform"
+        self._folderOpenIconIndex = iconList.AddIcon(icon)
+
         self.AssignImageList(iconList)
 
 
     def OnCompareItems(self, item1, item2):
-        return cmp(self.GetItemText(item1).lower(), self.GetItemText(item2).lower())
+        item1IsFolder = (self.GetPyData(item1) == None)
+        item2IsFolder = (self.GetPyData(item2) == None)
+        if (item1IsFolder == item2IsFolder):  # if both are folders or both not
+            return cmp(self.GetItemText(item1).lower(), self.GetItemText(item2).lower())
+        elif item1IsFolder and not item2IsFolder: # folders sort above non-folders
+            return -1
+        elif not item1IsFolder and item2IsFolder: # folders sort above non-folders
+            return 1
+        
 
+    def AppendFolder(self, parent, folderName):
+        item = wx.TreeCtrl.AppendItem(self, parent, folderName)
+        self.SetItemImage(item, self._folderClosedIconIndex, wx.TreeItemIcon_Normal)
+        self.SetItemImage(item, self._folderOpenIconIndex, wx.TreeItemIcon_Expanded)
+        self.SetPyData(item, None)
+        return item
 
-    def AppendItem(self, parent, filepath):
-        item = wx.TreeCtrl.AppendItem(self, parent, filepath)
+
+    def AppendItem(self, parent, filename, file):
+        item = wx.TreeCtrl.AppendItem(self, parent, filename)
 
         found = False
-        template = wx.GetApp().GetDocumentManager().FindTemplateForPath(filepath)
-        if not template and parent == self.GetRootItem(): # If the parent is a root it's a new project
-            template = wx.GetApp().GetDocumentManager().FindTemplateForPath('.agp')
+        template = wx.GetApp().GetDocumentManager().FindTemplateForPath(filename)
         if template:
             for t, iconIndex in self._iconIndexLookup:
                 if t is template:
                     self.SetItemImage(item, iconIndex, wx.TreeItemIcon_Normal)
                     self.SetItemImage(item, iconIndex, wx.TreeItemIcon_Expanded)
-                    self.SetItemImage(item, iconIndex, wx.TreeItemIcon_Selected)
+##                    self.SetItemImage(item, iconIndex, wx.TreeItemIcon_Selected)
                     found = True
                     break
 
         if not found:
             self.SetItemImage(item, self._blankIconIndex, wx.TreeItemIcon_Normal)
             self.SetItemImage(item, self._blankIconIndex, wx.TreeItemIcon_Expanded)
-            self.SetItemImage(item, self._blankIconIndex, wx.TreeItemIcon_Selected)
+##            self.SetItemImage(item, self._blankIconIndex, wx.TreeItemIcon_Selected)
 
+        self.SetPyData(item, file)
+        
         return item
 
 
-    #----------------------------------------------------------------------------
-    # Client Data
-    #----------------------------------------------------------------------------
-   
-    def SetData(self, item, longFilename, projectDoc=None):
-        self.SetPyData(item, (longFilename, projectDoc))
-       
-    def GetData(self, item):
-        """ returns longFilename and optional 
-        """
-        data = self.GetPyData(item)
-        if not data:
-            return (None, None)
-        return data
+    def AddFolder(self, folderPath):
+        folderItems = []
+        
+        if folderPath != None:
+            folderTree = folderPath.split('/')
+            
+            item = self.GetRootItem()
+            for folderName in folderTree:
+                found = False
+                
+                (child, cookie) = self.GetFirstChild(item)
+                while child.IsOk():
+                    file = self.GetPyData(child)
+                    if file:
+                        pass
+                    else: # folder
+                        if self.GetItemText(child) == folderName:
+                            item = child
+                            found = True
+                            break
+                    (child, cookie) = self.GetNextChild(item, cookie)
+                    
+                if not found:
+                    item = self.AppendFolder(item, folderName)
+                    folderItems.append(item)
 
+        return folderItems
+        
 
-    def GetLongFilename(self, item):
-        return self.GetData(item)[0]
+    def FindItem(self, filePath, parentItem=None):
+        if not parentItem:
+            parentItem = self.GetRootItem()
+            
+        (child, cookie) = self.GetFirstChild(parentItem)
+        while child.IsOk():
+            file = self.GetPyData(child)
+            if file:
+                if file.filePath == filePath:
+                    return child
+            else: # folder
+                result = self.FindItem(filePath, child)  # do recursive call
+                if result:
+                    return result
+            (child, cookie) = self.GetNextChild(parentItem, cookie)
+        
+        return None
 
 
-    def GetProjectDoc(self, item):
-        return self.GetData(item)[1]
+    def FindFolder(self, folderPath):
+        if folderPath != None:
+            folderTree = folderPath.split('/')
+            
+            item = self.GetRootItem()
+            for folderName in folderTree:
+                found = False
+                
+                (child, cookie) = self.GetFirstChild(item)
+                while child.IsOk():
+                    file = self.GetPyData(child)
+                    if file:
+                        pass
+                    else: # folder
+                        if self.GetItemText(child) == folderName:
+                            item = child
+                            found = True
+                            break
+                    (child, cookie) = self.GetNextChild(item, cookie)
+                    
+            if found:
+                return item
+                
+        return None
 
 
-class ProjectView(wx.lib.docview.View):
+    def FindClosestFolder(self, x, y):
+        item, flags = self.HitTest((x,y))
+        if item:
+            file = self.GetPyData(item)
+            if file:
+                item = self.GetItemParent(item)
+                return item
+            return item
+        return None
+
 
+class ProjectView(wx.lib.docview.View):
+    LOGICAL_MODE  = "logical"
+    PHYSICAL_MODE = "physical"
 
     #----------------------------------------------------------------------------
     # Overridden methods
@@ -534,10 +1376,18 @@ class ProjectView(wx.lib.docview.View):
 
     def __init__(self, service = None):
         wx.lib.docview.View.__init__(self)
-        self._service = service  # not used, but kept to match other Services
+        # self._service = service  # not used, but kept to match other Services
+        self._projectChoice = None
+        self._logicalBtn = None
+        self._physicalBtn = None
         self._treeCtrl = None
         self._editingSoDontKillFocus = False
         self._checkEditMenu = True
+        self._loading = False  # flag to not to try to saving state of folders while it is loading
+
+
+    def GetDocumentManager(self):  # Overshadow this since the superclass uses the view._viewDocument attribute directly, which the project editor doesn't use since it hosts multiple docs
+        return wx.GetApp().GetDocumentManager()
 
 
     def Destroy(self):
@@ -548,43 +1398,15 @@ class ProjectView(wx.lib.docview.View):
 
 
     def GetDocument(self):
-        if not self._treeCtrl:
+        if not self._projectChoice:
             return None
-            
-        items = self._treeCtrl.GetSelections()
-        if not items: # No selection, so just return first project
-            item = self._treeCtrl.GetFirstVisibleItem()
-            if item.IsOk():
-                return self._GetItemProject(item)
-            else:
-                return None
-                
-        for item in items:
-            project = self._GetItemProject(item)
-            if project:
-                return project
-                
-        return None
-
-
-    def GetDocumentManager(self):  # Overshadow this since the superclass uses the view._viewDocument attribute directly, which the project editor doesn't use since it hosts multiple docs
-        return wx.GetApp().GetDocumentManager()
 
+        selItem = self._projectChoice.GetSelection()
+        if selItem == wx.NOT_FOUND:
+            return None
 
-    def OnChangeFilename(self):
-        if self.GetFrame():
-            title = _("Projects")
-            if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI and wx.GetApp().GetAppName():
-                title =  title + " - " + wx.GetApp().GetAppName()
-            self.GetFrame().SetTitle(title)
-        project = self.GetDocument()
-        if project:
-            projectItem = self._GetProjectItem(project)
-            name = self._treeCtrl.GetItemText(self._GetProjectItem(project))
-            name2 = self._MakeProjectName(project)
-            if name != name2:
-                self._treeCtrl.SetItemText(projectItem, name2)
-                self._treeCtrl.SortChildren(self._treeCtrl.GetRootItem())
+        document = self._projectChoice.GetClientData(selItem)
+        return document
 
 
     def Activate(self, activate = True):
@@ -604,6 +1426,7 @@ class ProjectView(wx.lib.docview.View):
             self._embeddedWindow = wx.GetApp().GetTopWindow().GetEmbeddedWindow(wx.lib.pydocview.EMBEDDED_WINDOW_TOPLEFT)
             self.SetFrame(self._embeddedWindow)
             frame = self._embeddedWindow
+            wx.EVT_SIZE(frame, self.OnSize)
         else:
             self._embeddedWindow = None
             pos = config.ReadInt("ProjectFrameXLoc", -1), config.ReadInt("ProjectFrameYLoc", -1)
@@ -623,17 +1446,48 @@ class ProjectView(wx.lib.docview.View):
             if config.ReadInt("ProjectFrameMaximized", False):
                 frame.Maximize(True)
 
-        sizer = wx.BoxSizer()
-        self._treeCtrl = ProjectTreeCtrl(frame, -1, style = wx.TR_HIDE_ROOT | wx.TR_HAS_BUTTONS | wx.TR_EDIT_LABELS | wx.TR_DEFAULT_STYLE | wx.TR_MULTIPLE)
+        panel = wx.Panel(frame, -1)
+
+        sizer = wx.BoxSizer(wx.VERTICAL)
+
+        butSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        self._projectChoice = wx.Choice(panel, -1)
+        panel.Bind(wx.EVT_CHOICE, self.OnProjectSelect, self._projectChoice)
+        w, h = self._projectChoice.GetSize()
+
+        self._logicalBtn = wx.lib.buttons.GenBitmapToggleButton(panel, -1, getLogicalModeOffBitmap(), size=(h,h))
+        self._logicalBtn.SetBitmapSelected(getLogicalModeOnBitmap())
+        self._logicalBtn.SetToggle(True)
+        self._logicalBtn.SetToolTipString(_("View Files by Logical Groups"))
+        panel.Bind(wx.EVT_BUTTON, self.OnSelectMode, self._logicalBtn)
+        self._physicalBtn = wx.lib.buttons.GenBitmapToggleButton(panel, -1, getPhysicalModeOffBitmap(), size=(h,h))
+        self._physicalBtn.SetBitmapSelected(getPhysicalModeOnBitmap())
+        self._physicalBtn.SetToolTipString(_("View Files by Physical Disk Layout"))
+        panel.Bind(wx.EVT_BUTTON, self.OnSelectMode, self._physicalBtn)
+        
+        butSizer.Add(self._projectChoice, 1, wx.EXPAND)
+        butSizer.Add(self._logicalBtn, 0)
+        butSizer.Add(self._physicalBtn, 0)
+        sizer.Add(butSizer, 0, wx.EXPAND)
+
+        self._treeCtrl = ProjectTreeCtrl(panel, -1, style = wx.TR_HIDE_ROOT | wx.TR_HAS_BUTTONS | wx.TR_EDIT_LABELS | wx.TR_DEFAULT_STYLE | wx.TR_MULTIPLE | wx.TR_EXTENDED)
         self._treeCtrl.AddRoot(_("Projects"))
         wx.EVT_TREE_BEGIN_DRAG(self._treeCtrl, self._treeCtrl.GetId(), self.OnBeginDrag)
         wx.EVT_TREE_END_DRAG(self._treeCtrl, self._treeCtrl.GetId(), self.OnEndDrag)
-
         if self._embeddedWindow:
-            sizer.Add(self._treeCtrl)
-            sizer.Fit(frame)
+            sizer.Add(self._treeCtrl, 1, wx.EXPAND|wx.BOTTOM, HALF_SPACE)  # allow space for embedded window resize-sash
+        else:
+            sizer.Add(self._treeCtrl, 1, wx.EXPAND)
+        panel.SetSizer(sizer)
+        
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        
+        if wx.GetApp().IsMDI():
+            sizer.Add(panel, 1, wx.EXPAND|wx.BOTTOM, 1) # wx.Bug: without bottom margin, can't resize embedded window
         else:
-            sizer.Add(self._treeCtrl, 1, wx.EXPAND, 0)
+            sizer.Add(panel, 1, wx.EXPAND)
+            
         frame.SetSizer(sizer)
         frame.Layout()
         self.Activate()
@@ -649,56 +1503,76 @@ class ProjectView(wx.lib.docview.View):
         wx.EVT_TREE_BEGIN_LABEL_EDIT(self._treeCtrl, self._treeCtrl.GetId(), self.OnBeginLabelEdit)
         wx.EVT_TREE_END_LABEL_EDIT(self._treeCtrl, self._treeCtrl.GetId(), self.OnEndLabelEdit)
         wx.EVT_RIGHT_DOWN(self._treeCtrl, self.OnRightClick)
+        wx.EVT_LEFT_DOWN(self._treeCtrl, self.OnLeftClick)
         wx.EVT_KEY_DOWN(self._treeCtrl, self.OnKeyPressed)
+        wx.EVT_TREE_ITEM_COLLAPSED(self._treeCtrl, self._treeCtrl.GetId(), self.SaveFolderState)
+        wx.EVT_TREE_ITEM_EXPANDED(self._treeCtrl, self._treeCtrl.GetId(), self.SaveFolderState)
         # wx.EVT_COMMAND_RIGHT_CLICK(self._treeCtrl, self._treeCtrl.GetId(), self.OnRightClick) # wxBug: This isn't working for some reason
 
-        # drag-and-drop support
-        dt = ProjectFileDropTarget(self)
-        self._treeCtrl.SetDropTarget(dt)
+        # drag-and-drop support
+        dt = ProjectFileDropTarget(self)
+        self._treeCtrl.SetDropTarget(dt)
+
+        return True
+
+
+    def OnSelectMode(self, event):
+        btn = event.GetEventObject()
+        down = event.GetIsDown()
+        if btn == self._logicalBtn:
+            self._physicalBtn.SetToggle(not down)
+        else:  # btn == self._physicalBtn:
+            self._logicalBtn.SetToggle(not down)
+        self.LoadProject(self.GetDocument())
+
+
+    def GetMode(self):
+        if not self._physicalBtn.up:
+            return ProjectView.PHYSICAL_MODE
+        else:  # elif self._logicalBtn.GetValue():
+            return ProjectView.LOGICAL_MODE
+
 
-        return True
+    def OnProjectSelect(self, event=None):
+        self.LoadProject(self.GetDocument())
+        if self.GetDocument():
+            filename = self.GetDocument().GetFilename()
+        else:
+            filename = ''
+        self._projectChoice.SetToolTipString(filename)
+
+
+    def OnSize(self, event):
+        event.Skip()
+        wx.CallAfter(self.GetFrame().Layout)
 
 
     def OnBeginDrag(self, event):
+        if self.GetMode() == ProjectView.PHYSICAL_MODE:
+            return
+            
         item = event.GetItem()
         if item.IsOk():
-            if item == self._treeCtrl.GetRootItem():
-                return
-            self._draggingItem = item
-            event.Allow()
-        
+            self._draggingItems = []
+            for item in self._treeCtrl.GetSelections():
+                if self._IsItemFile(item):
+                    self._draggingItems.append(item)
+            if len(self._draggingItems):
+                event.Allow()
+
 
     def OnEndDrag(self, event):
         item = event.GetItem()
-        if item.IsOk():            
-            # don't allow object to be dragged to itself
-            if item == self._draggingItem:
-                return
-            
-            rootItem = self._treeCtrl.GetRootItem()
-    
-            # don't let object replace root view
-            if item == rootItem:
-                wx.MessageBox(_("Cannot replace root view with item."))
-                return
-                
-            # don't allow object to be dragged to a direct descendant
-            ancestor = self._treeCtrl.GetItemParent(item)
-            while ancestor != rootItem:
-                if ancestor == self._draggingItem:
-                    wx.MessageBox(_("Cannot make item direct descendant of self."))
-                    return
-                else:
-                    ancestor = self._treeCtrl.GetItemParent(ancestor)
-                    
-            if self._treeCtrl.GetItemParent(item) == self._treeCtrl.GetItemParent(self._draggingItem):
-                # put it in same folder as it was originally, no-op.
-                return
-            if item == self._treeCtrl.GetItemParent(self._draggingItem):
-                # put it in same folder as it was originally, no-op.
-                return
+        if item.IsOk():
+            files = []
+            for ditem in self._draggingItems:
+                file = self._GetItemFile(ditem)
+                if file not in files:
+                    files.append(file)
                     
-            self.GetDocument().GetCommandProcessor().Submit(ProjectEditorMoveCommand(self, item, self._draggingItem))
+            folderPath = self._GetItemFolderPath(item)
+
+            self.GetDocument().GetCommandProcessor().Submit(ProjectMoveFilesCommand(self.GetDocument(), files, folderPath))
 
 
     def WriteProjectConfig(self):
@@ -714,32 +1588,47 @@ class ProjectView(wx.lib.docview.View):
 
         if config.ReadInt("ProjectSaveDocs", True):
             projectFileNames = []
-            projectExpanded = []
-            if self._treeCtrl:
-                for projectItem in self._GetChildItems(self._treeCtrl.GetRootItem()):
-                    project = self._GetItemProject(projectItem)
+            curProject = None
+
+            if self._projectChoice:
+                for i in range(self._projectChoice.GetCount()):
+                    project = self._projectChoice.GetClientData(i)
                     if not project.OnSaveModified():
                         return
                     if project.GetDocumentSaved():  # Might be a new document and "No" selected to save it
                         projectFileNames.append(str(project.GetFilename()))
-                        projectExpanded.append(self._treeCtrl.IsExpanded(projectItem))
             config.Write("ProjectSavedDocs", projectFileNames.__repr__())
-            config.Write("ProjectExpandedSavedDocs", projectExpanded.__repr__())
+
+            document = None
+            if self._projectChoice.GetCount():
+                i = self._projectChoice.GetSelection()
+                if i != wx.NOT_FOUND:
+                    document = self._projectChoice.GetClientData(i)
+            if document:
+                config.Write("ProjectCurrent", document.GetFilename())
+            else:
+                config.DeleteEntry("ProjectCurrent")
 
 
     def OnClose(self, deleteWindow = True):
         if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:
             self.WriteProjectConfig()
+            
         project = self.GetDocument()
         if not project:
             return True
-        if not self.GetDocument().Close():
+        if not project.Close():
             return True
-        self.Activate(False)
-        if project:
-            projectItem = self._GetProjectItem(project)
-            if projectItem:
-                self._treeCtrl.Delete(projectItem)
+
+        if not deleteWindow:
+            self.RemoveCurrentDocumentUpdate()
+        else:
+            # need this to accelerate closing down app if treeCtrl has lots of items
+            self._treeCtrl.Freeze()
+            rootItem = self._treeCtrl.GetRootItem()
+            self._treeCtrl.DeleteChildren(rootItem)
+            self._treeCtrl.Thaw()
+
         # We don't need to delete the window since it is a floater/embedded
         return True
 
@@ -750,59 +1639,168 @@ class ProjectView(wx.lib.docview.View):
 
     def OnUpdate(self, sender = None, hint = None):
         wx.lib.docview.View.OnUpdate(self, sender, hint)
+        
         if hint:
             if hint[0] == "add":
-                projectItem = self._GetProjectItem(hint[1])
-                files = hint[2]
+                projectDoc = hint[1]
+                if self.GetDocument() != projectDoc:  # project being updated isn't currently viewed project
+                    return
+                    
+                self._treeCtrl.Freeze()
+
+                newFilePaths = hint[2]  # need to be added and selected, and sorted
+                oldFilePaths = hint[3]  # need to be selected
                 self._treeCtrl.UnselectAll()
-                self._treeCtrl.Expand(projectItem)
-                item = None
-                for file in files:
-                    item = self._treeCtrl.AppendItem(projectItem, os.path.basename(file))
-                    self._treeCtrl.SetData(item, file)
-                    self._treeCtrl.SelectItem(item)
-                    self._treeCtrl.EnsureVisible(item)
-                self._treeCtrl.SortChildren(projectItem)
-                if item:
-                    self._treeCtrl.EnsureVisible(item)  # need to be called after SortChildren
+                
+                mode = self.GetMode()
+                
+                project = projectDoc.GetModel()
+                projectDir = project.homeDir
+                rootItem = self._treeCtrl.GetRootItem()
+                    
+                # add new folders and new items
+                addList = []                    
+                for filePath in newFilePaths:
+                    file = project.FindFile(filePath)
+                    if file:
+                        if mode == ProjectView.LOGICAL_MODE:
+                            folderPath = file.logicalFolder
+                        else:  # ProjectView.PHYSICAL_MODE
+                            folderPath = file.GetRelativeFolder(projectDir)
+                        if folderPath:
+                            self._treeCtrl.AddFolder(folderPath)
+                            folder = self._treeCtrl.FindFolder(folderPath)
+                        else:
+                            folder = rootItem
+                        item = self._treeCtrl.AppendItem(folder, os.path.basename(file.filePath), file)
+                        addList.append(item)
+
+                # sort folders with new items
+                parentList = []
+                for item in addList:
+                    parentItem = self._treeCtrl.GetItemParent(item)
+                    if parentItem not in parentList:
+                        parentList.append(parentItem)
+                for parentItem in parentList:
+                    self._treeCtrl.SortChildren(parentItem)
+
+                # select all the items user wanted to add
+                lastItem = None
+                for filePath in (oldFilePaths + newFilePaths):
+                    item = self._treeCtrl.FindItem(filePath)
+                    if item:
+                        self._treeCtrl.SelectItem(item)
+                        lastItem = item
+                        
+                if lastItem:        
+                    self._treeCtrl.EnsureVisible(lastItem)
+
+                self._treeCtrl.Thaw()
+                return
+
             elif hint[0] == "remove":
-                projectItem = self._GetProjectItem(hint[1])
-                files = hint[2]
-                self._treeCtrl.UnselectAll()
-                children = self._GetChildItems(projectItem)
-                for child in children:
-                    if self._GetItemFile(child) in files:
-                        self._treeCtrl.Delete(child)
-            elif hint[0] == "select":
-                projectItem = self._GetProjectItem(hint[1])
-                files = hint[2]
+                projectDoc = hint[1]
+                if self.GetDocument() != projectDoc:  # project being updated isn't currently viewed project
+                    return
+                    
+                self._treeCtrl.Freeze()
+
+                filePaths = hint[2]
                 self._treeCtrl.UnselectAll()
-                children = self._GetChildItems(projectItem)
-                for child in children:
-                    if self._GetItemFile(child) in files:
-                        self._treeCtrl.SelectItem(child)
-                        self._treeCtrl.EnsureVisible(child)
+                
+                for filePath in filePaths:
+                    item = self._treeCtrl.FindItem(filePath)
+                    if item:
+                        self._treeCtrl.Delete(item)
+
+                self._treeCtrl.UnselectAll()  # wxBug: even though we unselected earlier, an item still gets selected after the delete
+                
+                self._treeCtrl.Thaw()
+                return
+                
             elif hint[0] == "rename":
-                projectItem = self._GetProjectItem(hint[1])
-                self._treeCtrl.SetItemText(projectItem, os.path.basename(hint[2]))
+                projectDoc = hint[1]
+                if self.GetDocument() != projectDoc:  # project being updated isn't currently viewed project
+                    return
+                    
+                self._treeCtrl.Freeze()
+                item = self._treeCtrl.FindItem(hint[2])
+                self._treeCtrl.SetItemText(item, os.path.basename(hint[3]))
+                self._treeCtrl.EnsureVisible(item)
+                self._treeCtrl.Thaw()
+                return
+                
+            elif hint[0] == "rename folder":
+                projectDoc = hint[1]
+                if self.GetDocument() != projectDoc:  # project being updated isn't currently viewed project
+                    return
+                    
+                self._treeCtrl.Freeze()
+                item = self._treeCtrl.FindFolder(hint[2])
+                if item:
+                    self._treeCtrl.UnselectAll()
+                    self._treeCtrl.SetItemText(item, os.path.basename(hint[3]))
+                    self._treeCtrl.SortChildren(self._treeCtrl.GetItemParent(item))
+                    self._treeCtrl.SelectItem(item)
+                    self._treeCtrl.EnsureVisible(item)
+                self._treeCtrl.Thaw()
+                return
+     
 
+    def RemoveProjectUpdate(self, projectDoc):
+        """ Called by service after deleting a project, need to remove from project choices """
+        i = self._projectChoice.FindString(self._MakeProjectName(projectDoc))
+        self._projectChoice.Delete(i)
+
+        numProj = self._projectChoice.GetCount()
+        if i >= numProj:
+            i = numProj - 1
+        if i >= 0:
+            self._projectChoice.SetSelection(i)
+        self.OnProjectSelect()
+
+
+    def RemoveCurrentDocumentUpdate(self, i=-1):
+        """ Called by service after deleting a project, need to remove from project choices """
+        i = self._projectChoice.GetSelection()
+        self._projectChoice.Delete(i)
+
+        numProj = self._projectChoice.GetCount()
+        if i >= numProj:
+            i = numProj - 1
+        if i >= 0:
+            self._projectChoice.SetSelection(i)
+        self.OnProjectSelect()
 
     def ProcessEvent(self, event):
         id = event.GetId()
-        if id == ProjectService.ADD_FILES_TO_PROJECT_ID:
+        if id == ProjectService.CLOSE_PROJECT_ID:
+            document = self.GetDocument()
+            if document:
+                if self.GetDocumentManager().CloseDocument(document, False):
+                    self.RemoveCurrentDocumentUpdate()
+            return True
+        elif id == ProjectService.ADD_FILES_TO_PROJECT_ID:
             self.OnAddFileToProject(event)
             return True
-        elif id == ProjectService.ADD_ALL_FILES_TO_PROJECT_ID:
+        elif id == ProjectService.ADD_DIR_FILES_TO_PROJECT_ID:
             self.OnAddDirToProject(event)
             return True
         elif id == ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID:
             return False  # Implement this one in the service
+        elif id == ProjectService.ADD_FOLDER_ID:
+            self.OnAddFolder(event)
+            return True
         elif id == ProjectService.RENAME_ID:
             self.OnRename(event)
             return True
         elif id == ProjectService.DELETE_FILE_ID:
             self.OnDeleteFile(event)
-            return True            
+            return True
+        elif id == ProjectService.DELETE_PROJECT_ID:
+            self.OnDeleteProject(event)
+            return True
         elif id == wx.ID_CUT:
             self.OnCut(event)
             return True
@@ -825,6 +1823,9 @@ class ProjectView(wx.lib.docview.View):
         elif id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID:
             self.OnProperties(event)
             return True
+        elif id == ProjectService.PROJECT_PROPERTIES_ID:
+            self.OnProjectProperties(event)
+            return True
         else:
             return False
 
@@ -836,21 +1837,51 @@ class ProjectView(wx.lib.docview.View):
             if doc and not doc.GetCommandProcessor().GetEditMenu():
                 doc.GetCommandProcessor().SetEditMenu(wx.GetApp().GetEditMenu(self._GetParentFrame()))
             self._checkEditMenu = False
-            
+
         id = event.GetId()
-        if (id == wx.ID_CUT
-        or id == wx.ID_COPY
-        or id == ProjectService.RENAME_ID
-        or id == ProjectService.ADD_FILES_TO_PROJECT_ID
-        or id == ProjectService.ADD_ALL_FILES_TO_PROJECT_ID
-        or id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID):
-            event.Enable(self._HasSelection())
-            return True
-        elif id == ProjectService.DELETE_FILE_ID:
-            event.Enable(len(self.GetSelectedFiles()) > 0)
+        if id == wx.ID_CLOSE:
+            # Too confusing, so disable closing from "File | Close" menu, must close from "Project | Close Current Project" menu
+            if self.ProjectHasFocus() or self.FilesHasFocus():
+                event.Enable(False)
+                return True
+            else:
+                return False
+        elif (id == ProjectService.ADD_FILES_TO_PROJECT_ID
+        or id == ProjectService.ADD_DIR_FILES_TO_PROJECT_ID
+        or id == ProjectService.CLOSE_PROJECT_ID
+        or id == ProjectService.DELETE_PROJECT_ID):
+            event.Enable(self.GetDocument() != None)
             return True
         elif id == ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID:
-            event.Enable(False)
+            event.Enable(False)  # Implement this one in the service
+            return True
+        elif id == ProjectService.ADD_FOLDER_ID:
+            event.Enable((self.GetDocument() != None) and (self.GetMode() == ProjectView.LOGICAL_MODE))
+            return True            
+        elif id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID:
+            status = False
+            if self.ProjectHasFocus():
+                if self.GetDocument():
+                    status = True
+            elif self.FilesHasFocus():
+                items = self._treeCtrl.GetSelections()
+                if items:
+                    item = items[0]
+                    if self._IsItemFile(item):
+                        status = True
+
+            event.Enable(status)
+            return True
+        elif (id == wx.ID_CUT
+        or id == wx.ID_COPY
+        or id == ProjectService.DELETE_FILE_ID
+        or id == ProjectService.REMOVE_FROM_PROJECT
+        or id == ProjectService.OPEN_SELECTION_ID):
+            event.Enable(self._HasFilesSelected())
+            return True
+        elif (id == wx.ID_CLEAR
+        or id == ProjectService.RENAME_ID):
+            event.Enable(self._HasFilesSelected() or (self.GetDocument() != None and self.GetMode() == ProjectView.LOGICAL_MODE and self._HasFoldersSelected()))
             return True
         elif id == wx.ID_PASTE:
             event.Enable(self.CanPaste())
@@ -858,15 +1889,10 @@ class ProjectView(wx.lib.docview.View):
         elif id == wx.ID_SELECTALL:
             event.Enable(self._HasFiles())
             return True
-        elif (id == wx.ID_CLEAR
-        or id == ProjectService.REMOVE_FROM_PROJECT
-        or id == ProjectService.OPEN_SELECTION_ID):
-            event.Enable(self._HasFilesSelected())
-            return True
         elif (id == wx.ID_PREVIEW
         or id == wx.ID_PRINT):
             event.Enable(False)
-            return True            
+            return True
         else:
             return False
 
@@ -895,63 +1921,128 @@ class ProjectView(wx.lib.docview.View):
     # Methods for ProjectDocument and ProjectService to call
     #----------------------------------------------------------------------------
 
-    def SetExpandedProjects(self, expandedProjects):
-        self._treeCtrl.UnselectAll()
-        firstItem = None
-        for i, item in enumerate(self._GetChildItems(self._treeCtrl.GetRootItem())):
-            if i == 0:
-                firstItem = item
-                
-            if expandedProjects[i]:
-                self._treeCtrl.Expand(item)
-            else:
-                self._treeCtrl.Collapse(item)
-
-        if firstItem:
-            self._treeCtrl.EnsureVisible(firstItem)
-
+    def SetProject(self, projectPath):
+        curSel = self._projectChoice.GetSelection()
+        for i in range(self._projectChoice.GetCount()):
+            document = self._projectChoice.GetClientData(i)
+            if document.GetFilename() == projectPath:
+                if curSel != i:  # don't reload if already loaded
+                    self._projectChoice.SetSelection(i)
+                    self.LoadProject(document)
+                break
+        
 
     def GetSelectedFile(self):
         for item in self._treeCtrl.GetSelections():
-            return self._GetItemFile(item)
+            filePath = self._GetItemFilePath(item)
+            if filePath:
+                return filePath
+        return None
+
 
-            
     def GetSelectedFiles(self):
-        filenames = []
+        filePaths = []
         for item in self._treeCtrl.GetSelections():
-            filename = self._GetItemFile(item)
-            if filename and filename not in filenames:
-                filenames.append(filename)
-        return filenames
+            filePath = self._GetItemFilePath(item)
+            if filePath and filePath not in filePaths:
+                filePaths.append(filePath)
+        return filePaths
 
 
-    def GetSelectedProjects(self):
-        filenames = []
-        for item in self._treeCtrl.GetSelections():
-            if self._IsItemProject(item):
-                filename = self._treeCtrl.GetLongFilename(item)
-                if filename and filename not in filenames:
-                    filenames.append(filename)
-        return filenames
+    def GetSelectedPhysicalFolder(self):
+        if self.GetMode() == ProjectView.LOGICAL_MODE:
+            return None
+        else:
+            for item in self._treeCtrl.GetSelections():
+                if not self._IsItemFile(item):
+                    filePath = self._GetItemFolderPath(item)
+                    if filePath:
+                        return filePath
+            return None
+
+
+    def GetSelectedProject(self):
+        document = self.GetDocument()
+        if document:
+            return document.GetFilename()
+        else:
+            return None
 
 
     def AddProjectToView(self, document):
+        i = self._projectChoice.Append(self._MakeProjectName(document), document)
+        self._projectChoice.SetSelection(i)
+        self.OnProjectSelect()
+
+
+    def LoadProject(self, document):
+        wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
+        self._treeCtrl.Freeze()
+
         rootItem = self._treeCtrl.GetRootItem()
-        projectItem = self._treeCtrl.AppendItem(rootItem, self._MakeProjectName(document))
-        self._treeCtrl.SetData(projectItem, document.GetFilename(), document)
-        for file in document.GetFiles():
-            fileItem = self._treeCtrl.AppendItem(projectItem, os.path.basename(file))
-            self._treeCtrl.SetData(fileItem, file)
-        self._treeCtrl.SortChildren(rootItem)
-        self._treeCtrl.SortChildren(projectItem)
-        self._treeCtrl.UnselectAll()
-        self._treeCtrl.Expand(projectItem)
-        self._treeCtrl.SelectItem(projectItem)
-        if self._embeddedWindow:
-            document.GetCommandProcessor().SetEditMenu(wx.GetApp().GetEditMenu(self._GetParentFrame()))
+        self._treeCtrl.DeleteChildren(rootItem)
+            
+        if document:
+            mode = self.GetMode()
+            docFilePath = document.GetFilename()
+            
+            if mode == ProjectView.LOGICAL_MODE:
+                folders = document.GetModel().logicalFolders
+            else:
+                folders = document.GetModel().GetRelativeFolders()
+                
+            folders.sort()
+            folderItems = []
+            for folderPath in folders:
+                folderItems = folderItems + self._treeCtrl.AddFolder(folderPath)
+                                        
+            for file in document.GetModel()._files:
+                if mode == ProjectView.LOGICAL_MODE:
+                    folder = file.logicalFolder
+                else:
+                    folder = file.GetRelativeFolder(document.GetModel().homeDir)
+                if folder:
+                    folderTree = folder.split('/')
+                
+                    item = rootItem
+                    for folderName in folderTree:
+                        found = False
+                        (child, cookie) = self._treeCtrl.GetFirstChild(item)
+                        while child.IsOk():
+                            if self._treeCtrl.GetItemText(child) == folderName:
+                                item = child 
+                                found = True
+                                break
+                            (child, cookie) = self._treeCtrl.GetNextChild(item, cookie)
+                            
+                        if not found:
+                            print "error folder '%s' not found for %s" % (folder, file.filePath)
+                            break
+                else:
+                    item = rootItem
+                    
+                fileItem = self._treeCtrl.AppendItem(item, os.path.basename(file.filePath), file)
+                
+            self._treeCtrl.SortChildren(rootItem)
+            for item in folderItems:
+                self._treeCtrl.SortChildren(item)
+
+            self.LoadFolderState()
+
+            if self._embeddedWindow:
+                document.GetCommandProcessor().SetEditMenu(wx.GetApp().GetEditMenu(self._GetParentFrame()))
 
+        self._treeCtrl.Thaw()
+        wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
 
-    def HasFocus(self):
+
+    def ProjectHasFocus(self):
+        """ Does Project Choice have focus """
+        return (wx.Window.FindFocus() == self._projectChoice)
+
+
+    def FilesHasFocus(self):
+        """ Does Project Tree have focus """
         winWithFocus = wx.Window.FindFocus()
         if not winWithFocus:
             return False
@@ -962,61 +2053,172 @@ class ProjectView(wx.lib.docview.View):
         return False
 
 
+    def SaveFolderState(self, event=None):
+        """ Save the open/close state of folders """
+
+        if self._loading:
+            return
+            
+        folderList = []
+        folderItemList = self._GetFolderItems(self._treeCtrl.GetRootItem())
+        for item in folderItemList:
+            if self._treeCtrl.IsExpanded(item):
+                folderList.append(self._GetItemFolderPath(item))
+        
+        config = wx.ConfigBase_Get()
+        config.Write(getProjectKeyName(self.GetDocument().GetFilename(), self.GetMode()), repr(folderList))
+
+
+    def LoadFolderState(self):
+        """ Load the open/close state of folders """
+        self._loading = True
+        
+        config = wx.ConfigBase_Get()
+        openFolderData = config.Read(getProjectKeyName(self.GetDocument().GetFilename(), self.GetMode()))
+        if openFolderData:
+            folderList = eval(openFolderData)
+                
+            folderItemList = self._GetFolderItems(self._treeCtrl.GetRootItem())
+            for item in folderItemList:
+                f = self._GetItemFolderPath(item)
+                if f in folderList:
+                    self._treeCtrl.Expand(item)
+##                else:  # not needed, initial state is collapsed
+##                    self._treeCtrl.Collapse(item)
+        else:  # default is to open all folders    
+            folderItemList = self._GetFolderItems(self._treeCtrl.GetRootItem())
+            for item in folderItemList:
+                self._treeCtrl.Expand(item)
+            
+        self._loading = False
+
+
     #----------------------------------------------------------------------------
     # Control events
     #----------------------------------------------------------------------------
 
     def OnProperties(self, event):
-        items = self._treeCtrl.GetSelections()
-        if not items:
-            return
-        item = items[0]
-        if self._IsItemProject(item):
-            projectPropertiesDialog = ProjectPropertiesDialog(wx.GetApp().GetTopWindow(), self._GetItemProject(item).GetFilename())
-            if projectPropertiesDialog.ShowModal() == wx.ID_OK:
-                pass  # Handle OK
-            projectPropertiesDialog.Destroy()
-        elif self._IsItemFile(item):
-            filePropertiesService = wx.GetApp().GetService(wx.lib.pydocview.FilePropertiesService)
-            filePropertiesService.ShowPropertiesDialog(self._GetItemFile(item))
+        if self.ProjectHasFocus():
+            self.OnProjectProperties(event)
+        elif self.FilesHasFocus():
+            items = self._treeCtrl.GetSelections()
+            if not items:
+                return
+            item = items[0]
+            filePath = self._GetItemFilePath(item)
+            if filePath:
+                filePropertiesService = wx.GetApp().GetService(wx.lib.pydocview.FilePropertiesService)
+                filePropertiesService.ShowPropertiesDialog(filePath)
+
+
+    def OnProjectProperties(self, event):
+        if self.GetDocument():
+            dlg = ProjectPropertiesDialog(wx.GetApp().GetTopWindow(), self.GetDocument())
+            dlg.CenterOnParent()
+            finished = False
+            while not finished:
+                if dlg.ShowModal() == wx.ID_OK:
+                    if hasattr(dlg, "_appInfoCtrl") and dlg._appInfoCtrl._grid.IsCellEditControlShown():  # for Linux
+                        dlg._appInfoCtrl._grid.DisableCellEditControl()  # If editor is still active, force it to finish the edit before setting the new model.
+
+                    homeDir = dlg._homeDirCtrl.GetValue()
+                    if homeDir:
+                        if homeDir == ProjectPropertiesDialog.RELATIVE_TO_PROJECT_FILE:
+                            homeDir = None
+                        if homeDir and not os.path.isdir(homeDir):
+                            wx.MessageBox(_("Home Dir '%s' does not exist.  Please specify a valid directory.") % homeDir,
+                                        _("Project Properties"),
+                                        wx.OK | wx.ICON_EXCLAMATION)
+                        else:
+                            if self.GetDocument().GetModel()._homeDir != homeDir:  # don't set it if it hasn't changed
+                                self.GetDocument().GetModel().homeDir = homeDir
+                                self.GetDocument().Modify(True)
+                            finished = True
+                    else:
+                        wx.MessageBox(_("Blank Home Dir.  Please specify a valid directory."),
+                                    _("Project Properties"),
+                                    wx.OK | wx.ICON_EXCLAMATION)
+                else:  # ID_CANCEL
+                    finished = True
+            dlg.Destroy()
+
+
+    def OnAddFolder(self, event):
+        if self.GetDocument():
+            items = self._treeCtrl.GetSelections()
+            if items:
+                item = items[0]
+                if self._IsItemFile(item):
+                    item = self._treeCtrl.GetItemParent(item)
+                    
+                folderDir = self._GetItemFolderPath(item)
+            else:
+                folderDir = ""
+                
+            if folderDir:
+                folderDir += "/"
+            folderPath = _("%sUntitled") % folderDir
+            i = 1
+            while self._treeCtrl.FindFolder(folderPath):
+                i += 1
+                folderPath = _("%sUntitled%s") % (folderDir, i)
+            self.GetDocument().GetCommandProcessor().Submit(ProjectAddFolderCommand(self, self.GetDocument(), folderPath))
+            
+            self._treeCtrl.UnselectAll()
+            item = self._treeCtrl.FindFolder(folderPath)
+            self._treeCtrl.SelectItem(item)
+            self._treeCtrl.EnsureVisible(item)
+            self.OnRename()
+
+
+    def AddFolder(self, folderPath):
+        self._treeCtrl.AddFolder(folderPath)
+        return True
+
+
+    def DeleteFolder(self, folderPath):
+        item = self._treeCtrl.FindFolder(folderPath)
+        self._treeCtrl.Delete(item)
+        return True
 
 
     def OnAddFileToProject(self, event):
         if wx.Platform == "__WXMSW__" or wx.Platform == "__WXGTK__" or wx.Platform == "__WXMAC__":
-            allfilter = ''
             descr = ''
             for temp in self.GetDocumentManager()._templates:
                 if temp.IsVisible():
                     if len(descr) > 0:
                         descr = descr + _('|')
-                        allfilter = allfilter + _(';')
                     descr = descr + temp.GetDescription() + _(" (") + temp.GetFileFilter() + _(") |") + temp.GetFileFilter()  # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
-                    allfilter = allfilter + temp.GetFileFilter()
-            descr = _("All (%s)|%s|%s|Any (*.*) | *.*") %  (allfilter, allfilter, descr)  # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
+            descr = _("All (*.*)|*.*|%s") % descr # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
         else:
             descr = _("*.*")
-            
-        startDirectory = os.path.dirname(self.GetDocument().GetFilename())
-            
-        if True or _WINDOWS:
-            dialog = wx.FileDialog(self.GetFrame(), _("Add Files"), startDirectory, "", descr, wx.OPEN | wx.HIDE_READONLY | wx.MULTIPLE)
-            if dialog.ShowModal() != wx.ID_OK:
-                return
-            paths = dialog.GetPaths()
+
+        dialog = wx.FileDialog(self.GetFrame(), _("Add Files"), wildcard=descr, style=wx.OPEN|wx.HIDE_READONLY|wx.MULTIPLE|wx.CHANGE_DIR)
+        # dialog.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
+        if dialog.ShowModal() != wx.ID_OK:
             dialog.Destroy()
-        else:
-            paths = wx.FileSelector(_("Add Files"), startDirectory, "", wildcard = descr, flags = wx.OPEN | wx.HIDE_READONLY | wx.MULTIPLE, parent=self.GetFrame())
-            if type(paths) == types.StringType:
-                paths = [paths]
+            return
+        paths = dialog.GetPaths()
+        dialog.Destroy()
         if len(paths):
-            self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), paths))
-        self.Activate(True)  # after add, should put focus on project editor
+            
+            folderPath = None
+            if self.GetMode() == ProjectView.LOGICAL_MODE:
+                selections = self._treeCtrl.GetSelections()
+                if selections:
+                    item = selections[0]
+                    if not self._IsItemFile(item):
+                        folderPath = self._GetItemFolderPath(item)
+                        
+            self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), paths, folderPath=folderPath))
+        self.Activate()  # after add, should put focus on project editor
 
 
     def OnAddDirToProject(self, event):
-        frame = wx.Dialog(None, -1, _("Add Directory Files to Project"), size= (320,200))
+        frame = wx.Dialog(wx.GetApp().GetTopWindow(), -1, _("Add Directory Files to Project"), size= (320,200))
         contentSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         flexGridSizer = wx.FlexGridSizer(cols = 2, vgap=HALF_SPACE, hgap=HALF_SPACE)
         flexGridSizer.Add(wx.StaticText(frame, -1, _("Directory:")), 0, wx.ALIGN_CENTER_VERTICAL, 0)
         lineSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -1026,17 +2228,17 @@ class ProjectView(wx.lib.docview.View):
         findDirButton = wx.Button(frame, -1, _("Browse..."))
         lineSizer.Add(findDirButton, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL, HALF_SPACE)
         flexGridSizer.Add(lineSizer, 1, wx.EXPAND)
-                
+
         def OnBrowseButton(event):
             dlg = wx.DirDialog(frame, _("Choose a directory:"), style=wx.DD_DEFAULT_STYLE)
             dir = dirCtrl.GetValue()
             if len(dir):
                 dlg.SetPath(dir)
+            dlg.CenterOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 dirCtrl.SetValue(dlg.GetPath())
                 dirCtrl.SetToolTipString(dirCtrl.GetValue())
                 dirCtrl.SetInsertionPointEnd()
-
             dlg.Destroy()
         wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
 
@@ -1044,27 +2246,23 @@ class ProjectView(wx.lib.docview.View):
         for template in self.GetDocumentManager()._templates:
             if template.IsVisible():
                 visibleTemplates.append(template)
-                
+
         choices = []
-        allfilter = ''
         descr = ''
         for template in visibleTemplates:
             if len(descr) > 0:
                 descr = descr + _('|')
-                allfilter = allfilter + _(';')
             descr = template.GetDescription() + _(" (") + template.GetFileFilter() + _(")")
             choices.append(descr)
-            allfilter = allfilter + template.GetFileFilter()
-        choices.insert(0, _("All (%s)") % allfilter)  # first item
-        choices.append(_("Any (*.*)"))  # last item
+        choices.insert(0, _("All (*.*)"))  # first item
         filterChoice = wx.Choice(frame, -1, size=(250, -1), choices=choices)
         filterChoice.SetSelection(0)
         filterChoice.SetToolTipString(_("Select file type filter."))
         flexGridSizer.Add(wx.StaticText(frame, -1, _("Files of type:")), 0, wx.ALIGN_CENTER_VERTICAL)
         flexGridSizer.Add(filterChoice, 1, wx.EXPAND)
-        
+
         contentSizer.Add(flexGridSizer, 0, wx.ALL|wx.EXPAND, SPACE)
-        
+
         subfolderCtrl = wx.CheckBox(frame, -1, _("Add files from subdirectories"))
         subfolderCtrl.SetValue(True)
         contentSizer.Add(subfolderCtrl, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL, SPACE)
@@ -1079,6 +2277,7 @@ class ProjectView(wx.lib.docview.View):
         frame.SetSizer(contentSizer)
         frame.Fit()
 
+        frame.CenterOnParent()
         status = frame.ShowModal()
 
         passedCheck = False
@@ -1089,29 +2288,30 @@ class ProjectView(wx.lib.docview.View):
                                        _("Find in Directory"),
                                        wx.OK | wx.ICON_EXCLAMATION
                                        )
+                dlg.CenterOnParent()
                 dlg.ShowModal()
                 dlg.Destroy()
 
                 status = frame.ShowModal()
             else:
                 passedCheck = True
-            
-        if status == wx.ID_OK:            
-            frame.Destroy()
 
+        frame.Destroy()
+
+        if status == wx.ID_OK:
             wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
-            
+
             doc = self.GetDocument()
             searchSubfolders = subfolderCtrl.IsChecked()
             dirString = dirCtrl.GetValue()
-            
+
             if os.path.isfile(dirString):
                 # If they pick a file explicitly, we won't prevent them from adding it even if it doesn't match the filter.
                 # We'll assume they know what they're doing.
                 paths = [dirString]
             else:
                 paths = []
-                
+
                 index = filterChoice.GetSelection()
                 lastIndex = filterChoice.GetCount()-1
                 if index and index != lastIndex:  # if not All or Any
@@ -1121,13 +2321,13 @@ class ProjectView(wx.lib.docview.View):
                 for root, dirs, files in os.walk(dirString):
                     if not searchSubfolders and root != dirString:
                         break
-                        
+
                     for name in files:
                         if index == 0:  # All
                             for template in visibleTemplates:
                                 if template.FileMatchesTemplate(name):
                                     filename = os.path.join(root, name)
-                                    
+
                                     # if already in project, don't add it, otherwise undo will remove it from project even though it was already in it.
                                     if doc.IsFileInProject(filename):
                                         break
@@ -1138,55 +2338,35 @@ class ProjectView(wx.lib.docview.View):
                             filename = os.path.join(root, name)
                             # if already in project, don't add it, otherwise undo will remove it from project even though it was already in it.
                             if not doc.IsFileInProject(filename):
-                                paths.append(filename)                    
+                                paths.append(filename)
                         else:  # use selected filter
                             if template.FileMatchesTemplate(name):
                                 filename = os.path.join(root, name)
                                 # if already in project, don't add it, otherwise undo will remove it from project even though it was already in it.
                                 if not doc.IsFileInProject(filename):
-                                    paths.append(filename)                    
-    
-            wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
-
-            doc.GetCommandProcessor().Submit(ProjectAddFilesCommand(doc, paths))
-            self.Activate(True)  # after add, should put focus on project editor
-        else:
-            frame.Destroy()
-
-
-    def DoAddFilesToProject(self, filenames):
-        # method used by Drag-n-Drop to add files to current Project
-        self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), filenames))
-
+                                    paths.append(filename)
 
-    def DoSelectFiles(self, filenames):
-        # method used by Drag-n-Drop to select files in current Project
-        self._treeCtrl.UnselectAll()
-        for file in filenames:
-            item = self._GetFileItem(longFileName=file)
-            if item:
-                self._treeCtrl.SelectItem(item, True)
-                self._treeCtrl.EnsureVisible(item)
+            folderPath = None
+            if self.GetMode() == ProjectView.LOGICAL_MODE:
+                selections = self._treeCtrl.GetSelections()
+                if selections:
+                    item = selections[0]
+                    if not self._IsItemFile(item):
+                        folderPath = self._GetItemFolderPath(item)
 
+            wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
 
-    def DoSelectProject(self, x, y):
-        # method used by Drag-n-Drop to set current Project based on cursor position
-        item, flag = self._treeCtrl.HitTest((x,y))
-        if not item:
-            return False
+            doc.GetCommandProcessor().Submit(ProjectAddFilesCommand(doc, paths, folderPath=folderPath))
+            self.Activate()  # after add, should put focus on project editor
 
-        project = self._GetItemProject(item)
-        if not project:
-            return False
 
-        projectItem = self._GetProjectItem(project)
-        self._treeCtrl.UnselectAll()
-        self._treeCtrl.SelectItem(projectItem)
-        return True
+    def DoAddFilesToProject(self, filePaths, folderPath):
+        # method used by Drag-n-Drop to add files to current Project
+        self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), filePaths, folderPath))
 
 
     def OnFocus(self, event):
-        wx.GetApp().GetDocumentManager().ActivateView(self)
+        self.GetDocumentManager().ActivateView(self)
         event.Skip()
 
 
@@ -1194,32 +2374,67 @@ class ProjectView(wx.lib.docview.View):
         # Get the top MDI window and "activate" it since it is already active from the perspective of the MDIParentFrame
         # wxBug: Would be preferable to call OnActivate, but have casting problem, so added Activate method to docview.DocMDIChildFrame
         if not self._editingSoDontKillFocus:  # wxBug: This didn't used to happen, but now when you start to edit an item in a wxTreeCtrl it puts out a KILL_FOCUS event, so we need to detect it
-            childFrame = wx.GetApp().GetTopWindow().GetActiveChild()
-            if childFrame:
-                childFrame.Activate()
+            topWindow = wx.GetApp().GetTopWindow()
+            # wxBug: On Mac, this event can fire during shutdown, even after GetTopWindow()
+            # is set to NULL. So make sure we have a TLW before getting the active child.
+            if topWindow:
+                childFrame = topWindow.GetActiveChild()
+                if childFrame:
+                    childFrame.Activate()
+        event.Skip()
+
+
+    def OnLeftClick(self, event):
+        """ wxBug: If tree has selection, but focus is in another window, single click in tree should do
+            single selection of item at mouse position.  But what it does is just put focus back into the
+            window and all items go from inactive selection to active selection.  Another click on the item
+            either activates double-click or edit for that item.  This behavior is odd.
+            
+            This fix makes gives the tree view the focus and makes the item under the mouse position the
+            only active selection, as expected.
+        """
+        if not self.ProjectHasFocus() and not self.FilesHasFocus() and not event.ShiftDown() and not event.ControlDown() and not event.MetaDown():
+            self._treeCtrl.UnselectAll()
+            event.Skip()
+            item, flags = self._treeCtrl.HitTest(event.GetPosition())
+            self._treeCtrl.SelectItem(item)
+            return
+            
         event.Skip()
 
 
     def OnRightClick(self, event):
-        self.Activate(True)
-        if not self._treeCtrl.GetSelections():
+        self.Activate()
+        if not self.GetSelectedProject():
             return
-        if len(self._treeCtrl.GetSelections()) == 1 and self._IsItemRoot(self._treeCtrl.GetSelections()[0]):
-            return  # Don't do a menu if it's just the root item selected
         menu = wx.Menu()
         if self._HasFilesSelected():  # Files context
             menu.Append(ProjectService.OPEN_SELECTION_ID, _("&Open"), _("Opens the selection"))
             menu.Enable(ProjectService.OPEN_SELECTION_ID, True)
             wx.EVT_MENU(self._GetParentFrame(), ProjectService.OPEN_SELECTION_ID, self.OnOpenSelection)
+            
+            extService = wx.GetApp().GetService(ExtensionService.ExtensionService)
+            if extService and extService.GetExtensions():
+                firstItem = True
+                for ext in extService.GetExtensions():
+                    if not ext.opOnSelectedFile:
+                        continue
+                    if firstItem:
+                        menu.AppendSeparator()
+                        firstItem = False
+                    menu.Append(ext.id, ext.menuItemName)
+                    wx.EVT_MENU(self._GetParentFrame(), ext.id, extService.ProcessEvent)
+                    wx.EVT_UPDATE_UI(self._GetParentFrame(), ext.id, extService.ProcessUpdateUIEvent)
+                    
             itemIDs = [None]
             for item in self._treeCtrl.GetSelections():
                 if self._IsItemProcessModelFile(item):
                     itemIDs = [None, ProjectService.RUN_SELECTED_PM_ID, None]
                     break
         else:  # Project context
-            itemIDs = [wx.ID_CLOSE, wx.ID_SAVE, wx.ID_SAVEAS, None]
+            itemIDs = []
         menuBar = self._GetParentFrame().GetMenuBar()
-        itemIDs = itemIDs + [ProjectService.ADD_FILES_TO_PROJECT_ID, ProjectService.ADD_ALL_FILES_TO_PROJECT_ID, ProjectService.REMOVE_FROM_PROJECT]
+        itemIDs = itemIDs + [ProjectService.ADD_FILES_TO_PROJECT_ID, ProjectService.ADD_DIR_FILES_TO_PROJECT_ID, ProjectService.ADD_FOLDER_ID, ProjectService.REMOVE_FROM_PROJECT, None, ProjectService.CLOSE_PROJECT_ID, ProjectService.DELETE_PROJECT_ID, None, ProjectService.PROJECT_PROPERTIES_ID]
         svnIDs = [SVNService.SVNService.SVN_UPDATE_ID, SVNService.SVNService.SVN_CHECKIN_ID, SVNService.SVNService.SVN_REVERT_ID]
         if SVN_INSTALLED:
             itemIDs = itemIDs + [None, SVNService.SVNService.SVN_UPDATE_ID, SVNService.SVNService.SVN_CHECKIN_ID, SVNService.SVNService.SVN_REVERT_ID]
@@ -1258,15 +2473,16 @@ class ProjectView(wx.lib.docview.View):
             projectService.OnRunProcessModel(event, runSelected=True)
 
 
-    def OnRename(self, event):
-        if self._treeCtrl.GetSelections():
-            self._treeCtrl.EditLabel(self._treeCtrl.GetSelections()[0])
+    def OnRename(self, event=None):
+        items = self._treeCtrl.GetSelections()
+        if items:
+            self._treeCtrl.EditLabel(items[0])
 
 
     def OnBeginLabelEdit(self, event):
         self._editingSoDontKillFocus = True
         item = event.GetItem()
-        if not self._IsItemFile(item) and not self._IsItemProject(item):
+        if (self.GetMode() == ProjectView.PHYSICAL_MODE) and not self._IsItemFile(item):
             event.Veto()
 
 
@@ -1274,25 +2490,35 @@ class ProjectView(wx.lib.docview.View):
         self._editingSoDontKillFocus = False
         item = event.GetItem()
         newName = event.GetLabel()
-        if not newName or (not self._IsItemFile(item) and not self._IsItemProject(item)):
+        if not newName:
             event.Veto()
             return
         if self._IsItemFile(item):
-            oldFile = self._GetItemFile(item)
-            newFile = os.path.join(os.path.split(oldFile)[0], newName)
-            project = self._GetItemProject(item)
-            if not project.GetCommandProcessor().Submit(ProjectRenameFileCommand(project, oldFile, newFile)):
+            oldFilePath = self._GetItemFilePath(item)
+            newFilePath = os.path.join(os.path.dirname(oldFilePath), newName)
+            doc = self.GetDocument()
+            if not doc.GetCommandProcessor().Submit(ProjectRenameFileCommand(doc, oldFilePath, newFilePath)):
                 event.Veto()
                 return
-            self._treeCtrl.SortChildren(self._treeCtrl.GetItemParent(self._treeCtrl.GetSelections()[0]))
-        elif self._IsItemProject(item):
-            oldFile = self._GetItemProject(item).GetFilename()
-            newFile = os.path.join(os.path.split(oldFile)[0], newName)
-            project = self._GetItemProject(item)            
-            if not project.GetCommandProcessor().Submit(ProjectRenameFileCommand(project, oldFile, newFile, True)):
+            self._treeCtrl.SortChildren(self._treeCtrl.GetItemParent(item))
+        else:
+            oldFolderPath = self._GetItemFolderPath(item)
+            newFolderPath = os.path.dirname(oldFolderPath)
+            if newFolderPath:
+                newFolderPath += "/"
+            newFolderPath += newName
+            if self._treeCtrl.FindFolder(newFolderPath):
+                wx.MessageBox(_("Folder '%s' already exists.") % newName,
+                            "Rename Folder",
+                            wx.OK | wx.ICON_EXCLAMATION,
+                            self.GetFrame())
+                event.Veto()
+                return
+            doc = self.GetDocument()
+            if not doc.GetCommandProcessor().Submit(ProjectRenameFolderCommand(doc, oldFolderPath, newFolderPath)):
                 event.Veto()
                 return
-            self._treeCtrl.SortChildren(self._treeCtrl.GetRootItem())
+            self._treeCtrl.SortChildren(self._treeCtrl.GetItemParent(item))
 
 
     def CanPaste(self):
@@ -1318,9 +2544,9 @@ class ProjectView(wx.lib.docview.View):
         fileDataObject = wx.FileDataObject()
         items = self._treeCtrl.GetSelections()
         for item in items:
-            if self._IsItemFile(item):
-                file = self._treeCtrl.GetLongFilename(item)
-                fileDataObject.AddFile(file)
+            filePath = self._GetItemFilePath(item)
+            if filePath:
+                fileDataObject.AddFile(filePath)
         if len(fileDataObject.GetFilenames()) > 0 and wx.TheClipboard.Open():
             wx.TheClipboard.SetData(fileDataObject)
             wx.TheClipboard.Close()
@@ -1330,61 +2556,192 @@ class ProjectView(wx.lib.docview.View):
         if wx.TheClipboard.Open():
             fileDataObject = wx.FileDataObject()
             if wx.TheClipboard.GetData(fileDataObject):
-                self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), fileDataObject.GetFilenames()))
+                folderPath = None
+                if self.GetMode() == ProjectView.LOGICAL_MODE:
+                    items = self._treeCtrl.GetSelections()
+                    if items:
+                        item = items[0]
+                        if item:
+                            folderPath = self._GetItemFolderPath(item)
+                self.GetDocument().GetCommandProcessor().Submit(ProjectAddFilesCommand(self.GetDocument(), fileDataObject.GetFilenames(), folderPath))
             wx.TheClipboard.Close()
 
 
     def OnClear(self, event):
-        items = self._treeCtrl.GetSelections()
-        files = []
-        for item in items:
-            if self._IsItemFile(item):
-                files.append((self._GetItemProject(item), self._GetItemFile(item)))
-        self.GetDocument().GetCommandProcessor().Submit(ProjectRemoveFilesCommand(files))
+        if self._HasFilesSelected():
+            items = self._treeCtrl.GetSelections()
+            files = []
+            for item in items:
+                file = self._GetItemFile(item)
+                if file:
+                    files.append(file)
+            self.GetDocument().GetCommandProcessor().Submit(ProjectRemoveFilesCommand(self.GetDocument(), files))
+
+        elif self._HasFoldersSelected():
+            items = self._treeCtrl.GetSelections()
+            item = items[0]
+            if self._treeCtrl.GetChildrenCount(item, False):
+                wx.MessageBox(_("Cannot remove folder '%s'.  Folder is not empty.") % self._treeCtrl.GetItemText(item),
+                              _("Remove Folder"),
+                              wx.OK | wx.ICON_EXCLAMATION,
+                              self.GetFrame())
+                return
+
+            folderPath = self._GetItemFolderPath(item)
+            self.GetDocument().GetCommandProcessor().Submit(ProjectRemoveFolderCommand(self, self.GetDocument(), folderPath))
 
 
     def OnDeleteFile(self, event):
         yesNoMsg = wx.MessageDialog(self.GetFrame(),
-                                 _("Delete cannot be reversed.\n\nRemove the selected files from the\nprojects and file system permanently?"),
+                                 _("Delete cannot be reversed.\n\nRemove the selected files from the\nproject and file system permanently?"),
                                  _("Delete File"),
                                  wx.YES_NO|wx.ICON_QUESTION)
-        if yesNoMsg.ShowModal() == wx.ID_NO:
+        yesNoMsg.CenterOnParent()
+        status = yesNoMsg.ShowModal()
+        yesNoMsg.Destroy()
+        if status == wx.ID_NO:
             return
-        
+
         items = self._treeCtrl.GetSelections()
-        files = []
         delFiles = []
         for item in items:
-            if self._IsItemFile(item):
-                filename = self._GetItemFile(item)
-                files.append((self._GetItemProject(item), filename))
-                if filename not in delFiles:
-                    delFiles.append(filename)
-
-        # remove selected files from projects
-        projects = []
-        for data in files:
-            proj, filename = data
-            if proj not in projects:
-                projects.append(proj)
-        for project in projects:
-            filenames = []
-            for data in files:
-                proj, filename = data
-                if project == proj:
-                    filenames.append(filename)
-            project.RemoveFiles(filenames)
-                
+            filePath = self._GetItemFilePath(item)
+            if filePath and filePath not in delFiles:
+                delFiles.append(filePath)
+
+        # remove selected files from project
+        self.GetDocument().RemoveFiles(delFiles)
+
         # remove selected files from file system
-        for filename in delFiles:
-            if os.path.exists(filename):
+        for filePath in delFiles:
+            if os.path.exists(filePath):
                 try:
-                    os.remove(filename)
+                    os.remove(filePath)
                 except:
-                    wx.MessageBox("Could not delete '%s'.  %s" % (os.path.basename(filename), sys.exc_value),
+                    wx.MessageBox("Could not delete '%s'.  %s" % (os.path.basename(filePath), sys.exc_value),
                                   _("Delete File"),
-                                  wx.OK | wx.ICON_EXCLAMATION)
-                                  
+                                  wx.OK | wx.ICON_EXCLAMATION,
+                                  self.GetFrame())
+
+    def OnDeleteProject(self, event=None, noPrompt=False, closeFiles=True, delFiles=True):
+        
+        class DeleteProjectDialog(wx.Dialog):
+        
+            def __init__(self, parent, doc):
+                wx.Dialog.__init__(self, parent, -1, _("Delete Project"), size = (310, 330))
+        
+                sizer = wx.BoxSizer(wx.VERTICAL)
+                sizer.Add(wx.StaticText(self, -1, _("Delete cannot be reversed.\nDeleted files are removed from the file system permanently.\n\nThe project file '%s' will be closed and deleted.") % os.path.basename(doc.GetFilename())), 0, wx.ALL, SPACE)
+                self._delFilesCtrl = wx.CheckBox(self, -1, _("Delete all files in project"))
+                self._delFilesCtrl.SetValue(True)
+                self._delFilesCtrl.SetToolTipString(_("Deletes files from disk, whether open or closed"))
+                sizer.Add(self._delFilesCtrl, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, SPACE)
+                self._closeDeletedCtrl = wx.CheckBox(self, -1, _("Close open files belonging to project"))
+                self._closeDeletedCtrl.SetValue(True)
+                self._closeDeletedCtrl.SetToolTipString(_("Closes open editors for files belonging to project"))
+                sizer.Add(self._closeDeletedCtrl, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, SPACE)
+                
+                sizer.Add(self.CreateButtonSizer(wx.OK | wx.CANCEL), 0, wx.ALIGN_RIGHT|wx.RIGHT|wx.LEFT|wx.BOTTOM, SPACE)
+        
+                self.SetSizer(sizer)
+                sizer.Fit(self)
+                self.Layout()
+
+        doc = self.GetDocument()
+        if not noPrompt:
+            dlg = DeleteProjectDialog(self.GetFrame(), doc)
+            dlg.CenterOnParent()
+            status = dlg.ShowModal()
+            delFiles = dlg._delFilesCtrl.GetValue()
+            closeFiles = dlg._closeDeletedCtrl.GetValue()
+            dlg.Destroy()
+            if status == wx.ID_CANCEL:
+                return
+
+        if closeFiles or delFiles:
+            filesInProject = doc.GetFiles()
+            filesInProject.append(self.GetDocument().GetDeploymentFilepath())  # remove deployment file also.
+                
+            # don't remove self prematurely
+            filePath = doc.GetFilename()
+            if filePath in filesInProject:
+                filesInProject.remove(filePath)
+            
+            # don't close/delete files outside of project's directory
+            homeDir = doc.GetModel().homeDir + os.sep
+            for filePath in filesInProject[:]:
+                fileDir = os.path.dirname(filePath) + os.sep
+                if not fileDir.startswith(homeDir):  
+                    filesInProject.remove(filePath)
+
+        if closeFiles:
+            # close any open views of documents in the project
+            openDocs = self.GetDocumentManager().GetDocuments()[:]  # need copy or docs shift when closed
+            for d in openDocs:
+                if d.GetFilename() in filesInProject:
+                    d.Modify(False)  # make sure it doesn't ask to save the file
+                    if isinstance(d.GetDocumentTemplate(), ProjectTemplate):  # if project, remove from project list drop down
+                        if self.GetDocumentManager().CloseDocument(d, True):
+                            self.RemoveProjectUpdate(d)
+                    else:  # regular file
+                        self.GetDocumentManager().CloseDocument(d, True)
+                
+        # remove files in project from file system
+        if delFiles:
+            dirPaths = []
+            for filePath in filesInProject:
+                if os.path.isfile(filePath):
+                    try:
+                        dirPath = os.path.dirname(filePath)
+                        if dirPath not in dirPaths:
+                            dirPaths.append(dirPath)
+                            
+                        os.remove(filePath)
+                    except:
+                        wx.MessageBox("Could not delete file '%s'.\n%s" % (filePath, sys.exc_value),
+                                      _("Delete Project"),
+                                      wx.OK | wx.ICON_EXCLAMATION,
+                                      self.GetFrame())
+                                      
+        filePath = doc.GetFilename()
+        
+        # close project
+        if doc:
+            doc.Modify(False)  # make sure it doesn't ask to save the project
+            if self.GetDocumentManager().CloseDocument(doc, True):
+                self.RemoveCurrentDocumentUpdate()
+
+        # remove project file
+        if delFiles:
+            dirPath = os.path.dirname(filePath)
+            if dirPath not in dirPaths:
+                dirPaths.append(dirPath)
+        if os.path.isfile(filePath):
+            try:
+                os.remove(filePath)
+            except:
+                wx.MessageBox("Could not delete project file '%s'.\n%s" % (filePath, sys.exc_value),
+                              _("Delete Prjoect"),
+                              wx.OK | wx.ICON_EXCLAMATION,
+                              self.GetFrame())
+            
+        # remove empty directories from file system
+        if delFiles:
+            dirPaths.sort()     # sorting puts parent directories ahead of child directories
+            dirPaths.reverse()  # remove child directories first
+
+            for dirPath in dirPaths:
+                if os.path.isdir(dirPath):
+                    files = os.listdir(dirPath)
+                    if not files:
+                        try:
+                            os.rmdir(dirPath)
+                        except:
+                            wx.MessageBox("Could not delete empty directory '%s'.\n%s" % (dirPath, sys.exc_value),
+                                          _("Delete Project"),
+                                          wx.OK | wx.ICON_EXCLAMATION,
+                                          self.GetFrame())
+        
 
     def OnKeyPressed(self, event):
         key = event.KeyCode()
@@ -1397,9 +2754,17 @@ class ProjectView(wx.lib.docview.View):
     def OnSelectAll(self, event):
         project = self.GetDocument()
         if project:
-            self._treeCtrl.UnselectAll()
-            for child in self._GetChildItems(self._GetProjectItem(project)):
+            self.DoSelectAll(self._treeCtrl.GetRootItem())
+
+
+    def DoSelectAll(self, parentItem):
+        (child, cookie) = self._treeCtrl.GetFirstChild(parentItem)
+        while child.IsOk():
+            if self._IsItemFile(child):
                 self._treeCtrl.SelectItem(child)
+            else:
+                self.DoSelectAll(child)
+            (child, cookie) = self._treeCtrl.GetNextChild(parentItem, cookie)
 
 
     def OnOpenSelectionSDI(self, event):
@@ -1410,10 +2775,10 @@ class ProjectView(wx.lib.docview.View):
     def OnOpenSelection(self, event):
         doc = None
         try:
-            items = self._treeCtrl.GetSelections()
+            items = self._treeCtrl.GetSelections()[:]
             for item in items:
-                if self._IsItemFile(item):
-                    filepath = self._GetItemFile(item)
+                filepath = self._GetItemFilePath(item)
+                if filepath:
                     if not os.path.exists(filepath):
                         msgTitle = wx.GetApp().GetAppName()
                         if not msgTitle:
@@ -1423,38 +2788,37 @@ class ProjectView(wx.lib.docview.View):
                                       msgTitle,
                                       wx.YES_NO|wx.ICON_QUESTION
                                       )
-                        if yesNoMsg.ShowModal() == wx.ID_NO:
+                        yesNoMsg.CenterOnParent()
+                        status = yesNoMsg.ShowModal()
+                        yesNoMsg.Destroy()
+                        if status == wx.ID_NO:
                             continue
-                        findFile = wx.FileDialog(self.GetFrame(),
+                        findFileDlg = wx.FileDialog(self.GetFrame(),
                                                  _("Choose a file"),
-                                                 wx.lib.docview.PathOnly(filepath),
-                                                 wx.lib.docview.FileNameFromPath(filepath),
-                                                 style = wx.OPEN
+                                                 defaultFile=wx.lib.docview.FileNameFromPath(filepath),
+                                                 style=wx.OPEN|wx.FILE_MUST_EXIST|wx.CHANGE_DIR
                                                 )
-                        if findFile.ShowModal() == wx.ID_OK and findFile.GetPath():
-                            newpath = findFile.GetPath()
+                        # findFileDlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
+                        if findFileDlg.ShowModal() == wx.ID_OK:
+                            newpath = findFileDlg.GetPath()
                         else:
                             newpath = None
-                        findFile.Destroy()
+                        findFileDlg.Destroy()
                         if newpath:
                             # update Project Model with new location
-                            project = self._GetItemProject(item)
-                            project.RemoveFile(filepath)
-                            project.AddFile(newpath)
+                            self.GetDocument().UpdateFilePath(filepath, newpath)
                             filepath = newpath
 
-                    doc = self.GetDocumentManager().CreateDocument(filepath, wx.lib.docview.DOC_SILENT)
-                    if not doc:
-                        shortFilename = self._treeCtrl.GetItemText(item)
-                        if shortFilename.endswith(".agp"):
-                            projItem = self._GetProjectItem(shortFilename=shortFilename)
-                            self._treeCtrl.UnselectAll()
-                            if not self._treeCtrl.IsExpanded(projItem):
-                                self._treeCtrl.Expand(projItem)
-                            if not self._treeCtrl.IsVisible(projItem):
-                                self._treeCtrl.EnsureVisible(projItem)
-                            if not self._treeCtrl.IsSelected(projItem):
-                                self._treeCtrl.SelectItem(projItem)
+                    doc = self.GetDocumentManager().CreateDocument(filepath, wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE)
+                    if not doc and filepath.endswith(PROJECT_EXTENSION):  # project already open
+                        self.SetProject(filepath)
+                    elif doc:
+                        projectService = wx.GetApp().GetService(ProjectService)
+                        if projectService:
+                            projectService.AddProjectMapping(doc)
+                            if hasattr(doc, "GetModel"):
+                                projectService.AddProjectMapping(doc.GetModel())
+                        
 
         except IOError, (code, message):
             msgTitle = wx.GetApp().GetAppName()
@@ -1476,25 +2840,26 @@ class ProjectView(wx.lib.docview.View):
         return self._treeCtrl.GetCount() > 1    #  1 item = root item, don't count as having files
 
 
-    def _HasSelection(self):
+    def _HasFilesSelected(self):
         if not self._treeCtrl:
             return False
-            
         items = self._treeCtrl.GetSelections()
-        if items:
-            return True
-            
+        if not items:
+            return False
+        for item in items:
+            if self._IsItemFile(item):
+                return True
         return False
 
 
-    def _HasFilesSelected(self):
+    def _HasFoldersSelected(self):
         if not self._treeCtrl:
             return False
         items = self._treeCtrl.GetSelections()
         if not items:
             return False
         for item in items:
-            if not self._IsItemFile(item):
+            if self._IsItemFile(item):
                 return False
         return True
 
@@ -1503,76 +2868,47 @@ class ProjectView(wx.lib.docview.View):
         return project.GetPrintableName()
 
 
-    # Return the tree item for a project
-    def _GetProjectItem(self, project=None, shortFilename=None):
-        rootItem = self._treeCtrl.GetRootItem()
-        (child, cookie) = self._treeCtrl.GetFirstChild(rootItem)
-        while child.IsOk():
-            if project:
-                if self._treeCtrl.GetProjectDoc(child) == project:
-                    return child
-            elif shortFilename:
-                if self._treeCtrl.GetItemText(child) == shortFilename:
-                    return child
-            (child, cookie) = self._treeCtrl.GetNextChild(rootItem, cookie)
-        return None
-
-
-    # Returns the project for an item, either for a project item or a file that is part of a project
-    def _GetItemProject(self, item):
-        if self._IsItemRoot(item):
-            return None
-        if self._IsItemProject(item):
-            return self._treeCtrl.GetProjectDoc(item)
-        if self._IsItemFile(item):
-            return self._treeCtrl.GetProjectDoc(self._treeCtrl.GetItemParent(item))
-        return None
-
-
-    def _GetItemFile(self, item):
-        if self._IsItemFile(item):
-            return self._treeCtrl.GetLongFilename(item)
+    def _GetItemFilePath(self, item):
+        file = self._GetItemFile(item)
+        if file:
+            return file.filePath
         else:
             return None
 
 
-    def _GetFileItem(self, shortFileName = None, longFileName = None):
-        """ Returns the tree item for a file given the short (display) or long (fullpath) file name. """
-        
+    def _GetItemFolderPath(self, item):
         rootItem = self._treeCtrl.GetRootItem()
-        (project, cookie) = self._treeCtrl.GetFirstChild(rootItem)
-        while project.IsOk():
-            (child, cookie2) = self._treeCtrl.GetFirstChild(project)
-            while child.IsOk():
-                if shortFileName:
-                    if self._treeCtrl.GetItemText(child) == shortFileName:
-                        return child
-                else:
-                    if self._treeCtrl.GetLongFilename(child) == longFileName:
-                        return child
-                (child, cookie2) = self._treeCtrl.GetNextChild(project, cookie2)
-            (project, cookie) = self._treeCtrl.GetNextChild(rootItem, cookie)
-        return None
-
-
-    def _IsItemRoot(self, item):
-        return item == self._treeCtrl.GetRootItem()
-
+        if item == rootItem:
+            return ""
+            
+        if self._IsItemFile(item):
+            item = self._treeCtrl.GetItemParent(item)
+        
+        folderPath = ""
+        while item != rootItem:
+            if folderPath:
+                folderPath = self._treeCtrl.GetItemText(item) + "/" + folderPath
+            else:
+                folderPath = self._treeCtrl.GetItemText(item)
+            item = self._treeCtrl.GetItemParent(item)
+            
+        return folderPath
 
-    def _IsItemProject(self, item):
-        return self._treeCtrl.GetProjectDoc(item) != None
+            
+    def _GetItemFile(self, item):
+        return self._treeCtrl.GetPyData(item)
 
 
     def _IsItemFile(self, item):
-        return self._treeCtrl.GetProjectDoc(item) == None
+        return self._GetItemFile(item) != None
 
 
     def _IsItemProcessModelFile(self, item):
         if ACTIVEGRID_BASE_IDE:
             return False
-            
+
         if self._IsItemFile(item):
-            filename = self._treeCtrl.GetLongFilename(item)
+            filepath = self._GetItemFilePath(item)
             ext = None
             for template in self.GetDocumentManager().GetTemplates():
                 if template.GetDocumentType() == ProcessModelEditor.ProcessModelDocument:
@@ -1581,7 +2917,7 @@ class ProjectView(wx.lib.docview.View):
             if not ext:
                 return False
 
-            if filename.endswith(ext):
+            if filepath.endswith(ext):
                 return True
 
         return False
@@ -1594,8 +2930,17 @@ class ProjectView(wx.lib.docview.View):
             children.append(child)
             (child, cookie) = self._treeCtrl.GetNextChild(parentItem, cookie)
         return children
-        
-        
+
+
+    def _GetFolderItems(self, parentItem):
+        folderItems = []
+        childrenItems = self._GetChildItems(parentItem)
+        for childItem in childrenItems:
+            if not self._IsItemFile(childItem):
+                folderItems.append(childItem)
+                folderItems += self._GetFolderItems(childItem)
+        return folderItems
+
 
 class ProjectFileDropTarget(wx.FileDropTarget):
 
@@ -1604,70 +2949,129 @@ class ProjectFileDropTarget(wx.FileDropTarget):
         self._view = view
 
 
-    def OnDropFiles(self, x, y, filenames):
-        if self._view.DoSelectProject(x, y):
-            self._view.DoAddFilesToProject(filenames)
-            self._view.DoSelectFiles(filenames)
+    def OnDropFiles(self, x, y, filePaths):
+        """ Do actual work of dropping files into project """
+        if self._view.GetDocument():
+            folderPath = None
+            if self._view.GetMode() == ProjectView.LOGICAL_MODE:
+                folderItem = self._view._treeCtrl.FindClosestFolder(x,y)
+                if folderItem:
+                    folderPath = self._view._GetItemFolderPath(folderItem)
+            self._view.DoAddFilesToProject(filePaths, folderPath)
             return True
         return False
 
 
     def OnDragOver(self, x, y, default):
-        if self._view.DoSelectProject(x,y):
+        """ Feedback to show copy cursor if copy is allowed """
+        if self._view.GetDocument():  # only allow drop if project exists
             return wx.DragCopy
         return wx.DragNone
 
 
 class ProjectPropertiesDialog(wx.Dialog):
+    RELATIVE_TO_PROJECT_FILE = _("relative to project file")
 
-
-    def __init__(self, parent, filename):
+    def __init__(self, parent, document):
         wx.Dialog.__init__(self, parent, -1, _("Project Properties"), size = (310, 330))
 
         filePropertiesService = wx.GetApp().GetService(wx.lib.pydocview.FilePropertiesService)
 
         notebook = wx.Notebook(self, -1)
+        
         tab = wx.Panel(notebook, -1)
-
-        gridSizer = RowColSizer()
-
-        gridSizer.Add(wx.StaticText(tab, -1, _("Filename:")), flag=wx.RIGHT, border=HALF_SPACE, row=0, col=0)
+        gridSizer = wx.FlexGridSizer(cols = 2, vgap = SPACE, hgap = SPACE)
+        gridSizer.AddGrowableCol(1)
+        gridSizer.Add(wx.StaticText(tab, -1, _("Filename:")))
+        filename = document.GetFilename()
         if os.path.isfile(filename):
-            gridSizer.Add(wx.StaticText(tab, -1, os.path.split(filename)[1]), row=0, col=1)
+            gridSizer.Add(wx.StaticText(tab, -1, os.path.split(filename)[1]))
 
-            gridSizer.Add(wx.StaticText(tab, -1, _("Location:")), flag=wx.RIGHT, border=HALF_SPACE, row=1, col=0)
-            gridSizer.Add(wx.StaticText(tab, -1, filePropertiesService.chopPath(os.path.split(filename)[0])), flag=wx.BOTTOM, border=SPACE, row=1, col=1)
+            gridSizer.Add(wx.StaticText(tab, -1, _("Location:")))
+            gridSizer.Add(wx.StaticText(tab, -1, filePropertiesService.chopPath(os.path.dirname(filename), length=50)))
 
-            gridSizer.Add(wx.StaticText(tab, -1, _("Size:")), flag=wx.RIGHT, border=HALF_SPACE, row=2, col=0)
-            gridSizer.Add(wx.StaticText(tab, -1, str(os.path.getsize(filename)) + ' ' + _("bytes")), row=2, col=1)
+            gridSizer.Add(wx.StaticText(tab, -1, _("Size:")))
+            gridSizer.Add(wx.StaticText(tab, -1, str(os.path.getsize(filename)) + ' ' + _("bytes")))
 
             lineSizer = wx.BoxSizer(wx.VERTICAL)    # let the line expand horizontally without vertical expansion
             lineSizer.Add(wx.StaticLine(tab, -1, size = (10,-1)), 0, wx.EXPAND)
-            gridSizer.Add(lineSizer, flag=wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.TOP, border=HALF_SPACE, row=3, col=0, colspan=2)
+            gridSizer.Add(lineSizer, flag=wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.TOP)
 
-            gridSizer.Add(wx.StaticText(tab, -1, _("Created:")), flag=wx.RIGHT, border=HALF_SPACE, row=4, col=0)
-            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getctime(filename))), row=4, col=1)
+            lineSizer = wx.BoxSizer(wx.VERTICAL)    # let the line expand horizontally without vertical expansion
+            lineSizer.Add(wx.StaticLine(tab, -1, size = (10,-1)), 0, wx.EXPAND)
+            gridSizer.Add(lineSizer, flag=wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.TOP)
 
-            gridSizer.Add(wx.StaticText(tab, -1, _("Modified:")), flag=wx.RIGHT, border=HALF_SPACE, row=5, col=0)
-            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getmtime(filename))), row=5, col=1)
+            gridSizer.Add(wx.StaticText(tab, -1, _("Created:")))
+            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getctime(filename))))
 
-            gridSizer.Add(wx.StaticText(tab, -1, _("Accessed:")), flag=wx.RIGHT, border=HALF_SPACE, row=6, col=0)
-            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getatime(filename))), row=6, col=1)
+            gridSizer.Add(wx.StaticText(tab, -1, _("Modified:")))
+            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getmtime(filename))))
 
+            gridSizer.Add(wx.StaticText(tab, -1, _("Accessed:")))
+            gridSizer.Add(wx.StaticText(tab, -1, time.ctime(os.path.getatime(filename))))
         else:
-            gridSizer.Add(wx.StaticText(tab, -1, os.path.split(filename)[1] + ' ' + _("[new project]")), row=0, col=1)
-
-        # add a border around the inside of the tab
-        spacerGrid = wx.BoxSizer(wx.VERTICAL)
-        spacerGrid.Add(gridSizer, 0, wx.ALL, SPACE);
+            gridSizer.Add(wx.StaticText(tab, -1, os.path.split(filename)[1] + ' ' + _("[new project]")))
+        spacerGrid = wx.BoxSizer(wx.HORIZONTAL)  # add a border around the inside of the tab
+        spacerGrid.Add(gridSizer, 1, wx.ALL|wx.EXPAND, SPACE);
         tab.SetSizer(spacerGrid)
         notebook.AddPage(tab, _("General"))
+
+        tab = wx.Panel(notebook, -1)
+        spacerGrid = wx.BoxSizer(wx.VERTICAL)  # add a border around the inside of the tab
+        homePathLabel = wx.StaticText(tab, -1, _("Home Dir:"))
+        if document.GetModel().isDefaultHomeDir:
+            defaultHomeDir = ProjectPropertiesDialog.RELATIVE_TO_PROJECT_FILE
+        else:
+            defaultHomeDir = document.GetModel().homeDir
+        self._homeDirCtrl = wx.ComboBox(tab, -1, defaultHomeDir, size=(125,-1), choices=[ProjectPropertiesDialog.RELATIVE_TO_PROJECT_FILE, document.GetModel().homeDir])
+        self._homeDirCtrl.SetToolTipString(self._homeDirCtrl.GetValue()) 
+        if not document.GetModel().isDefaultHomeDir:
+            self._homeDirCtrl.SetInsertionPointEnd()
+        def OnDirChanged(event):
+            self._homeDirCtrl.SetToolTip(wx.ToolTip(self._homeDirCtrl.GetValue()))  # wx.Bug: SetToolTipString only sets it for the dropdown control, not for the text edit control, so need to replace it completely
+        wx.EVT_COMBOBOX(self._homeDirCtrl, -1, OnDirChanged)
+        wx.EVT_TEXT(self._homeDirCtrl, -1, OnDirChanged)
+        choosePathButton = wx.Button(tab, -1, _("Browse..."))
+        def OnBrowseButton(event):
+            if self._homeDirCtrl.GetValue() == ProjectPropertiesDialog.RELATIVE_TO_PROJECT_FILE:
+                defaultHomeDir = document.GetModel().homeDir
+            else:
+                defaultHomeDir = self._homeDirCtrl.GetValue()
+                
+            dlg = wx.DirDialog(self, "Choose a directory:", defaultHomeDir,
+                              style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
+            if dlg.ShowModal() == wx.ID_OK:
+                self._homeDirCtrl.SetValue(dlg.GetPath())
+                self._homeDirCtrl.SetInsertionPointEnd()
+                self._homeDirCtrl.SetToolTip(wx.ToolTip(dlg.GetPath()))  # wx.Bug: SetToolTipString only sets it for the dropdown control, not for the text edit control, so need to replace it completely
+            dlg.Destroy()
+        wx.EVT_BUTTON(choosePathButton, -1, OnBrowseButton)
+        pathSizer = wx.BoxSizer(wx.HORIZONTAL)
+        pathSizer.Add(homePathLabel, 0, wx.ALIGN_CENTER_VERTICAL)
+        pathSizer.Add(self._homeDirCtrl, 1, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND|wx.LEFT, HALF_SPACE)
+        pathSizer.Add(choosePathButton, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT, SPACE)
+        spacerGrid.Add(pathSizer, 0, wx.ALL|wx.EXPAND, SPACE);
+        instructionText = wx.StaticText(tab, -1, _("The physical view shows files relative to Home Dir.\nThe Home Dir default is the project file's directory.\nSetting the Home Dir overrides the default directory."))
+        spacerGrid.Add(instructionText, 0, wx.ALL, SPACE);
+        tab.SetSizer(spacerGrid)
+        notebook.AddPage(tab, _("Physical View"))
+
+        if not ACTIVEGRID_BASE_IDE:
+            tab = wx.Panel(notebook, -1)
+            self._appInfoCtrl = PropertyService.PropertyCtrl(tab, header=False)
+            self._appInfoCtrl.SetDocument(document)
+            self._appInfoCtrl.SetModel(document.GetAppInfo())
+            sizer = wx.BoxSizer(wx.HORIZONTAL)
+            sizer.Add(self._appInfoCtrl, 1, wx.EXPAND)
+            tab.SetSizer(sizer)
+            notebook.AddPage(tab, _("App Info"))
+
         if wx.Platform == "__WXMSW__":
-            notebook.SetPageSize((310,200))
+            notebook.SetPageSize((310,300))
 
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(notebook, 0, wx.ALL | wx.EXPAND, SPACE)
-        sizer.Add(self.CreateButtonSizer(wx.OK), 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.BOTTOM, HALF_SPACE)
+        sizer.Add(self.CreateButtonSizer(wx.OK | wx.CANCEL), 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.BOTTOM, HALF_SPACE)
 
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -1689,12 +3093,22 @@ class ProjectOptionsPanel(wx.Panel):
         if not ACTIVEGRID_BASE_IDE:
             self._projShowWelcomeCheckBox = wx.CheckBox(self, -1, _("Show Welcome Dialog"))
             self._projShowWelcomeCheckBox.SetValue(config.ReadInt("RunWelcomeDialog", True))
-            projectSizer.Add(self._projShowWelcomeCheckBox, 0, wx.ALL, HALF_SPACE)        
+            projectSizer.Add(self._projShowWelcomeCheckBox, 0, wx.ALL, HALF_SPACE)
+            
+            sizer = wx.BoxSizer(wx.HORIZONTAL)
+            sizer.Add(wx.StaticText(self, -1, _("Default language for projects:")), 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, HALF_SPACE)
+            self._langCtrl = wx.Choice(self, -1, choices=deploymentlib.LANGUAGE_LIST)            
+            self._langCtrl.SetStringSelection(config.Read(APP_LAST_LANGUAGE, deploymentlib.LANGUAGE_DEFAULT))
+            self._langCtrl.SetToolTipString(_("Programming language to be used throughout the project."))
+            sizer.Add(self._langCtrl, 0, wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, MAC_RIGHT_BORDER)
+            projectSizer.Add(sizer, 0, wx.ALL, HALF_SPACE)
+
         projectBorderSizer.Add(projectSizer, 0, wx.ALL, SPACE)
         self.SetSizer(projectBorderSizer)
         self.Layout()
         parent.AddPage(self, _("Project"))
 
+
     def OnUseSashSelect(self, event):
         if not self._useSashMessageShown:
             msgTitle = wx.GetApp().GetAppName()
@@ -1712,6 +3126,11 @@ class ProjectOptionsPanel(wx.Panel):
         config.WriteInt("ProjectSaveDocs", self._projSaveDocsCheckBox.GetValue())
         if not ACTIVEGRID_BASE_IDE:
             config.WriteInt("RunWelcomeDialog", self._projShowWelcomeCheckBox.GetValue())
+            config.Write(APP_LAST_LANGUAGE, self._langCtrl.GetStringSelection())
+
+
+    def GetIcon(self):
+        return getProjectIcon()
 
 
 class ProjectService(Service.Service):
@@ -1720,16 +3139,19 @@ class ProjectService(Service.Service):
     # Constants
     #----------------------------------------------------------------------------
     SHOW_WINDOW = wx.NewId()  # keep this line for each subclass, need unique ID for each Service
-    RUNPM_ID = wx.NewId()
     RUN_SELECTED_PM_ID = wx.NewId()
     RUN_CURRENT_PM_ID = wx.NewId()
-    ADD_FILES_TO_PROJECT_ID = wx.NewId()
-    ADD_CURRENT_FILE_TO_PROJECT_ID = wx.NewId()
     RENAME_ID = wx.NewId()
     OPEN_SELECTION_ID = wx.NewId()
     REMOVE_FROM_PROJECT = wx.NewId()
     DELETE_FILE_ID = wx.NewId()
-    ADD_ALL_FILES_TO_PROJECT_ID = wx.NewId()
+    ADD_FILES_TO_PROJECT_ID = wx.NewId()
+    ADD_CURRENT_FILE_TO_PROJECT_ID = wx.NewId()
+    ADD_DIR_FILES_TO_PROJECT_ID = wx.NewId()
+    CLOSE_PROJECT_ID = wx.NewId()
+    PROJECT_PROPERTIES_ID = wx.NewId()
+    ADD_FOLDER_ID = wx.NewId()
+    DELETE_PROJECT_ID = wx.NewId()
     
 
     #----------------------------------------------------------------------------
@@ -1740,6 +3162,10 @@ class ProjectService(Service.Service):
         Service.Service.__init__(self, serviceName, embeddedWindowLocation)
         self._runHandlers = []
         self._suppressOpenProjectMessages = False
+        self._logicalViewDefaults = []
+        self._fileTypeDefaults = []
+        self._nameDefaults = []
+        self._mapToProject = dict()
 
 
     def _CreateView(self):
@@ -1795,16 +3221,36 @@ class ProjectService(Service.Service):
                 projectMenu.Append(ProjectService.ADD_FILES_TO_PROJECT_ID, _("Add &Files to Project..."), _("Adds a document to the current project"))
                 wx.EVT_MENU(frame, ProjectService.ADD_FILES_TO_PROJECT_ID, frame.ProcessEvent)
                 wx.EVT_UPDATE_UI(frame, ProjectService.ADD_FILES_TO_PROJECT_ID, frame.ProcessUpdateUIEvent)
-            if not menuBar.FindItemById(ProjectService.ADD_ALL_FILES_TO_PROJECT_ID):
-                projectMenu.Append(ProjectService.ADD_ALL_FILES_TO_PROJECT_ID, _("Add Directory Files to Project..."), _("Adds a directory's documents to the current project"))
-                wx.EVT_MENU(frame, ProjectService.ADD_ALL_FILES_TO_PROJECT_ID, frame.ProcessEvent)
-                wx.EVT_UPDATE_UI(frame, ProjectService.ADD_ALL_FILES_TO_PROJECT_ID, frame.ProcessUpdateUIEvent)
+            if not menuBar.FindItemById(ProjectService.ADD_DIR_FILES_TO_PROJECT_ID):
+                projectMenu.Append(ProjectService.ADD_DIR_FILES_TO_PROJECT_ID, _("Add Directory Files to Project..."), _("Adds a directory's documents to the current project"))
+                wx.EVT_MENU(frame, ProjectService.ADD_DIR_FILES_TO_PROJECT_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, ProjectService.ADD_DIR_FILES_TO_PROJECT_ID, frame.ProcessUpdateUIEvent)
             if not menuBar.FindItemById(ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID):
                 projectMenu.Append(ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID, _("&Add Active File to Project..."), _("Adds the active document to a project"))
                 wx.EVT_MENU(frame, ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID, frame.ProcessEvent)
                 wx.EVT_UPDATE_UI(frame, ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID, frame.ProcessUpdateUIEvent)
-        viewMenuIndex = menuBar.FindMenu(_("&View"))
-        menuBar.Insert(viewMenuIndex + 1, projectMenu, _("&Project"))
+            if not menuBar.FindItemById(ProjectService.ADD_FOLDER_ID):
+                projectMenu.Append(ProjectService.ADD_FOLDER_ID, _("Add Folder to Project"), _("Adds a new folder"))
+                wx.EVT_MENU(frame, ProjectService.ADD_FOLDER_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, ProjectService.ADD_FOLDER_ID, frame.ProcessUpdateUIEvent)
+            if not menuBar.FindItemById(ProjectService.CLOSE_PROJECT_ID):
+                projectMenu.AppendSeparator()
+                projectMenu.Append(ProjectService.CLOSE_PROJECT_ID, _("Close Project"), _("Closes currently open project"))
+                wx.EVT_MENU(frame, ProjectService.CLOSE_PROJECT_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, ProjectService.CLOSE_PROJECT_ID, frame.ProcessUpdateUIEvent)
+            if not menuBar.FindItemById(ProjectService.DELETE_PROJECT_ID):
+                projectMenu.Append(ProjectService.DELETE_PROJECT_ID, _("Delete Project..."), _("Delete currently open project and its files."))
+                wx.EVT_MENU(frame, ProjectService.DELETE_PROJECT_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, ProjectService.DELETE_PROJECT_ID, frame.ProcessUpdateUIEvent)
+            if not menuBar.FindItemById(ProjectService.PROJECT_PROPERTIES_ID):
+                projectMenu.AppendSeparator()
+                projectMenu.Append(ProjectService.PROJECT_PROPERTIES_ID, _("Project Properties"), _("Project Properties"))
+                wx.EVT_MENU(frame, ProjectService.PROJECT_PROPERTIES_ID, frame.ProcessEvent)
+                wx.EVT_UPDATE_UI(frame, ProjectService.PROJECT_PROPERTIES_ID, frame.ProcessUpdateUIEvent)
+        index = menuBar.FindMenu(_("&Format"))
+        if index == -1:
+            index = menuBar.FindMenu(_("&View"))
+        menuBar.Insert(index + 1, projectMenu, _("&Project"))
         editMenu = menuBar.GetMenu(menuBar.FindMenu(_("&Edit")))
         if not menuBar.FindItemById(ProjectService.RENAME_ID):
             editMenu.Append(ProjectService.RENAME_ID, _("&Rename"), _("Renames the active item"))
@@ -1845,47 +3291,108 @@ class ProjectService(Service.Service):
         return True
 
 
+    #----------------------------------------------------------------------------
+    # Document Manager Methods
+    #----------------------------------------------------------------------------
+
+    def FindProjectFromMapping(self, key):
+        """ Find which project a model or document belongs to """
+        return self._mapToProject.get(key)
+    
+
+    def AddProjectMapping(self, key, projectDoc=None):
+        """ Generate a mapping from model or document to project.  If no project given, use current project.
+            e.g. Which project does this model or document belong to (when it was opened)?
+        """
+        if not projectDoc:
+            projectDoc = self.GetCurrentProject()
+        self._mapToProject[key] = projectDoc
+        
+
+    #----------------------------------------------------------------------------
+    # Default Logical View Folder Methods
+    #----------------------------------------------------------------------------
+
+    def AddLogicalViewFolderDefault(self, pattern, folder):
+        self._logicalViewDefaults.append((pattern, folder))
+
+
+    def FindLogicalViewFolderDefault(self, filename):
+        for (pattern, folder) in self._logicalViewDefaults:
+            if filename.endswith(pattern):
+                return folder
+        return None
+
+
+    #----------------------------------------------------------------------------
+    # Default File Type Methods
+    #----------------------------------------------------------------------------
+
+    def AddFileTypeDefault(self, pattern, type):
+        self._fileTypeDefaults.append((pattern, type))
+
+
+    def FindFileTypeDefault(self, filename):
+        for (pattern, type) in self._fileTypeDefaults:
+            if filename.endswith(pattern):
+                return type
+        return None
+
+
+    #----------------------------------------------------------------------------
+    # Default Name Methods
+    #----------------------------------------------------------------------------
+
+    def AddNameDefault(self, pattern, method):
+        self._nameDefaults.append((pattern, method))
+
+
+    def FindNameDefault(self, filename):
+        for (pattern, method) in self._nameDefaults:
+            if filename.endswith(pattern):
+                return method(filename)
+        return None
+        
+
+    def GetDefaultNameCallback(self, filename):
+        """ A method for generating name from filepath for Project Service """
+        return os.path.splitext(os.path.basename(filename))[0]
+        
+
     #----------------------------------------------------------------------------
     # Event Processing Methods
     #----------------------------------------------------------------------------
 
     def ProcessEventBeforeWindows(self, event):
         id = event.GetId()
-        
+
         if id == wx.ID_CLOSE_ALL:
             self.OnFileCloseAll(event)
             return True
-            
-        elif id == wx.ID_CLOSE:
-            document = self.GetDocumentManager().GetCurrentDocument()
-            if document and document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
-                self.OnProjectClose(event)
-                return True
-            else:
-                return False
         return False
 
 
     def ProcessUpdateUIEventBeforeWindows(self, event):
         id = event.GetId()
-        
+
         if id == wx.ID_CLOSE_ALL:
             for document in self.GetDocumentManager().GetDocuments():
                 if document.GetDocumentTemplate().GetDocumentType() != ProjectDocument:
                     event.Enable(True)
                     return True
-                    
+
             event.Enable(False)
             return True
-            
+
         elif id == wx.ID_CLOSE:
+            # "File | Close" is too confusing and hard to determine whether user wants to close a viewed file or the current project.
+            # Disallow "File | Close" if project is current document or active in project view.
+            # User must explicitly close project via "Project | Close Current Project".
             document = self.GetDocumentManager().GetCurrentDocument()
             if document and document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
-                projectFilenames = self.GetView().GetSelectedProjects()
-                if projectFilenames and len(projectFilenames):
-                    event.Enable(True)
-                else:
-                    event.Enable(False)
+                event.Enable(False)
+                return True
+            if self.GetView().ProcessUpdateUIEvent(event):
                 return True
                 
         return False
@@ -1905,7 +3412,11 @@ class ProjectService(Service.Service):
         elif id == ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID:
             self.OnAddCurrentFileToProject(event)
             return True
-        elif id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID:
+        elif (id == ProjectService.PROJECT_PROPERTIES_ID
+        or id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID
+        or id == ProjectService.ADD_FOLDER_ID
+        or id == ProjectService.DELETE_PROJECT_ID
+        or id == ProjectService.CLOSE_PROJECT_ID):
             if self.GetView():
                 return self.GetView().ProcessEvent(event)
             else:
@@ -1919,22 +3430,27 @@ class ProjectService(Service.Service):
             return True
 
         id = event.GetId()
-        if (id == ProjectService.RUNPM_ID
-        or id == ProjectService.RUN_SELECTED_PM_ID
+        if (id == ProjectService.RUN_SELECTED_PM_ID
         or id == ProjectService.RUN_CURRENT_PM_ID):
-            event.Enable(self._HasOpenedProjects() and self._HasProcessModel())
+            event.Enable(True)
             return True
         elif id == ProjectService.ADD_CURRENT_FILE_TO_PROJECT_ID:
             event.Enable(self._CanAddCurrentFileToProject())
             return True
         elif (id == ProjectService.ADD_FILES_TO_PROJECT_ID
-        or id == ProjectService.ADD_ALL_FILES_TO_PROJECT_ID
+        or id == ProjectService.ADD_DIR_FILES_TO_PROJECT_ID
         or id == ProjectService.RENAME_ID
         or id == ProjectService.OPEN_SELECTION_ID
         or id == ProjectService.DELETE_FILE_ID):
             event.Enable(False)
             return True
-        elif id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID:
+        elif id == ProjectService.PROJECT_PROPERTIES_ID:
+            event.Enable(self._HasOpenedProjects())
+            return True
+        elif (id == wx.lib.pydocview.FilePropertiesService.PROPERTIES_ID
+        or id == ProjectService.ADD_FOLDER_ID
+        or id == ProjectService.DELETE_PROJECT_ID
+        or id == ProjectService.CLOSE_PROJECT_ID):
             if self.GetView():
                 return self.GetView().ProcessUpdateUIEvent(event)
             else:
@@ -1944,7 +3460,33 @@ class ProjectService(Service.Service):
 
 
     def OnRunProcessModel(self, event, runSelected=False, runCurrentFile=False):
-        project = self.GetView().GetDocument()
+        project = self.GetCurrentProject()
+
+        if runCurrentFile:
+            doc = self.GetDocumentManager().GetCurrentDocument()
+            if not doc or not hasattr(doc, "GetFilename"):
+                return
+            fileToRun = doc.GetFilename()
+            projects = self.FindProjectByFile(fileToRun)
+            if not projects:
+                return
+            elif project in projects:
+                # use current project
+                pass
+            elif len(projects) == 1:
+                # only one project, display it
+                project = projects[0]
+                self.GetView().SetProject(project.GetFilename())
+            elif len(projects) > 1:
+                strings = map(lambda file: os.path.basename(file.GetFilename()), projects)
+                res = wx.GetSingleChoiceIndex(_("More than one project uses '%s'.  Select project to run:") % os.path.basename(fileToRun),
+                                              _("Select Project"),
+                                              strings,
+                                              self.GetView()._GetParentFrame())
+                if res == -1:
+                    return
+                project = projects[res]
+                self.GetView().SetProject(project.GetFilename())
 
         if project:
             ext = None
@@ -1960,11 +3502,6 @@ class ProjectService(Service.Service):
                 return
 
             docs = wx.GetApp().GetDocumentManager().GetDocuments()
-            for doc in docs:
-                if doc.GetFilename() in files and doc.GetDocumentTemplate().GetDocumentType() == ProcessModelEditor.ProcessModelDocument:
-                    if not doc.GetProcessModel().beginProcess:
-                        wx.MessageBox(_("Cannot run process.  No begin action found."), _("Run Process"))
-                        return
 
             filesModified = False
             for doc in docs:
@@ -1972,15 +3509,18 @@ class ProjectService(Service.Service):
                     filesModified = True
                     break
             if filesModified:
-                frame = self.GetView().GetFrame()                
+                frame = self.GetView().GetFrame()
                 yesNoMsg = wx.MessageDialog(frame,
                               _("Files have been modified.  Process may not reflect your current changes.\n\nWould you like to save all files before running?"),
                               _("Run Process"),
                               wx.YES_NO|wx.ICON_QUESTION
                               )
-                if yesNoMsg.ShowModal() == wx.ID_YES:
+                yesNoMsg.CenterOnParent()
+                status = yesNoMsg.ShowModal()
+                yesNoMsg.Destroy()
+                if status == wx.ID_YES:
                     wx.GetTopLevelParent(frame).OnFileSaveAll(None)
-            
+
             if runCurrentFile:
                 fileToRun = self.GetDocumentManager().GetCurrentDocument().GetFilename()
             elif runSelected:
@@ -1991,19 +3531,20 @@ class ProjectService(Service.Service):
                 res = wx.GetSingleChoiceIndex(_("Select a process to run:"),
                                               _("Run"),
                                               strings,
-                                              project.GetFirstView()._GetParentFrame())
+                                              self.GetView()._GetParentFrame())
                 if res == -1:
                     return
                 fileToRun = files[res]
             else:
                 fileToRun = files[0]
 
-            self.RunProcessModel(fileToRun)
-            
+            deployFilePath = project.GenerateDeployment()
+            self.RunProcessModel(fileToRun, project.GetAppInfo().language, deployFilePath)
 
-    def RunProcessModel(self, fileToRun):
+
+    def RunProcessModel(self, fileToRun, language, deployFilePath):
         for runHandler in self.GetRunHandlers():
-            if runHandler.RunProjectFile(fileToRun):
+            if runHandler.RunProjectFile(fileToRun, language, deployFilePath):
                 return
         os.system('"' + fileToRun + '"')
 
@@ -2037,11 +3578,6 @@ class ProjectService(Service.Service):
         return False
 
 
-    def _HasCurrentFile(self):
-        currentDoc = self.GetDocumentManager().GetCurrentDocument()
-        return currentDoc
-       
     def _CanAddCurrentFileToProject(self):
         currentDoc = self.GetDocumentManager().GetCurrentDocument()
         if not currentDoc:
@@ -2050,9 +3586,8 @@ class ProjectService(Service.Service):
             return False
         if not currentDoc._savedYet:
             return False
-        for document in self.GetDocumentManager().GetDocuments():
-            if document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
-                return True
+        if self.GetView().GetDocument():  # a project is open
+            return True
         return False  # There are no documents open
 
 
@@ -2070,58 +3605,32 @@ class ProjectService(Service.Service):
         if view:
             return view.GetDocument()
         return None
-       
+
+
+    def GetOpenProjects(self):
+        retval = []
+        for document in self.GetDocumentManager().GetDocuments():
+            if document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
+                retval.append(document)
+        return retval
+
 
     def FindProjectByFile(self, filename):
+        retval = []
         for document in self.GetDocumentManager().GetDocuments():
             if document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
                 if document.GetFilename() == filename:
-                    return document
+                    retval.append(document)
                 elif document.IsFileInProject(filename):
-                    return document
-        return None
-        
+                    retval.append(document)
+        return retval
 
-    def GetCurrentProjectNames(self):
-        projects = []
-        for document in self.GetDocumentManager().GetDocuments():
-            if document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
-                projects.append(document)
-        if not projects:
-            return
-        projects.sort(lambda a, b: cmp(a.GetPrintableName().lower(), b.GetPrintableName().lower()))
-        strings = map(lambda project: project.GetPrintableName(), projects)
-        return strings
-        
 
     def OnAddCurrentFileToProject(self, event):
-        if not self._CanAddCurrentFileToProject():
-            return
-        projects = []
-        for document in self.GetDocumentManager().GetDocuments():
-            if document.GetDocumentTemplate().GetDocumentType() == ProjectDocument:
-                projects.append(document)
-        if not projects:
-            return
-        projects.sort(lambda a, b: cmp(a.GetPrintableName().lower(), b.GetPrintableName().lower()))
-        strings = map(lambda project: project.GetPrintableName(), projects)
-        res = wx.GetSingleChoiceIndex(_("Select a project to add the file to:"),
-                                      _("Add to Project"),
-                                      strings,
-                                      self.GetDocumentManager().FindSuitableParent())
-        if res == -1:
-            return
         file = self.GetDocumentManager().GetCurrentDocument().GetFilename()
-        projects[res].GetCommandProcessor().Submit(ProjectAddFilesCommand(projects[res], [file]))
-        self.GetView().Activate(True)  # after add, should put focus on project editor
-
-
-    def OnProjectClose(self, event):
-        projectFilenames = self.GetView().GetSelectedProjects()
-        for filename in projectFilenames:
-            doc = self.FindProjectByFile(filename)
-            if doc:
-                self.GetDocumentManager().CloseDocument(doc, False)
+        document = self.GetView().GetDocument()
+        document.GetCommandProcessor().Submit(ProjectAddFilesCommand(document, [file]))
+        self.GetView().Activate()  # after add, should put focus on project editor
 
 
     def OnFileCloseAll(self, event):
@@ -2139,52 +3648,20 @@ class ProjectService(Service.Service):
             docString = config.Read("ProjectSavedDocs")
             if docString:
                 doc = None
-                for fileName in eval(docString):
+                docList = eval(docString)
+                for fileName in docList:
                     if isinstance(fileName, types.StringTypes):
                         if os.path.exists(fileName):
-                            doc = self.GetDocumentManager().CreateDocument(fileName, wx.lib.docview.DOC_SILENT)
+                            doc = self.GetDocumentManager().CreateDocument(fileName, wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE)
 
                 if doc:
                     openedDocs = True
-                    expandedString = config.Read("ProjectExpandedSavedDocs")
-                    if expandedString:
-                        view = doc.GetFirstView()
-                        view.SetExpandedProjects(eval(expandedString))
-        return openedDocs
-
-
-class ProjectEditorMoveCommand(wx.lib.docview.Command):
-
-    def __init__(self, view, newPositionItem, item):
-        wx.lib.docview.Command.__init__(self, canUndo = True)
-        self._view = view
-        self._item = item
-        self._file = view._treeCtrl.GetLongFilename(item)
-        if view._IsItemFile(item):
-            self._projectOld = view._GetItemProject(item)
-        else:  # view._IsItemProject(item):
-            self._projectOld = None
-        self._projectNew = view._GetItemProject(newPositionItem)
-                          
-
-    def GetName(self):
-        return _("Move File %s") % os.path.basename(self._file)
-
 
-    def Do(self):
-        if self._projectOld:
-            self._projectOld.RemoveFile(self._file)
-        if self._projectNew:
-            self._projectNew.AddFile(self._file)
-        return True
+                currProject = config.Read("ProjectCurrent")
+                if currProject in docList:
+                    self.GetView().SetProject(currProject)
 
-
-    def Undo(self):
-        if self._projectNew:
-            self._projectNew.RemoveFile(self._file)
-        if self._projectOld:
-            self._projectOld.AddFile(self._file)
-        return True
+        return openedDocs
 
 
 #----------------------------------------------------------------------------
@@ -2198,10 +3675,22 @@ def getProjectData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00[IDAT8\x8d\xc5\x93\xc1\n\xc00\x08C\x8d\xf6\xff\xffX\xb3Sa-\xf6`;:O\n\
-\x12\x1fj\x0059\t\xed\t\xc3\xc9pn\x0b\x88\x88@\rU\x81\xf6.\x18N\xa8aE\x92\rh\
-YC\x85\xa4D\x90\x91\xdc%\xf8w\x07+\xd1\xfbW\x98\xc5\x8f\t\x86W\xee\x93+\xbe\
-\xc0gn\xdc\x8d\x07\xab"<iG\x8e\xa9\r\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01\x89IDAT8\x8d\xa5\x92\xcdJ\x02Q\x18\x86\x9fq&-+H\xd40\x033Bha\x05\
+\xfd\xac*[\xb7l\xd1\xae\xfbhQ7\x10\x04A]\x86\xd0&\xba\x01CW\n!B\xa2\x882\x8b\
+)R+"\x7fft\x9a\x16\x91\xcd4\xd3\x0f\xf4\xee\xce\xf9\xde\xf7\xe1\xfd\x0eG\x10\
+\\"\x9arb\xe8\xcf\x1a\x9d\x9e\n\x80\xd6\xad\x03\x10Z;\x13\xf8ER\xa7xd\x88\
+\xbe-D\x1f\xb8\xbf\x0c\xaf\xcf\x15C\xd2k\xf4\xc5(\x92^\x03 \xbe\x9b\xb3@\x85\
+n\xe9\xd8h\xde\xe6\x1d\xe9\xfe\xa9E\xc7\xfb\x91\xf9\xfd\x01D\xfa\xc9\xd8\xf7\
+\xcdPI\'\x01X\xd8>@p\xf7\x00($W\x8c\x8f&R\xa7\xa7\xa2u\xebL.\xef\xd9\x00\x97\
+\xa7\x87D\\er\x15\x95\xb9\xf5\x12\xa3\x81Y\x9bG\xfax0\xb3Z\x8d*\x95t\x92z\
+\xb5\x80yjhC\x83\x16\x96\x15\xdc\xc3AZ\x8d\xea{XN#g.,\xa6\xe0l\x9c\xde}\x89\
+\xb6\xc3\x9aR\xff\xe5\x01\x801}\x1c\x80\x9b\xcc\x05\xde\xb0\x9f\xd0t\x04oX\
+\xa6\xad4\xc9U\n\xc0&\x1e\xfd\xd6\x0e\x18\xd4Se\x00\xbca?m\xa5\xc9\x1d\xd0V\
+\x9a\x03\xa3\xd6\xadc\xa8\x8fv\xc0S\xa3H\xc8\x13\x01\xa2\x00\xc4V\x13\x94\
+\xb3)\xae\xae\x14\x8b\xd1\x17\x90laK\x03\xb3b\xab\t&\x02\xf7(\xf94\xf2k\x8c\
+\x8d\x8dy\xc7\xf0\xb7\x00\x80`t\x92`t\x87%\xa0\x9cM\xd1\xa8}\xce\xcc\xbf\xd1\
+\x11P\xce\xa6,\xe7\xaf\xdf\xd7,Ap\x89\x14\x92+\xc6_\x03\x8e\x80\xff\xc8\xf5\
+\xaf4\xf0\x06=\xf3\x8fJr]C\xd9\x00\x00\x00\x00IEND\xaeB`\x82'
 
 def getProjectBitmap():
     return BitmapFromImage(getProjectImage())
@@ -2212,19 +3701,26 @@ def getProjectImage():
 
 def getProjectIcon():
     return wx.IconFromBitmap(getProjectBitmap())
-    
+
 
 #----------------------------------------------------------------------------
 
 def getBlankData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00]IDAT8\x8d\xed\x931\x0e\xc00\x08\x03m\x92\xff\xff8q\x87\xb6C\x11\x89\
-\xa8X:\xd4\x13\x03:\x1b\x01\xa45T\xd4\xefBsh\xd7Hk\xdc\x02\x00@\x8a\x19$\xa1\
-9\x14A,\x95\xf3\x82G)\xd3\x00\xf24\xf7\x90\x1ev\x07\xee\x1e\xf4:\xc1J?\xe0\
-\x0b\x80\xc7\x1d\xf8\x1dg\xc4\xea7\x96G8\x00\xa8\x91\x19(\x85#P\x7f\x00\x00\
-\x00\x00IEND\xaeB`\x82' 
+\x00\x01\x04IDAT8\x8d\xa5\x93\xbdj\x02A\x10\xc7\x7f{gme\xe5c\xe4\t\x82\x85\
+\x85\x85oa\xe5+\xd8Z\xd8'e\xfa\x80\xd8\xd8X\x19R\xc4\x07\x90\x04\xd1J\x08\
+\x17\x0cr\\V\xe1\xe4\xfc\x80\xb58\xf7\xd8\xbd\x0f\xa280\xec\xec2\xbf\xff\xce\
+\xcc\xb2B8.\xf7X\xc9\xdc|L\x97J\xc7\xbe\x0c\x01\xf0\xd6\x01\x00RFtZu\x91Q\
+\x10\x8e\x9b\xf8\xe4\xf3[-w*\xf1\xafm\xec\xcf\x83\x89\x1a\xad\x94\xea\xbe\
+\x8c\x95\x99/\x1c\x17\xe7\xdaR\xcb%xh\xd4hw_\x95yn\xb5\xe0\xcb\x90\xea%\x0eO\
+\xf1\xba\xd9\xc7\xe5\xbf\x0f\xdfX]\xda)\x140A\r\x03<6klO\xf0w\x84~\xef\xc9\
+\xca/lA\xc3@\x02\xe7\x99U\x81\xb7\x0e\xa8\xec\xed\x04\x13\xde\x1c\xfe\x11\
+\x902\xb2@\xc8\xc2\x8b\xd9\xbcX\xc0\x045\xac\xc1 Jg\xe6\x08\xe8)\xa7o\xd5\
+\xb0\xbf\xcb\nd\x86x\x0b\x9c+p\x0b\x0c\xa9\x16~\xbc_\xeb\x9d\xd3\x03\xcb3q\
+\xefo\xbc\xfa/\x14\xd9\x19\x1f\xfb\x8aa\x87\xf2\xf7\x16\x00\x00\x00\x00IEND\
+\xaeB`\x82" 
 
 
 def getBlankBitmap():
@@ -2236,4 +3732,184 @@ def getBlankImage():
 
 def getBlankIcon():
     return wx.IconFromBitmap(getBlankBitmap())
+
+
+#----------------------------------------------------------------------
+def getFolderClosedData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x00\xffIDAT8\x8d\xa5\x93?N\x02A\x14\x87\xbf\x19&\x10B\xb4A\x0b*iL0!$\
+\x06\x0f\xe0\x05lH\x88G\xe1\x0c\xdbx\x11ZN`,\xa5\x01\x8aM\xa4\x80\x84\xc4Fc\
+\xd0\xe8\xb0\xae\xbbc\x01\x0b,\x19\x16X~\xd5\x9b\xf7\xe7\x9by3o\x84\x90\x19\
+\x8e\x91\x8a\x0c\xed:\x06\xc0\xf7g\x00x\xde\x14\x80\xf3\x9b\x07\xb1\x13\xa0]\
+\xc7d\xcbw\x00d\x17\x81\x82\xff\x01\xc0\xb0\xd3\x9f\x83\x7f\xf5\xb2\xe8\xaa\
+\xf1\xb4\x84\n!3h\xd71\xef\xaf=\xeb\x0e\xc5R\xcd\xea\xcfWZ"\xd6\xc2\xb6\xc4\
+\xdc\xe5\xad\xd5?h\xd7M\xb5\xd9\x15\n\xe6}{\xde\x94\xe2\xf5\xbd59I\x12V\x17\
+\x96F\n \xfc\xfbD\xaaS\xc2\x9fI:@\x041\xdf\xa3\x8d\xb0Y\xb3\xed\xaf\xa9\x00\
+\xbe\xde\xc6\x9c\x9c]\x10\xea\xc3O #\xc3\xd7:)/\x19\xb0>$\x87J\x01\x04\xc1n\
+\xc0\xcb\xf3cl]mv\xe3\x83\xb4o\xc1\xa6D\xf4\x1b\x07\xed\xba\xd9\xa7`+ \xad\
+\xfe\x01\xd1\x03SV!\xfbHa\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getFolderClosedBitmap():
+    return BitmapFromImage(getFolderClosedImage())
+
+def getFolderClosedImage():
+    stream = cStringIO.StringIO(getFolderClosedData())
+    return ImageFromStream(stream)
+
+def getFolderClosedIcon():
+    return wx.IconFromBitmap(getFolderClosedBitmap())
+
+
+#----------------------------------------------------------------------
+def getFolderOpenData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01>IDAT8\x8d\xa5\x93\xbdJ\x03A\x14\x85\xbfY\x03i\xac\x14\x92\xc2F\xad$\
+Z\xa4\x10\x11|\x01\xc1J\xdbt\xbe\x86\x9d\x85\x0f\xa0\xe0\x1b\x04,l\xc4J\x0b\
+\x0bA;a\x11\x13\xb1H\xc2\xc2\xca\x84@\x88n\xb2\xd9?\xcd\xd8d6.\x9b\x104\xa7\
+\xbas\xef=g\xce\x9d\xe1\na\xcc1\x0b\x8c\x99\xd8@F\x07_\xd6\xb9\n\xdd\x8f\xb8\
+\xd0s\x9a\x00\xe4\xb6O\xc5T\x81~\xf5D\x89\xdc\x0e\xd9_\x85,\xa0\xa2\x06\xefw\
+R\x01\x04\x9e\x03\xc0\xea\xde\x8dH\th\xa8\xa81:\xf8\x1e\x00\xf9\x8d\x03\x00\
+\xa4U\x07\xc0,\xdb\xaaX\xaa\xc4"\x99\x04\xd9\xf7\xe0\xfbs$\x12\x0e\x90\xad\
+\x0e\x00]\xeb*N\x9b\xe5u\x05P,UD\xc2\x81&K\xbb\r@\xd4\xba\x1f\x9a\xe9\xb0\
+\xb6\x7f\x96h}\xbe8\x1c9\xe89M\x16\xfc\x15\xa4\xdd\xc6\xe8\x9a\x18\xc3\x99\
+\x97w\x8f\x99\x86\xd8\x81\xb4\xea\x18]\x93\xfcf).\x0e\\9\x96\xf4r}\x84~\x87\
+\xc4\x08\x81\xe7\xa0\xfa\xb5\xa9\xb7\xa6\x1c\xf4\xdao\xcc/B\x04\x0c<\xfb\xef\
+\x02Zd\xa9P\x98\xd8\xf8\xfax\x1b\xc7\xa9o\xf4\xbdN\x8aP{z \x0c\xdc\xb1\xa4\
+\xdf\x10z\x99\xaa\x97[J\'\xc3\xc0\x9dH\x98(\xf0_\xcc\xbc\x8d?\xf2)\x7f\x8e|f\
+\xe54\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getFolderOpenBitmap():
+    return BitmapFromImage(getFolderOpenImage())
+
+def getFolderOpenImage():
+    stream = cStringIO.StringIO(getFolderOpenData())
+    return ImageFromStream(stream)
+
+def getFolderOpenIcon():
+    return wx.IconFromBitmap(getFolderOpenBitmap())
     
+
+#----------------------------------------------------------------------
+def getLogicalModeOnData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\x83IDAT8\x8d\xa5\x93\xcbJ\xc3@\x14\x86\xbfI\x83buS\xabE+TE\x04\x17\
+\xde\xf0\x02\x82\xa0k\x17\n.\xdc\xf9\x1e.\xf4\x05\\\t\xfa\x18\x057\xe2\x0b\
+\x08ue@\xa4`\xb0\x84J\xd0(M\xa3"\xb65\x8d5.jcbS\x14\xfdW3\xe7\xfc\xe7\x9b9\
+\xc3\x19!\xa4\x08\xff\x91\xdcXT\x8d=\xb7\xf6\\\xa5\xe2\xd8\xf5\xfd\xab\t@\
+\xdf\xfc\x81\xf8\x11PQw\xddHl\x99H\x0c\xda\xbe\x19\xce\x0f\r\x17@\xae]{\xb1\
+\xf1\r\xc5\x83\n!E\xa8\xa8\xbb\xaeuw\x11zB\xbc\x7f24\xde1\xb6%\x02-\xb42\xbe\
+\xc5\x06\xd12i\x00&V\xb6\x11m\x0e\x00\xd9\xf4\xac;\xbe\xa1\x88z\x0b\x8eM\xf5\
+\xd5$1\xb3\xd9\x048\xde\xdf!%\xe5P4\x9b\x91\xc5+:{\x86\x03y\x19\xbe\x1e\xcc\
+\xafR1\x8f\x96Ic\xe6\xb34g\xbf\x01\xfcE\x00%=\x83~z\xd4dv\nW\x94\xc2\x00o/\
+\x0f\xc8]\xdd\xb4\xd7\xee\x00\xb8<="\x9a\x8c\xd37\x90"\x9a\xd4Qo\xba1\xf3Y\
+\x00\xcf\x13z\x03\xd7\xd6\x01\x88&\xe3\x00\xdc\xdf\xea\x94\r\x8b\x94da~\xb6\
+\xea\xda\x8f\x01\x80\x04\xf0TT\x91\x9d\x1b/8:\xb7D\xd9\xb0(\x1b\x16\x8af\xa3\
+h\xf5\xe1\x8a\xf5\x04\xcek\xbe\x81_Sk\xeb\x98\xd7\x05\xf4\xf7\x02\x00\x0b\
+\xd3\x89P_K\x00@\xefP\x82\xd5\xa1za\xee\xec\x84\xa7\xa2\xea\xe5\x1a\xd3\xd8\
+\x12\x90;;\t\xec\xfd\xe3\xeb\x97h\xfc\xc6lz\xd6\xfdMAK\xc0_\xf5\x01\xf4\x01\
+\x91\xdc\xfe\x86\x9e^\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getLogicalModeOnBitmap():
+    return BitmapFromImage(getLogicalModeOnImage())
+
+def getLogicalModeOnImage():
+    stream = cStringIO.StringIO(getLogicalModeOnData())
+    return ImageFromStream(stream)
+
+#----------------------------------------------------------------------
+def getLogicalModeOffData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\x83IDAT8\x8d\xa5\x93\xcbJ\xc3@\x14\x86\xbfI\x83buS\xabE+TE\x04\x17\
+\xde\xf0\x02\x82\xa0k\x17\n.\xdc\xf9\x1e.\xf4\x05\\\t\xfa\x18\x057\xe2\x0b\
+\x08ue@\xa4`\xb0\x84J\xd0(M\xa3"\xb65\x8d5.jcbS\x14\xfdW3\xe7\xfc\xe7\x9b9\
+\xc3\x19!\xa4\x08\xff\x91\xdcXT\x8d=\xb7\xf6\\\xa5\xe2\xd8\xf5\xfd\xab\t@\
+\xdf\xfc\x81\xf8\x11PQw\xddHl\x99H\x0c\xda\xbe\x19\xce\x0f\r\x17@\xae]{\xb1\
+\xf1\r\xc5\x83\n!E\xa8\xa8\xbb\xaeuw\x11zB\xbc\x7f24\xde1\xb6%\x02-\xb42\xbe\
+\xc5\x06\xd12i\x00&V\xb6\x11m\x0e\x00\xd9\xf4\xac;\xbe\xa1\x88z\x0b\x8eM\xf5\
+\xd5$1\xb3\xd9\x048\xde\xdf!%\xe5P4\x9b\x91\xc5+:{\x86\x03y\x19\xbe\x1e\xcc\
+\xafR1\x8f\x96Ic\xe6\xb34g\xbf\x01\xfcE\x00%=\x83~z\xd4dv\nW\x94\xc2\x00o/\
+\x0f\xc8]\xdd\xb4\xd7\xee\x00\xb8<="\x9a\x8c\xd37\x90"\x9a\xd4Qo\xba1\xf3Y\
+\x00\xcf\x13z\x03\xd7\xd6\x01\x88&\xe3\x00\xdc\xdf\xea\x94\r\x8b\x94da~\xb6\
+\xea\xda\x8f\x01\x80\x04\xf0TT\x91\x9d\x1b/8:\xb7D\xd9\xb0(\x1b\x16\x8af\xa3\
+h\xf5\xe1\x8a\xf5\x04\xcek\xbe\x81_Sk\xeb\x98\xd7\x05\xf4\xf7\x02\x00\x0b\
+\xd3\x89P_K\x00@\xefP\x82\xd5\xa1za\xee\xec\x84\xa7\xa2\xea\xe5\x1a\xd3\xd8\
+\x12\x90;;\t\xec\xfd\xe3\xeb\x97h\xfc\xc6lz\xd6\xfdMAK\xc0_\xf5\x01\xf4\x01\
+\x91\xdc\xfe\x86\x9e^\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+def getLogicalModeOffBitmap():
+    return BitmapFromImage(getLogicalModeOffImage())
+
+def getLogicalModeOffImage():
+    stream = cStringIO.StringIO(getLogicalModeOffData())
+    return ImageFromStream(stream)
+
+#----------------------------------------------------------------------
+def getPhysicalModeOnData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\xabIDAT8\x8d}\x931k\xdb@\x18\x86\x9f\xb3=\x98R\xb0\x06\xc7X\x01\x1d\
+\x14\x1c\xeaA4?\xa0\xa1\x8b\x9d\x04C\xe6N\xed\xd8\xad\xbf\xc0\xbf!c\xb6@\x9d\
+\xa1\xf4\'\xd4m\xd2l\x9dJ(\xb8R\x87\x90\x84\x80\xaeD\x8e\xad\xc1\xeePBIQ\x87\
+\x8b.:+\xc9\x0b\x82\xef\xee\xd3\xf3\xde{\x1f\x9c\x10\xa52\xf7)\x99N\xd2q\x1c\
+[{\xfe\xb3U\x91_\x8bE\x83E\xa8\xe9\xba\xa6\x1e\xc71*Rx\xd2\xa3\xe9\xba\xd4\
+\x97\x1a\xa2\x92L\'i\xd6\xbc\x0bZ\xecy\xd2CE\n\x15)\x00*Y\xf3!hQ\x9e\xf4\xf8\
+vt\xa4\r\xf2\xf0}\x90L|\xae\x93\xdb\xf5E;4uEE\xca\x184]\xd72\x91\x89\x0f\xc0\
+\xe3\xf6\xaee\xf8\xe7\x83\xcf\x06\x00e\xc4`o/\r\x83\x80\x96\xf4x\xf9\xea\xb5\
+I"\x13\xbf\x00ZJF\\\xec\xef >}\x1c\xa6\x00\x07\x87_hI\x8f\x17\x9d.*R<\x7f\
+\xd43\xffZF7\xa0\xb9\xc2\xf9\xc91OV\x9e\xb2\xde\xe9Z\x07\\\'\xe0\xacip\xf6\
+\xf5\xcdm\xfc\x08\x967\xde\xeaY\xec\xef\xe8!\x9e\x9f\x1c\x03\xf0[\xfe\x85\
+\xa8\x98\xd6Y\xdb\x85d\xa4\xeb60>\x03\xe0\xe7!\x94N#E\xb5\xe6P\xad9\x06\x88\
+\'\x97\x85\xfb\xea\xe1\x9c\x198Si\xbd\xd3%\x0c\x02\xae\xe63\x1a\xf3\x86\x15\
+\xd5\x82\xf3\x9a^\xea\x0f(\xf5\xb6\xb6D\xbf\xdf\xa7Zs\x08\x83\x00\x80\xab\
+\xf9\xac\x08g\'O\xedt\x15\x80\xfaRC\x00\x84?F\xe9\xbb\xc1\x80\x96\xf4t\xb7\
+\xbezw\x82\x9c\n\x8f)\xaf_\xdb\xffR\xb8\x99z.\xc1\xc1\xfb\xef\x00l\x0e\xcb\
+\xe2A\x83L\x9f{\xda(\xd3\xe6\xb0l\x9e\xf4\x7f\x85\x1d\xb2s\xbf\x8c\xaeh\x00\
+\x00\x00\x00IEND\xaeB`\x82' 
+
+def getPhysicalModeOnBitmap():
+    return BitmapFromImage(getPhysicalModeOnImage())
+
+def getPhysicalModeOnImage():
+    stream = cStringIO.StringIO(getPhysicalModeOnData())
+    return ImageFromStream(stream)
+
+#----------------------------------------------------------------------
+def getPhysicalModeOffData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
+\x00\x01\xabIDAT8\x8d}\x931k\xdb@\x18\x86\x9f\xb3=\x98R\xb0\x06\xc7X\x01\x1d\
+\x14\x1c\xeaA4?\xa0\xa1\x8b\x9d\x04C\xe6N\xed\xd8\xad\xbf\xc0\xbf!c\xb6@\x9d\
+\xa1\xf4\'\xd4m\xd2l\x9dJ(\xb8R\x87\x90\x84\x80\xaeD\x8e\xad\xc1\xeePBIQ\x87\
+\x8b.:+\xc9\x0b\x82\xef\xee\xd3\xf3\xde{\x1f\x9c\x10\xa52\xf7)\x99N\xd2q\x1c\
+[{\xfe\xb3U\x91_\x8bE\x83E\xa8\xe9\xba\xa6\x1e\xc71*Rx\xd2\xa3\xe9\xba\xd4\
+\x97\x1a\xa2\x92L\'i\xd6\xbc\x0bZ\xecy\xd2CE\n\x15)\x00*Y\xf3!hQ\x9e\xf4\xf8\
+vt\xa4\r\xf2\xf0}\x90L|\xae\x93\xdb\xf5E;4uEE\xca\x184]\xd72\x91\x89\x0f\xc0\
+\xe3\xf6\xaee\xf8\xe7\x83\xcf\x06\x00e\xc4`o/\r\x83\x80\x96\xf4x\xf9\xea\xb5\
+I"\x13\xbf\x00ZJF\\\xec\xef >}\x1c\xa6\x00\x07\x87_hI\x8f\x17\x9d.*R<\x7f\
+\xd43\xffZF7\xa0\xb9\xc2\xf9\xc91OV\x9e\xb2\xde\xe9Z\x07\\\'\xe0\xacip\xf6\
+\xf5\xcdm\xfc\x08\x967\xde\xeaY\xec\xef\xe8!\x9e\x9f\x1c\x03\xf0[\xfe\x85\
+\xa8\x98\xd6Y\xdb\x85d\xa4\xeb60>\x03\xe0\xe7!\x94N#E\xb5\xe6P\xad9\x06\x88\
+\'\x97\x85\xfb\xea\xe1\x9c\x198Si\xbd\xd3%\x0c\x02\xae\xe63\x1a\xf3\x86\x15\
+\xd5\x82\xf3\x9a^\xea\x0f(\xf5\xb6\xb6D\xbf\xdf\xa7Zs\x08\x83\x00\x80\xab\
+\xf9\xac\x08g\'O\xedt\x15\x80\xfaRC\x00\x84?F\xe9\xbb\xc1\x80\x96\xf4t\xb7\
+\xbezw\x82\x9c\n\x8f)\xaf_\xdb\xffR\xb8\x99z.\xc1\xc1\xfb\xef\x00l\x0e\xcb\
+\xe2A\x83L\x9f{\xda(\xd3\xe6\xb0l\x9e\xf4\x7f\x85\x1d\xb2s\xbf\x8c\xaeh\x00\
+\x00\x00\x00IEND\xaeB`\x82' 
+
+def getPhysicalModeOffBitmap():
+    return BitmapFromImage(getPhysicalModeOffImage())
+
+def getPhysicalModeOffImage():
+    stream = cStringIO.StringIO(getPhysicalModeOffData())
+    return ImageFromStream(stream)
+
index 6496f7f58a66499b9e7a78d1bcd02a76244beeba..ea5f6b71d1ccb834073f229223c47746964aeb65 100644 (file)
@@ -25,6 +25,7 @@ import keyword # for GetAutoCompleteKeywordList
 import sys # for GetAutoCompleteKeywordList
 import MessageService # for OnCheckCode
 import OutlineService
+from UICommon import CaseInsensitiveCompare
 try:
     import checker # for pychecker
     _CHECKER_INSTALLED = True
@@ -69,8 +70,11 @@ class PythonView(CodeEditor.CodeView):
 
     def OnActivateView(self, activate, activeView, deactiveView):
         STCTextEditor.TextView.OnActivateView(self, activate, activeView, deactiveView)
-        if activate:
-            wx.CallAfter(self.LoadOutline)  # need CallAfter because document isn't loaded yet
+        if activate and self.GetCtrl():
+            if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:
+                self.LoadOutline()
+            else:
+                wx.CallAfter(self.LoadOutline)  # need CallAfter because document isn't loaded yet
         
 
     def OnClose(self, deleteWindow = True):
@@ -99,7 +103,7 @@ class PythonView(CodeEditor.CodeView):
             filterkw = filter(lambda item: item.lower().startswith(lowerHint), kw)  # remove variables and methods that don't match hint
             kw = filterkw
 
-        kw.sort(self.CaseInsensitiveCompare)
+        kw.sort(CaseInsensitiveCompare)
 
         if hint:
             replaceLen = len(hint)
@@ -119,6 +123,7 @@ class PythonView(CodeEditor.CodeView):
         # pychecker only works on files, doesn't take a stream or string input
         if self.GetDocument().IsModified():
             dlg = wx.MessageDialog(self.GetFrame(), _("'%s' has been modfied and must be saved first.  Save file and check code?") % filename, _("Check Code"))
+            dlg.CenterOnParent()
             val = dlg.ShowModal()
             dlg.Destroy()
             if val == wx.ID_OK:
@@ -167,7 +172,7 @@ class PythonView(CodeEditor.CodeView):
                 break
 
         if not foundView:
-            doc = wx.GetApp().GetDocumentManager().CreateDocument(filename, wx.lib.docview.DOC_SILENT)
+            doc = wx.GetApp().GetDocumentManager().CreateDocument(filename, wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE)
             foundView = doc.GetFirstView()
 
         if foundView:
@@ -269,11 +274,29 @@ class PythonInterpreterView(wx.lib.docview.View):
         return True
 
 
+class PythonInterpreterDocument(wx.lib.docview.Document):
+    """ Generate Unique Doc Type """
+    pass
+    
+
 class PythonService(CodeEditor.CodeService):
 
 
     def __init__(self):
         CodeEditor.CodeService.__init__(self)
+        docManager = wx.GetApp().GetDocumentManager()
+        pythonInterpreterTemplate = wx.lib.docview.DocTemplate(docManager,
+                                          _("Python Interpreter"),
+                                          "*.Foobar",
+                                          "Foobar",
+                                          ".Foobar",
+                                          _("Python Interpreter Document"),
+                                          _("Python Interpreter View"),
+                                          PythonInterpreterDocument,
+                                          PythonInterpreterView,
+                                          flags = wx.lib.docview.TEMPLATE_INVISIBLE,
+                                          icon = getPythonIcon())
+        docManager.AssociateTemplate(pythonInterpreterTemplate)
 
 
     def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None):
@@ -308,7 +331,7 @@ class PythonService(CodeEditor.CodeService):
             docManager = wx.GetApp().GetDocumentManager()
             event.Check(False)
             for doc in docManager.GetDocuments():
-                if isinstance(doc.GetFirstView(), PythonInterpreterView):
+                if isinstance(doc, PythonInterpreterDocument):
                     event.Check(True)
                     break
             return True
@@ -318,28 +341,20 @@ class PythonService(CodeEditor.CodeService):
 
     def OnViewPythonInterpreter(self, event):
         for doc in wx.GetApp().GetDocumentManager().GetDocuments():
-            if isinstance(doc.GetFirstView(), PythonInterpreterView):
-                doc.GetFirstView().GetDocument().DeleteAllViews()
+            if isinstance(doc, PythonInterpreterDocument):
+                doc.DeleteAllViews()
                 return
                 
-        docManager = self.GetDocumentManager()
-        template = wx.lib.docview.DocTemplate(docManager,
-                                          _("Python Interpreter"),
-                                          "*.Foobar",
-                                          "Foobar",
-                                          ".Foobar",
-                                          _("Python Interpreter Document"),
-                                          _("Python Interpreter View"),
-                                          wx.lib.docview.Document,
-                                          PythonInterpreterView,
-                                          flags = wx.lib.docview.TEMPLATE_INVISIBLE)
-        newDoc = template.CreateDocument('', wx.lib.docview.DOC_SILENT)
-        if newDoc:
-            newDoc.SetDocumentName(template.GetDocumentName())
-            newDoc.SetDocumentTemplate(template)
-            newDoc.OnNewDocument()
-            newDoc.SetWriteable(False)
-            newDoc.GetFirstView().GetFrame().SetTitle(_("Python Interpreter"))
+        for template in self.GetDocumentManager().GetTemplates():
+            if template.GetDocumentType() == PythonInterpreterDocument:
+                newDoc = template.CreateDocument('', wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE)
+                if newDoc:
+                    newDoc.SetDocumentName(template.GetDocumentName())
+                    newDoc.SetDocumentTemplate(template)
+                    newDoc.OnNewDocument()
+                    newDoc.SetWriteable(False)
+                    newDoc.GetFirstView().GetFrame().SetTitle(_("Python Interpreter"))
+                break
 
 
 class PythonCtrl(CodeEditor.CodeCtrl):
@@ -355,7 +370,7 @@ class PythonCtrl(CodeEditor.CodeCtrl):
 
 
     def SetViewDefaults(self):
-        CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Python", hasWordWrap = False, hasTabs = True)
+        CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix = "Python", hasWordWrap = True, hasTabs = True)
 
 
     def GetFontAndColorFromConfig(self):
@@ -544,40 +559,56 @@ class PythonOptionsPanel(wx.Panel):
         choosePathButton = wx.Button(self, -1, _("Browse..."))
         pathSizer = wx.BoxSizer(wx.HORIZONTAL)
         HALF_SPACE = 5
-        pathSizer.Add(pathLabel, 0, wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT | wx.TOP, HALF_SPACE)
-        pathSizer.Add(self._pathTextCtrl, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.RIGHT, HALF_SPACE)
-        pathSizer.Add(choosePathButton, 0, wx.ALIGN_RIGHT | wx.LEFT, HALF_SPACE)
+        SPACE = 10
+        pathSizer.Add(pathLabel, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.TOP, HALF_SPACE)
+        pathSizer.Add(self._pathTextCtrl, 1, wx.EXPAND|wx.LEFT|wx.TOP, HALF_SPACE)
+        pathSizer.Add(choosePathButton, 0, wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT|wx.TOP, HALF_SPACE)
         wx.EVT_BUTTON(self, choosePathButton.GetId(), self.OnChoosePath)
         mainSizer = wx.BoxSizer(wx.VERTICAL)                
-        mainSizer.Add(pathSizer, 0, wx.LEFT | wx.RIGHT | wx.TOP, 10)
+        mainSizer.Add(pathSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, SPACE)
 
-        self._otherOptions = STCTextEditor.TextOptionsPanel(self, -1, configPrefix = "Python", label = "Python", hasWordWrap = False, hasTabs = True, addPage=False)
-        mainSizer.Add(self._otherOptions)
+        self._otherOptions = STCTextEditor.TextOptionsPanel(self, -1, configPrefix = "Python", label = "Python", hasWordWrap = True, hasTabs = True, addPage=False)
+        mainSizer.Add(self._otherOptions, 0, wx.EXPAND|wx.BOTTOM, SPACE)
         self.SetSizer(mainSizer)
         parent.AddPage(self, _("Python"))
         
+
     def OnChoosePath(self, event):
+        defaultDir = os.path.dirname(self._pathTextCtrl.GetValue().strip())
+        defaultFile = os.path.basename(self._pathTextCtrl.GetValue().strip())
         if _WINDOWS:
-            wildcard = _("*.exe")
+            wildcard = _("Executable (*.exe)|*.exe|All (*.*)|*.*")
+            if not defaultFile:
+                defaultFile = "python.exe"
         else:
             wildcard = _("*")
-        path = wx.FileSelector(_("Select a File"),
-                               _(""),
-                               _(""),
-                               wildcard = wildcard ,
-                               flags = wx.HIDE_READONLY,
-                               parent = wx.GetApp().GetTopWindow())
-        if path:  
-            self._pathTextCtrl.SetValue(path)
-            self._pathTextCtrl.SetToolTipString(self._pathTextCtrl.GetValue())
-            self._pathTextCtrl.SetInsertionPointEnd()
+        dlg = wx.FileDialog(wx.GetApp().GetTopWindow(),
+                               _("Select a File"),
+                               defaultDir=defaultDir,
+                               defaultFile=defaultFile,
+                               wildcard=wildcard,
+                               style=wx.OPEN|wx.FILE_MUST_EXIST|wx.HIDE_READONLY)
+        # dlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetPath()
+            if path:  
+                self._pathTextCtrl.SetValue(path)
+                self._pathTextCtrl.SetToolTipString(self._pathTextCtrl.GetValue())
+                self._pathTextCtrl.SetInsertionPointEnd()
+        dlg.Destroy()            
+
 
     def OnOK(self, optionsDialog):
-        if len(self._pathTextCtrl.GetValue()) > 0:
-            config = wx.ConfigBase_Get()
-            config.Write("ActiveGridPythonLocation", self._pathTextCtrl.GetValue())
+        config = wx.ConfigBase_Get()
+        config.Write("ActiveGridPythonLocation", self._pathTextCtrl.GetValue().strip())
 
         self._otherOptions.OnOK(optionsDialog)
+        
+
+    def GetIcon(self):
+        return getPythonIcon()
+        
+
 #----------------------------------------------------------------------------
 # Icon Bitmaps - generated by encode_bitmaps.py
 #----------------------------------------------------------------------------
@@ -587,18 +618,28 @@ import cStringIO
 
 def getPythonData():
     return \
-"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\xd5IDAT8\x8d\x8d\x93Y\x0e\xc3 \x0cD\x9fM\xcf\xddNr2.\x96\xb8\x1f\
-\x05\n\x84.#Y\x10\xa3\x19o\xb1\x99'*\xe2<\x82\x0e\xe6\xc9\xf8\x01\xef?\xa4\
-\xf7)]\x05\x970O\xcdr\xce!\x119\xe7\x00\x02\x88\xfe}i\xb5\x848\x8f\xa8\x19\
-\xcc\x19}+\xc5\xcc\xd3\x92<CZ\x0b\x99\xc4\xb2N\x01<\x80\xad\xdc?\x88\xf8\x1c\
-X\x8f7\xe1\x1f\xdc*\xa9a+\xe1\xa3\xdc\xe7\xb4\xf6\xd1\xe5\xb6'\xc3@\xc5\xa0#\
-\xab\x94\xd1\x0bL\xf0\xe6\x17\xa8v\xc3\x8aS\xa0.\x8be\x13\xe3\x15\x8f\xe1\
-\xa5D\xee\xc9\xdb~%\xc7y\x84\xbb'sO\xd6\xd4\x17\xe4~\xc4\xf5\xef\xac\xa7\r\
-\xbbp?b&\x0f\x89i\x14\x93\xca\x14z\xc5oh\x02E\xc4<\xd92\x03\xe0:B^\xc4K#\xe7\
-\xe5\x00\x02\xfd\xb9H\x9ex\x02\x9a\x05a\xd2\xd3c\xc0\xcc\x00\x00\x00\x00IEND\
-\xaeB`\x82" 
+\x00\x01\xe7IDAT8\x8d}\x921h\x13Q\x18\xc7\x7fw\xb9\x0ei\x9d*\xbd\xeb\x10\x8f\
+,\x99\x1c*A[\xaa\x19B\xe8\xd0\xb1\x0e%K\x87\x88T2\x88Cqp\tD\x14i\xe9\xe0V\
+\xdaQ\xb7\xe0P\xa1\x8b\xa0(\x95$z\xd5Q1\x90\xa2\xd7\x9a4^\x87\xa0`\x92!w9\
+\x87\xf8.\xb9\xa6\xc97\xbd\xef{\xef\xfb\xbd\xff\xfb\xbfO*~;v\xf9\x1f\xad\xba\
+\x05@\xf9\xd4\x06\xc0::$\xbb\x96\x92\x18\x11\n@(4\xdd\xcdB\xd3\xd4\x1d\x85\
+\x8b\x97\xe1\xe3;\x83\x99\xe5\x15\xb2\xe0\x8e\x82\xc8\xa3\xe8\x003\xcb+\xac\
+\xaee\xdda\xfb\xb2\x90\rPw\x14\x00\x9a\xb5\n\xbf\xfflSz\x9d\xa2Y\xdc"zca\xe8\
+\x05\xb2h\x14\xcd\xd0\xf3B\x9f\x98\xe5\xf9\xde\x13"\xaaB\xc7\xb1\xcfU!\x0b\
+\xc3D4k\x15\xac\x93\x03\xf4\x89Y\xaf\x96\xffT\x028\x17\xa2\xf4\'\xcdZ\x85\
+\xf7F\x06{\xaa\x80ev\xc1\x91\xb91>\x18\x0f\xb8\xb7\x95a\xe9\xca\x0b:\x8e\xed\
+\xca\x01E\x1a\x00\x98\r\x89\x92\x91\xa1\xda\xd8\x87\x06ha\x1f\x1b\x80\xcd\
+\x9d%\xe0\xa5\x0f"[G\x87\x98\x8d\xde/ia\x05-\xac`\x996\xf9\\\x0b\xcb\xb4)\
+\x1bmOMn\xf7\xd5\xf0\'\\\x8b\xdces\xe7\x8d\xef\x80h\xd6\xc2\n\xf9\\\x0b]\xf5\
+\xab\xf2\xcdApR#\xf1kp4b\xc9 \xf9\\\x0b\x80\xe4\xcdE\xaf\xdeqlW\xaeVL\xaf`~\
+\xd9\x03@W\xd3\x00\xc4\x13\x0b\xc4\x92A\xcf\xd0\xf9\xe8:\x89\xebW\x01(|\xfd\
+\xe1\xbe-~F\xbas\xff\x91\xf75\x82n\x9d\x1c\xf0}\xfciw\xdd\xe7A<\xd1\x1b\xa8j\
+c\x9f\xb2\xd1F\x92\xe4\x80O\x12\xc0\xc6\xb3\x14\xf6Ta\xe0)g\x81\xba\x9a\xf6\
+\x9b(\x07\x14I@\x84lq\xb8?\xe6\xa3\xeb\x00\xdc\xba\x9d\xf4+\x10*~\xfem\xf3\
+\xf8\xe1\x06\xc7\xa7\xdb\xe8j\x9a\xf8\xdc\xa4\xb7\x1f[\\\xe5\xd2\x851/\xff\
+\x07\xac\x9b\xd1e\x12\x96\x0f\xfd\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 
 def getPythonBitmap():
index 549c708c23c250636920f5e51ebadd408336f2dd..fd9b84a91a6fa94c91aa4b05735d14fad174a57a 100644 (file)
@@ -80,6 +80,13 @@ class TextDocument(wx.lib.docview.Document):
         pass
 
 
+# Use this to override MultiClient.Select to prevent yellow background.         
+def MultiClientSelectBGNotYellow(a):    
+    a.GetParent().multiView.UnSelect()  
+    a.selected = True   
+    #a.SetBackgroundColour(wx.Colour(255,255,0)) # Yellow       
+    a.Refresh()
+
 class TextView(wx.lib.docview.View):
     MARKER_NUM = 0
     MARKER_MASK = 0x1
@@ -102,6 +109,12 @@ class TextView(wx.lib.docview.View):
         
 
     def GetCtrl(self):
+        if wx.Platform == "__WXMAC__":
+            # look for active one first         
+            self._textEditor = self._GetActiveCtrl(self._dynSash)       
+            if self._textEditor == None:  # it is possible none are active      
+                # look for any existing one     
+                self._textEditor = self._FindCtrl(self._dynSash)
         return self._textEditor
 
 
@@ -116,9 +129,19 @@ class TextView(wx.lib.docview.View):
             
     def OnCreate(self, doc, flags):
         frame = wx.GetApp().CreateDocumentFrame(self, doc, flags, style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
-        self._dynSash = wx.gizmos.DynamicSashWindow(frame, -1, style=wx.CLIP_CHILDREN)
-        self._dynSash._view = self
-        self._textEditor = self.GetCtrlClass()(self._dynSash, -1, style=wx.NO_BORDER)
+        # wxBug: DynamicSashWindow doesn't work on Mac, so revert to
+        # multisash implementation
+        if wx.Platform == "__WXMAC__":
+            wx.lib.multisash.MultiClient.Select = MultiClientSelectBGNotYellow
+            self._dynSash = wx.lib.multisash.MultiSash(frame, -1)
+            self._dynSash.SetDefaultChildClass(self.GetCtrlClass()) # wxBug:  MultiSash instantiates the first TextCtrl with this call
+            
+            self._textEditor = self.GetCtrl()  # wxBug: grab the TextCtrl from the MultiSash datastructure
+        else:
+            self._dynSash = wx.gizmos.DynamicSashWindow(frame, -1, style=wx.CLIP_CHILDREN)
+            self._dynSash._view = self
+            self._textEditor = self.GetCtrlClass()(self._dynSash, -1, style=wx.NO_BORDER)
+        wx.EVT_LEFT_DOWN(self._textEditor, self.OnLeftClick)
         self._CreateSizer(frame)
         self.Activate()
         frame.Show(True)
@@ -130,14 +153,18 @@ class TextView(wx.lib.docview.View):
         sizer = wx.BoxSizer(wx.HORIZONTAL)
         sizer.Add(self._dynSash, 1, wx.EXPAND)
         frame.SetSizer(sizer)
-        frame.SetAutoLayout(True)
+
+
+    def OnLeftClick(self, event):
+        self.Activate()
+        event.Skip()
 
 
     def OnUpdate(self, sender = None, hint = None):
         if hint == "ViewStuff":
             self.GetCtrl().SetViewDefaults()
         elif hint == "Font":
-            font, color = self.GetFontAndColorFromConfig()
+            font, color = self.GetCtrl().GetFontAndColorFromConfig()
             self.GetCtrl().SetFont(font)
             self.GetCtrl().SetFontColor(color)
 
@@ -195,7 +222,7 @@ class TextView(wx.lib.docview.View):
             self.GetCtrl().SetViewEOL(not self.GetCtrl().GetViewEOL())
             return True
         elif id == VIEW_INDENTATION_GUIDES_ID:
-            self.GetCtrl().SetViewIndentationGuides(not self.GetCtrl().GetViewIndentationGuides())
+            self.GetCtrl().SetIndentationGuides(not self.GetCtrl().GetIndentationGuides())
             return True
         elif id == VIEW_RIGHT_EDGE_ID:
             self.GetCtrl().SetViewRightEdge(not self.GetCtrl().GetViewRightEdge())
@@ -352,6 +379,29 @@ class TextView(wx.lib.docview.View):
     def _GetParentFrame(self):
         return wx.GetTopLevelParent(self.GetFrame())
 
+    def _GetActiveCtrl(self, parent):   
+        """ Walk through the MultiSash windows and find the active Control """  
+        if isinstance(parent, wx.lib.multisash.MultiClient) and parent.selected:        
+            return parent.child         
+        if hasattr(parent, "GetChildren"):      
+            for child in parent.GetChildren():  
+                found = self._GetActiveCtrl(child)      
+                if found:       
+                    return found        
+        return None     
+
+        
+    def _FindCtrl(self, parent):        
+        """ Walk through the MultiSash windows and find the first TextCtrl """  
+        if isinstance(parent, self.GetCtrlClass()):     
+            return parent       
+        if hasattr(parent, "GetChildren"):      
+            for child in parent.GetChildren():  
+                found = self._FindCtrl(child)   
+                if found:       
+                    return found        
+        return None     
 
     #----------------------------------------------------------------------------
     # Methods for TextDocument to call
@@ -401,6 +451,7 @@ class TextView(wx.lib.docview.View):
         data.SetInitialFont(self.GetCtrl().GetFont())
         data.SetColour(self.GetCtrl().GetFontColor())
         fontDialog = wx.FontDialog(self.GetFrame(), data)
+        fontDialog.CenterOnParent()
         if fontDialog.ShowModal() == wx.ID_OK:
             data = fontDialog.GetFontData()
             self.GetCtrl().SetFont(data.GetChosenFont())
@@ -614,7 +665,13 @@ class TextView(wx.lib.docview.View):
         else:
             return False
 
-
+    def GetMarkerLines(self, mask=MARKER_MASK):
+        retval = []
+        for lineNum in range(self.GetCtrl().GetLineCount()):
+            if self.GetCtrl().MarkerGet(lineNum) & mask:
+                retval.append(lineNum)
+        return retval
+        
     def GetMarkerCount(self):
         return self._markerCount
 
@@ -807,9 +864,9 @@ class TextOptionsPanel(wx.Panel):
         textPanelSizer = wx.BoxSizer(wx.VERTICAL)
         textFontSizer = wx.BoxSizer(wx.HORIZONTAL)
         textFontSizer.Add(fontLabel, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.TOP, HALF_SPACE)
-        textFontSizer.Add(self._sampleTextCtrl, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.RIGHT, HALF_SPACE)
+        textFontSizer.Add(self._sampleTextCtrl, 1, wx.ALIGN_LEFT | wx.EXPAND | wx.RIGHT, HALF_SPACE)
         textFontSizer.Add(chooseFontButton, 0, wx.ALIGN_RIGHT | wx.LEFT, HALF_SPACE)
-        textPanelSizer.Add(textFontSizer, 0, wx.ALL, HALF_SPACE)
+        textPanelSizer.Add(textFontSizer, 0, wx.ALL|wx.EXPAND, HALF_SPACE)
         if self._hasWordWrap:
             textPanelSizer.Add(self._wordWrapCheckBox, 0, wx.ALL, HALF_SPACE)
         textPanelSizer.Add(self._viewWhitespaceCheckBox, 0, wx.ALL, HALF_SPACE)
@@ -823,7 +880,7 @@ class TextOptionsPanel(wx.Panel):
             textIndentWidthSizer.Add(indentWidthLabel, 0, wx.ALIGN_LEFT | wx.RIGHT | wx.TOP, HALF_SPACE)
             textIndentWidthSizer.Add(self._indentWidthChoice, 0, wx.ALIGN_LEFT | wx.EXPAND, HALF_SPACE)
             textPanelSizer.Add(textIndentWidthSizer, 0, wx.ALL, HALF_SPACE)
-        textPanelBorderSizer.Add(textPanelSizer, 0, wx.ALL, SPACE)
+        textPanelBorderSizer.Add(textPanelSizer, 0, wx.ALL|wx.EXPAND, SPACE)
 ##        styleButton = wx.Button(self, -1, _("Choose Style..."))
 ##        wx.EVT_BUTTON(self, styleButton.GetId(), self.OnChooseStyle)
 ##        textPanelBorderSizer.Add(styleButton, 0, wx.ALL, SPACE)
@@ -856,6 +913,7 @@ class TextOptionsPanel(wx.Panel):
 ##                                #'HTML', 'html',
 ##                                #'XML', 'xml',
 ##                                config)
+##        dlg.CenterOnParent()
 ##        try:
 ##            dlg.ShowModal()
 ##        finally:
@@ -868,6 +926,7 @@ class TextOptionsPanel(wx.Panel):
         data.SetInitialFont(self._textFont)
         data.SetColour(self._textColor)
         fontDialog = wx.FontDialog(self, data)
+        fontDialog.CenterOnParent()
         if fontDialog.ShowModal() == wx.ID_OK:
             data = fontDialog.GetFontData()
             self._textFont = data.GetChosenFont()
@@ -909,6 +968,10 @@ class TextOptionsPanel(wx.Panel):
                         document.UpdateAllViews(hint = "ViewStuff")
                     if doFontUpdate:
                         document.UpdateAllViews(hint = "Font")
+               
+         
+    def GetIcon(self):
+        return getTextIcon()
 
 
 class TextCtrl(wx.stc.StyledTextCtrl):
@@ -958,8 +1021,27 @@ class TextCtrl(wx.stc.StyledTextCtrl):
         self.SetFontColor(color)
         self.MarkerDefineDefault()
 
+        # for multisash initialization  
+        if isinstance(parent, wx.lib.multisash.MultiClient):    
+            while parent.GetParent():   
+                parent = parent.GetParent()     
+                if hasattr(parent, "GetView"):  
+                    break       
+            if hasattr(parent, "GetView"):      
+                textEditor = parent.GetView()._textEditor       
+                if textEditor:  
+                    doc = textEditor.GetDocPointer()    
+                    if doc:     
+                        self.SetDocPointer(doc)
+
 
     def OnFocus(self, event):
+        # wxBug: On Mac, the STC control may fire a focus/kill focus event
+        # on shutdown even if the control is in an invalid state. So check
+        # before handling the event.
+        if self.IsBeingDeleted():
+            return
+            
         self.SetSelBackground(1, "BLUE")
         self.SetSelForeground(1, "WHITE")
         if hasattr(self, "_dynSash"):
@@ -968,6 +1050,11 @@ class TextCtrl(wx.stc.StyledTextCtrl):
 
 
     def OnKillFocus(self, event):
+        # wxBug: On Mac, the STC control may fire a focus/kill focus event
+        # on shutdown even if the control is in an invalid state. So check
+        # before handling the event.
+        if self.IsBeingDeleted():
+            return
         self.SetSelBackground(0, "BLUE")
         self.SetSelForeground(0, "WHITE")
         self.SetSelBackground(1, "#C0C0C0")
@@ -1328,13 +1415,21 @@ import cStringIO
 
 def getTextData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00`IDAT8\x8d\xed\x931\x0e\xc00\x08\x03m\x92\xff\xff8q\xa7JU!$\x12\x1d\
-\xeb\t\t8n\x81\xb4\x86J\xfa]h\x0ee\x83\xb4\xc6\x14\x00\x00R\xcc \t\xcd\xa1\
-\x08\xd2\xa3\xe1\x08*\t$\x1d\xc4\x012\x0b\x00\xce\xe4\xc8\xe0\t}\xf7\x8f\rV\
-\xd9\x1a\xec\xe0\xbf\xc1\xd7\x06\xd9\xf5UX\xfdF+m\x03\xb8\x00\xe4\xc74B"x\
-\xf1\xf4\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x015IDAT8\x8d\xad\x90\xb1N\xc2P\x14\x86\xbf\x02/\xe0\xec#\x18g\xc3\xe6T\
+\x13':1\x18H\x98\x14\x12\x17G\x177\x17\x9c4a\xc5\xc0d0\xc2\xccdLx\x02^@+\t\
+\xc1\x90\xf6r\xdb\xc6\x94\xe5:\\\xdbP)\xc5DOr\x92\x9b{\xff\xfb\xfd\xff9\xc6h\
+l+\xbek.\x02\x00\xec\x99\x03\x80\xeb\xf8\\\x9d\x1d\x1bd\xd5hl\xab\xd7O\x15\
+\xf7x\xa1\xfb\xeeq\xa4^>\x94\xba\xb8yRF.\xcf\xa6.D\xa0Nw\x18C\xad\xb2\x19\
+\x9f\x0f\xca\x165\xd1V\xed\xebZj\x92\xc2\\\x04\xec\x02\xd5\x8a\x89\xb7\xd4\
+\x97n\xa8\xe3?\x0f\x86\x08\x19dNP\x00\xf0\x96\xd0\x7f\xd0\t\x84\x0c(U-\x0eK&\
+\xd3P\x8bz\xcdV6 \x8a\xed\x86\x99f\xe9\x00{\xe6\xb0\x13\xc2\xa0\xd3\xd7\t\
+\x84\x9f\x10\xec\x9dTp\x1d\xb1=A\xa9j\x01\xc4\xb1\x01&\xfe\x9a~\x1d\xe0:Zu\
+\x7f\xdb\x05@J/!(\xd6\x1bL\xde\xec\xcd\x00!\x03\xa6!\x1c\x9dVR\x9d\xdf\xe5\
+\x96\x04\xd1au\xd3\xab3\xef\x9f_f\x03\xa2\xa5\x15\xeb\x8d\xc4\xc36\xe7\x18 \
+\xa5G\xaf\xd9J\xb8f\xcd\xfc\xb3\x0c#\x97\xff\xb58\xadr\x7f\xfa\xfd\x1f\x80/\
+\x04\x1f\x8fW\x0e^\xc3\x12\x00\x00\x00\x00IEND\xaeB`\x82" 
 
 
 def getTextBitmap():
@@ -1356,12 +1451,20 @@ def getZoomInData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00wIDAT8\x8d\xa5\x93Q\x12\x80 \x08D\xb5\xe9X\xee\xe9\xb7{\xd5Gc\xa9\
-\xacX\xca\x1f\xa0\x8fE0\x92<\xc3\x82\xed*\x08\xa0\xf2I~\x07\x000\x17T,\xdb\
-\xd6;\x08\xa4\x00\xa4GA\xab\xca\x00\xbc*\x1eD\xb4\x90\xa4O\x1e\xe3\x16f\xcc(\
-\xc8\x95F\x95\x8d\x02\xef\xa1n\xa0\xce\xc5v\x91zc\xacU\xbey\x03\xf0.\xa8\xb8\
-\x04\x8c\xac\x04MM\xa1lA\xfe\x85?\x90\xe5=X\x06\\\xebCA\xb3Q\xf34\x14\x00\
-\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01TIDAT8\x8d\x8d\x93\xbbJ\x03A\x14\x86\xbf\xd9,\xc6\xd8E%`)VF[{\xc1v\
+\xf1\x82\x8f\xb0\xb94\xda\xa5\x13\x11\x8b`\xa9h\x10F\xe3#H.\xa6\x15\xccKhg\
+\x10\xc1B\x8bTF\x90\xc0X\x8c3\xbb\xd9\xcdF\x7f\x18\xf6\xec\x9cs\xbe\xfd\xe70\
++\x84\x93"\xacb\xc1W\xe1\xf7\xeb\xfa\x8d`\x82\xdcXcI\x8e\x02AM\x02\t\xe1\xa4\
+(\x16|uz)y\x19\xc0\xc9\xdd;\x99\xee!\x00\xd9\xbd\x00\xd6\xaf\x95\xc7B\xac\
+\x03\xd3\x1c\xd6\xc2t\x10\xf7\x13\x8e\xe0\x14\x0b\xbe\xa2$m\xf3\xca\xea\xacM\
+\xe6\xd2\xc1\xcaWdl>#\x0e\x8c\xed\xe7n\x90|\xa8\x96m\xbc~ y\x04Z\xcd\x86\xda\
+\xda\xde\xb1Gq\x00\xb2S\t\xfeB\x9aK\xa8\xb1\x0e\xf2\x15I.\xad\x0bo\x8f\xf4\
+\x97\xab\xe7z\x88\x1f\xdf\xf0\xfa9\x1e\xe0x\x9eG\xbf\x16X\xcd\xb8Ar\xc6\xd5\
+\x0b4\xd4\xf3\xbcd\x07F_\xc3 \x1e\x0c\xa3Y\x08\x9f\x1f~\xefA\xab\xd9P\x9dN\
+\x07\x80\xddcI\xc6\x85\xf9\xb4.8\xabhwK\xbd+6\x16\xf5\xdeZ=%F\x00\xa0\xa7\
+\x0b`@F\xc6\xf6\xd3\xc5&@\x0c"\xa2\xff\x82\x01\x85-\xb7\x9a\re\x00QH\x0c0N\
+\x06\x1a\x85\xbcym}\x0f\xfe\x92\x19\xdc\xf2~\xdb\xee\xdd\xf7\xf4\xf3_\x0e\
+\xa2N\xc2\xfa\x01MYp\xbc\xe4a\x0f\xa9\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getZoomInBitmap():
     return BitmapFromImage(getZoomInImage())
@@ -1375,11 +1478,20 @@ def getZoomOutData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00qIDAT8\x8d\xa5\x92Q\x0e\xc0 \x08C-z\xff\x13O\xd9\xd7\x16"\x05\x8d\
-\xf6O\xa2\x8f"\x05\xa4\x96\x1b5V\xd4\xd1\xd5\x9e!\x15\xdb\x00\x1d]\xe7\x07\
-\xac\xf6Iv.B*fW\x0e\x90u\xc9 d\x84\x87v\x82\xb4\xf5\x08\'r\x0e\xa2N\x91~\x07\
-\xd9G\x95\xe2W\xeb\x00\x19\xc4\xd6\\FX\x12\xa3 \xb1:\x05\xacdAG[\xb0y9r`u\
-\x9d\x83k\xc0\x0b#3@0A\x0c"\x93\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01RIDAT8\x8d\x8d\x93\xbbJ\x03A\x14\x86\xbf\xd9\x04\x93\x90J\x0cj#Dl\
+\xf4\x01\xec\x05\xdb\xc5\x0b>B\x92]\x1b+\xed,D\xb0\xb4\x08\x9afc|\x04\xc9\
+\x85\xb4>\x84\x95`\x93\x80`\x15\xd8*\x98\x84\xc0X\xcc\xce\xde7\xf8\xc30\x97=\
+\xf3\xcd\x7f\xce\xcc\na\xe4\x08\xabQ\xaf\xc9\xf0\xfc\xa5\xf3*X\xa1|b\xa3\xe5\
+D\x81 W\x81\x840r4\xea5\xf9\xf0\xe40Y@\xf3+\xf8\xb8\xbe\x16\x8c\xdd\x96\x9d\
+\n1\xf4\xc0\xdf\xdc\xb6\x01\xa8\xca\x19[\x05\xfc\x96%aY\x96\x0c\xdb\xae\xca\
+\x99\xea7\x8b\x91@w.\xf9x\xbcL\xb8\xf0k\xa0O\x1e{\xd31Q\x1d\xdd\xaaC\xfa\xbd\
+\xae<=;\xf7!F<\xd7,md\xc4\xf8\x0e\xf6\xaf\x1d\xb6\x8b*p\xa7\x0c\x95\xd0\x86\
+\xc9\x02\xbe\xa7\xe9\x00\xc34M\xdc\x96MA\xa8[,y\xc8r>h\x00ow6\xa6if;\x98K\
+\x95\xd6\xef\x12(\xc0t\x99~b8\x7f\xf0\xdeA\xbf\xd7\x95\xc3\xe1\x10\x80\x8b{\
+\x87R\x1e*\xde\xd55oTq\xf7Fm\x8ew\xd5\xdaa\'\'"\x00P\xd5\x05\xd0 -m\xfb\xf3\
+\xf9\x04 \x01\x11\xf1\x7fA\x83\xc2\x96\xfb\xbd\xae\xd4\x808$\x01H\x93\x86\
+\xc6!?\xe6 x\xca\xab\xa4\x0bwp5\xf0\xd7\xdeG\xaa\xff\x97\x83\xb8\x93\xb0\xfe\
+\x00\xc3\xa8ov\xfd\xe4\x9c\xa2\x00\x00\x00\x00IEND\xaeB`\x82' 
  
 
 def getZoomOutBitmap():
index 9d35ad0ce9218765c7274b87863ec3d0550f9e25..785acf3866b442e4920aa75c0fc79a23f89aae13 100644 (file)
@@ -99,6 +99,7 @@ class SVNService(wx.lib.pydocview.DocService):
                 _("Comment"),
                 _("SVN Log Message"))
 
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             retcode = True
             message = dlg.GetValue()
@@ -141,11 +142,12 @@ class SVNService(wx.lib.pydocview.DocService):
         dlg.Fit()
         dlg.Layout()
 
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             retcode = True
             username = usernameTxt.GetValue().strip()
             password = passwordTxt.GetValue()
-            save = savePasswordCheckBox.IsChecked()
+            save = savePasswordCheckbox.IsChecked()
         else:
             retcode = False
             username = None
@@ -195,6 +197,7 @@ class SVNService(wx.lib.pydocview.DocService):
         acceptedFailures = 0
         save = False
 
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             cert = certRadio.GetStringSelection()
             if cert == _("Accept Always"):
@@ -206,6 +209,7 @@ class SVNService(wx.lib.pydocview.DocService):
                 acceptedFailures = trustDict.get('failures')
                 save = False
 
+        dlg.Destroy()
         return retcode, acceptedFailures, save
 
 
@@ -238,10 +242,11 @@ class SVNService(wx.lib.pydocview.DocService):
         dlg.Fit()
         dlg.Layout()
 
+        dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             retcode = True
             password = passwordTxt.GetValue()
-            save = savePasswordCheckBox.IsChecked()
+            save = savePasswordCheckbox.IsChecked()
         else:
             retcode = False
             password = None
@@ -253,10 +258,11 @@ class SVNService(wx.lib.pydocview.DocService):
 
     def SSLClientCert(self):
         dlg = wx.FileDialog(wx.GetApp().GetTopWindow(),
-            message="Choose certificate", defaultDir=os.getcwd(), 
-            style=wx.OPEN|wx.CHANGE_DIR
+            message="Choose certificate",
+            style=wx.OPEN|wx.FILE_MUST_EXIST|wx.CHANGE_DIR
             )
             
+        # dlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
         if dlg.ShowModal() == wx.ID_OK:
             retcode = True
             certfile = dlg.GetPath()
@@ -321,8 +327,14 @@ class SVNService(wx.lib.pydocview.DocService):
         if id == SVNService.SVN_UPDATE_ID:
             wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
             
-            filenames = self.GetCurrentDocuments()[:]
-            filenames.sort(self.BasenameCaseInsensitiveCompare)
+            filenames = self.GetCurrentDocuments()
+            if filenames:
+                filenames = filenames[:]
+                filenames.sort(self.BasenameCaseInsensitiveCompare)
+            else:
+                folderPath = self.GetCurrentFolder()
+                if folderPath:
+                    filenames = [folderPath]
 
             messageService = wx.GetApp().GetService(MessageService.MessageService)
             messageService.ShowWindow()
@@ -346,7 +358,10 @@ class SVNService(wx.lib.pydocview.DocService):
                                                          _("Updated file '%s' is currently open.  Close it?") % os.path.basename(filename),
                                                          _("Close File"),
                                                          wx.YES_NO|wx.ICON_QUESTION)
-                                if yesNoMsg.ShowModal() == wx.ID_YES:
+                                yesNoMsg.CenterOnParent()
+                                status = yesNoMsg.ShowModal()
+                                yesNoMsg.Destroy()
+                                if status == wx.ID_YES:
                                     doc.DeleteAllViews()
                                 break
                     else:
@@ -377,8 +392,8 @@ class SVNService(wx.lib.pydocview.DocService):
             view.ClearLines()
             view.AddLines(_("SVN Update:\n"))
             
-            projects = self.GetCurrentProjects()
-            for project in projects:
+            project = self.GetCurrentProject()
+            if project:
                 openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
                 for doc in openDocs:
                     if doc.GetFilename() == project:
@@ -400,7 +415,9 @@ class SVNService(wx.lib.pydocview.DocService):
                                                                      _("Updated file '%s' is currently open.  Close it?") % os.path.basename(filename),
                                                                      _("Close File"),
                                                                      wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
+                                            yesNoMsg.CenterOnParent()
                                             status = yesNoMsg.ShowModal()
+                                            yesNoMsg.Destroy()
                                             if status == wx.ID_YES:
                                                 doc.DeleteAllViews()
                                             elif status == wx.ID_NO:
@@ -428,8 +445,8 @@ class SVNService(wx.lib.pydocview.DocService):
 
         elif id == SVNService.SVN_CHECKIN_ALL_ID:
             filenames = []
-            projects = self.GetCurrentProjects()
-            for project in projects:
+            project = self.GetCurrentProject()
+            if project:
                 openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
                 for doc in openDocs:
                     if doc.GetFilename() == project:
@@ -447,7 +464,9 @@ class SVNService(wx.lib.pydocview.DocService):
                                                  _("'%s' has unsaved modifications.  Save it before commit?") % os.path.basename(filename),
                                                  _("SVN Commit"),
                                                  wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
+                        yesNoMsg.CenterOnParent()
                         status = yesNoMsg.ShowModal()
+                        yesNoMsg.Destroy()
                         if status == wx.ID_YES:
                             doc.Save()
                         elif status == wx.ID_NO:
@@ -474,11 +493,12 @@ class SVNService(wx.lib.pydocview.DocService):
                 fileList.Check(i, True)
             sizer.Add(fileList, 0, wx.EXPAND|wx.TOP, HALF_SPACE)
 
-            buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
+            buttonSizer = wx.StdDialogButtonSizer()
             okBtn = wx.Button(dlg, wx.ID_OK)
             okBtn.SetDefault()
-            buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE)
-            buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0)
+            buttonSizer.AddButton(okBtn)
+            buttonSizer.AddButton(wx.Button(dlg, wx.ID_CANCEL))
+            buttonSizer.Realize()
 
             contentSizer = wx.BoxSizer(wx.VERTICAL)
             contentSizer.Add(sizer, 0, wx.ALL, SPACE)
@@ -488,6 +508,7 @@ class SVNService(wx.lib.pydocview.DocService):
             dlg.Fit()
             dlg.Layout()
 
+            dlg.CenterOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
 
@@ -544,7 +565,9 @@ class SVNService(wx.lib.pydocview.DocService):
                                                  _("'%s' has unsaved modifications.  Save it before commit?") % os.path.basename(filename),
                                                  _("SVN Commit"),
                                                  wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
+                        yesNoMsg.CenterOnParent()
                         status = yesNoMsg.ShowModal()
+                        yesNoMsg.Destroy()
                         if status == wx.ID_YES:
                             doc.Save()
                         elif status == wx.ID_NO:
@@ -571,12 +594,13 @@ class SVNService(wx.lib.pydocview.DocService):
                 fileList.Check(i, True)
             sizer.Add(fileList, 0, wx.EXPAND|wx.TOP, HALF_SPACE)
 
-            buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
+            buttonSizer = wx.StdDialogButtonSizer()
             okBtn = wx.Button(dlg, wx.ID_OK)
             okBtn.SetDefault()
-            buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE)
-            buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0)
-
+            buttonSizer.AddButton(okBtn)
+            buttonSizer.AddButton(wx.Button(dlg, wx.ID_CANCEL))
+            buttonSizer.Realize()
+            
             contentSizer = wx.BoxSizer(wx.VERTICAL)
             contentSizer.Add(sizer, 0, wx.ALL, SPACE)
             contentSizer.Add(buttonSizer, 0, wx.ALL|wx.ALIGN_RIGHT, SPACE)
@@ -585,6 +609,7 @@ class SVNService(wx.lib.pydocview.DocService):
             dlg.Fit()
             dlg.Layout()
 
+            dlg.CenterOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
 
@@ -654,11 +679,11 @@ class SVNService(wx.lib.pydocview.DocService):
                 dir = localPath.GetValue()
                 if len(dir):
                     dirDlg.SetPath(dir)
+                dirDlg.CenterOnParent()
                 if dirDlg.ShowModal() == wx.ID_OK:
                     localPath.SetValue(dirDlg.GetPath())
                     localPath.SetToolTipString(localPath.GetValue())
                     localPath.SetInsertionPointEnd()
-
                 dirDlg.Destroy()
             wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
 
@@ -667,11 +692,12 @@ class SVNService(wx.lib.pydocview.DocService):
             sizer.Add(findDirButton, 0, wx.LEFT, HALF_SPACE)
             gridSizer.Add(sizer, 0)
 
-            buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
+            buttonSizer = wx.StdDialogButtonSizer()
             okBtn = wx.Button(dlg, wx.ID_OK)
             okBtn.SetDefault()
-            buttonSizer.Add(okBtn, 0, wx.RIGHT, HALF_SPACE)
-            buttonSizer.Add(wx.Button(dlg, wx.ID_CANCEL), 0)
+            buttonSizer.AddButton(okBtn)
+            buttonSizer.AddButton(wx.Button(dlg, wx.ID_CANCEL))
+            buttonSizer.Realize()
 
             contentSizer = wx.BoxSizer(wx.VERTICAL)
             contentSizer.Add(gridSizer, 0, wx.ALL, SPACE)
@@ -681,6 +707,7 @@ class SVNService(wx.lib.pydocview.DocService):
             dlg.Fit()
             dlg.Layout()
 
+            dlg.CenterOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT))
                 
@@ -737,7 +764,10 @@ class SVNService(wx.lib.pydocview.DocService):
                                                  _("Reverted file '%s' is currently open.  Close it?") % os.path.basename(doc.GetFilename()),
                                                  _("Close File"),
                                                  wx.YES_NO|wx.ICON_QUESTION)
-                        if yesNoMsg.ShowModal() == wx.ID_YES:
+                        yesNoMsg.CenterOnParent()
+                        status = yesNoMsg.ShowModal()
+                        yesNoMsg.Destroy()
+                        if status == wx.ID_YES:
                             doc.DeleteAllViews()
 
             except pysvn.ClientError, e:
@@ -819,8 +849,7 @@ class SVNService(wx.lib.pydocview.DocService):
     def ProcessUpdateUIEvent(self, event):
         id = event.GetId()
 
-        if id in [SVNService.SVN_UPDATE_ID,
-                  SVNService.SVN_CHECKIN_ID,
+        if id in [SVNService.SVN_CHECKIN_ID,
                   SVNService.SVN_REVERT_ID,
                   SVNService.SVN_ADD_ID,
                   SVNService.SVN_DELETE_ID]:
@@ -830,13 +859,20 @@ class SVNService(wx.lib.pydocview.DocService):
                 event.Enable(False)
             return True
 
+        elif id == SVNService.SVN_UPDATE_ID:
+            if self.GetCurrentDocuments() or self.GetCurrentFolder():
+                event.Enable(True)
+            else:
+                event.Enable(False)
+            return True
+
         elif id == SVNService.SVN_CHECKOUT_ID:
             event.Enable(True)
             return True
 
         elif (id == SVNService.SVN_UPDATE_ALL_ID
         or id == SVNService.SVN_CHECKIN_ALL_ID):
-            if self.GetCurrentProjects():
+            if self.GetCurrentProject():
                 event.Enable(True)
             else:
                 event.Enable(False)
@@ -845,27 +881,20 @@ class SVNService(wx.lib.pydocview.DocService):
         return False
 
 
-    def GetCurrentProjects(self):
+    def GetCurrentProject(self):
         projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
         if projectService:
             projView = projectService.GetView()
-
-            if projView.HasFocus():
-                filenames = projView.GetSelectedProjects()
-                if len(filenames):
-                    return filenames
-                else:
-                    return None
+            return projView.GetSelectedProject()
         return None
 
 
     def GetCurrentDocuments(self):
-
         projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
         if projectService:
             projView = projectService.GetView()
 
-            if projView.HasFocus():
+            if projView.FilesHasFocus():
                 filenames = projView.GetSelectedFiles()
                 if len(filenames):
                     return filenames
@@ -881,6 +910,19 @@ class SVNService(wx.lib.pydocview.DocService):
         return filenames
 
 
+    def GetCurrentFolder(self):
+        projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+        if projectService:
+            projView = projectService.GetView()
+
+            if projView.FilesHasFocus():
+                folderPath = projView.GetSelectedPhysicalFolder()
+                if folderPath:
+                    return folderPath
+
+        return None
+
+
     def BasenameCaseInsensitiveCompare(self, s1, s2):
         s1L = os.path.basename(s1).lower()
         s2L = os.path.basename(s2).lower()
@@ -903,6 +945,7 @@ class SVNOptionsPanel(wx.Panel):
 
         borderSizer = wx.BoxSizer(wx.VERTICAL)
         sizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
+        sizer.AddGrowableCol(1, 1)
 
         sizer.Add(wx.StaticText(self, -1, _("SVN Config Dir:")), 0, wx.ALIGN_CENTER_VERTICAL)
 
@@ -919,18 +962,18 @@ class SVNOptionsPanel(wx.Panel):
             dir = self._svnConfigDir.GetValue()
             if len(dir):
                 dirDlg.SetPath(dir)
+            dirDlg.CenterOnParent()
             if dirDlg.ShowModal() == wx.ID_OK:
                 self._svnConfigDir.SetValue(dirDlg.GetPath())
                 self._svnConfigDir.SetToolTipString(self._svnConfigDir.GetValue())
                 self._svnConfigDir.SetInsertionPointEnd()
-
             dirDlg.Destroy()
         wx.EVT_BUTTON(findDirButton, -1, OnBrowseButton)
 
         hsizer = wx.BoxSizer(wx.HORIZONTAL)
         hsizer.Add(self._svnConfigDir, 1, wx.EXPAND)
         hsizer.Add(findDirButton, 0, wx.LEFT, HALF_SPACE)
-        sizer.Add(hsizer, 0)
+        sizer.Add(hsizer, 0, wx.EXPAND)
 
 
         svnUrlList = ReadSvnUrlList()
@@ -941,7 +984,7 @@ class SVNOptionsPanel(wx.Panel):
             self._svnURLCombobox.SetStringSelection(svnUrlList[0])
         else:
             self._svnURLCombobox.SetToolTipString(_("Set Repository URL"))
-        sizer.Add(self._svnURLCombobox, 0)
+        sizer.Add(self._svnURLCombobox, 0, wx.EXPAND)
 
 
         sizer.Add(wx.StaticText(self, -1, _("SVN_SSH:")), 0, wx.ALIGN_CENTER_VERTICAL)
@@ -956,6 +999,7 @@ class SVNOptionsPanel(wx.Panel):
 
         def OnBrowseFileButton(event):
             dirDlg = wx.FileDialog(self, _("Choose a file:"), style=wx.OPEN|wx.CHANGE_DIR)
+            # dirDlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
             if dirDlg.ShowModal() == wx.ID_OK:
                 self._svnSSH.SetValue(dirDlg.GetPath())
                 self._svnSSH.SetToolTipString(self._svnSSH.GetValue())
@@ -966,15 +1010,19 @@ class SVNOptionsPanel(wx.Panel):
         hsizer = wx.BoxSizer(wx.HORIZONTAL)
         hsizer.Add(self._svnSSH, 1, wx.EXPAND)
         hsizer.Add(findSSHButton, 0, wx.LEFT, HALF_SPACE)
-        sizer.Add(hsizer, 0)
+        sizer.Add(hsizer, 0, wx.EXPAND)
 
 
-        borderSizer.Add(sizer, 0, wx.ALL, SPACE)
+        borderSizer.Add(sizer, 0, wx.ALL|wx.EXPAND, SPACE)
         self.SetSizer(borderSizer)
         self.Layout()
         parent.AddPage(self, _("SVN"))
 
 
+    def GetIcon(self):
+        return wx.NullIcon
+
+
     def OnOK(self, optionsDialog):
         config = wx.ConfigBase_Get()
         
index 87e120bffa9d9f86d1a858889d1c6d8d2dacf8bd..b65f08d58ee2ad26ea84510d99cc83b5ad455d69 100644 (file)
@@ -106,6 +106,8 @@ class ServiceView(wx.EvtHandler):
             if (self._service.GetEmbeddedWindowLocation() == wx.lib.pydocview.EMBEDDED_WINDOW_BOTTOM):
                 if ServiceView.bottomTab == None:
                     ServiceView.bottomTab = wx.Notebook(frame, wx.NewId(), (0,0), (100,100), wx.LB_DEFAULT, "Bottom Tab")
+                    wx.EVT_RIGHT_DOWN(ServiceView.bottomTab, self.OnNotebookRightClick)
+                    wx.EVT_MIDDLE_DOWN(ServiceView.bottomTab, self.OnNotebookMiddleClick)
                     sizer.Add(ServiceView.bottomTab, 1, wx.TOP|wx.EXPAND, 4)
                     def OnFrameResize(event):
                         ServiceView.bottomTab.SetSize(ServiceView.bottomTab.GetParent().GetSize())
@@ -125,10 +127,46 @@ class ServiceView(wx.EvtHandler):
             sizer.Add(self._control, 1, wx.EXPAND, 0)
         frame.SetSizer(sizer)
         frame.Layout()
-
+        self.Activate()
         return True
 
 
+    def OnNotebookMiddleClick(self, event):
+        index, type = ServiceView.bottomTab.HitTest(event.GetPosition())
+        # 0 tab is always message. This code assumes the rest are run/debug windows
+        if index > 0:
+            page = ServiceView.bottomTab.GetPage(index)
+            if hasattr(page, 'StopAndRemoveUI'):
+                page.StopAndRemoveUI(event)
+       
+    def OnNotebookRightClick(self, event):
+        index, type = ServiceView.bottomTab.HitTest(event.GetPosition())
+        menu = wx.Menu()
+        x, y = event.GetX(), event.GetY()
+        # 0 tab is always message. This code assumes the rest are run/debug windows
+        if index > 0:
+            page = ServiceView.bottomTab.GetPage(index)
+            id = wx.NewId()
+            menu.Append(id, _("Close"))
+            def OnRightMenuSelect(event):
+                if hasattr(page, 'StopAndRemoveUI'):
+                    page.StopAndRemoveUI(event)
+            wx.EVT_MENU(ServiceView.bottomTab, id, OnRightMenuSelect)
+            if ServiceView.bottomTab.GetPageCount() > 1:
+                id = wx.NewId()
+                menu.Append(id, _("Close All but \"Message\""))
+                def OnRightMenuSelect(event):
+                    for i in range(ServiceView.bottomTab.GetPageCount()-1, 0, -1): # Go from len-1 to 1
+                        page = ServiceView.bottomTab.GetPage(i)
+                        if hasattr(page, 'StopAndRemoveUI'):
+                            page.StopAndRemoveUI(event)
+                wx.EVT_MENU(ServiceView.bottomTab, id, OnRightMenuSelect)
+        
+        ServiceView.bottomTab.PopupMenu(menu, wx.Point(x, y))
+        menu.Destroy()
+
+        
     def OnCloseWindow(self, event):
         frame = self.GetFrame()
         config = wx.ConfigBase_Get()
index 98f863a9da49319c2a5a652808403189f03cb8aa..cb16f7bbf55d7448581dcb4dcb3e17fda6a49fce 100644 (file)
@@ -2,7 +2,7 @@
 # Name:         UICommon.py
 # Purpose:      Shared UI stuff
 #
-# Author:       Matt Fryer
+# Author:       Matt Fryer, Morgan Hua
 #
 # Created:      3/10/05
 # CVS-ID:       $Id$
 import os
 import os.path
 import wx
+import string
 import ProjectEditor
-import activegrid.util as utillib
+import activegrid.util.sysutils as sysutils
+import activegrid.util.strutils as strutils
+import activegrid.util.appdirs as appdirs
 _ = wx.GetTranslation
 
-def CreateDirectoryControl( parent, fileLabel, dirLabel, fileExtension, startingName="", startingDirectory=""):
+def CreateDirectoryControl( parent, fileLabel=_("File Name:"), dirLabel=_("Directory"), fileExtension="*", startingName="", startingDirectory=None, choiceDirs=None, appDirDefaultStartDir=False, returnAll=False):
 
+    if not choiceDirs:
+        choiceDirs = []
+        projectDirs = []
+
+        if appDirDefaultStartDir:
+            appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY, ProjectEditor.NEW_PROJECT_DIRECTORY_DEFAULT)
+        else:
+            appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY)
+        if appDirectory:
+            choiceDirs.append(appDirectory)
+            if appDirDefaultStartDir and not startingDirectory:
+                startingDirectory = appDirectory
+
+        projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+        if projectService:
+            curProjectDoc = projectService.GetCurrentProject()
+            if curProjectDoc:
+                homeDir = curProjectDoc.GetAppDocMgr().homeDir
+                if homeDir and (homeDir not in choiceDirs):
+                    choiceDirs.append(homeDir)
+                if not startingDirectory:
+                    startingDirectory = homeDir
+                    
+            for projectDoc in projectService.GetOpenProjects():
+                if projectDoc == curProjectDoc:
+                    continue
+                homeDir = projectDoc.GetAppDocMgr().homeDir
+                if homeDir and (homeDir not in projectDirs):
+                    projectDirs.append(homeDir)
+                projectDirs.sort(CaseInsensitiveCompare)
+            for projectDir in projectDirs:
+                if projectDir not in choiceDirs:
+                    choiceDirs.append(projectDir)
+
+        if startingDirectory and (startingDirectory not in choiceDirs):
+            choiceDirs.insert(0, startingDirectory)
+            
+        if os.getcwd() not in choiceDirs:
+            choiceDirs.append(os.getcwd())                
+        if appdirs.documents_folder not in choiceDirs:
+            choiceDirs.append(appdirs.documents_folder) 
+
+    if not startingDirectory:
+        startingDirectory = os.getcwd()
+        
     nameControl = wx.TextCtrl(parent, -1, startingName, size=(-1,-1))
     nameLabelText = wx.StaticText(parent, -1, fileLabel)
     dirLabelText = wx.StaticText(parent, -1, dirLabel)
-    dirControl = wx.TextCtrl(parent, -1, startingDirectory, size=(-1,-1))
+    dirControl = wx.ComboBox(parent, -1, startingDirectory, size=(-1,-1), choices=choiceDirs)
     dirControl.SetToolTipString(startingDirectory)
-    button = wx.Button(parent, -1, _("Browse..."), size=(60,-1))
+    button = wx.Button(parent, -1, _("Browse..."))
+    allControls = [nameControl, nameLabelText, dirLabelText, dirControl, button]
     
     def OnFindDirClick(event): 
         name = ""  
@@ -35,54 +84,210 @@ def CreateDirectoryControl( parent, fileLabel, dirLabel, fileExtension, starting
                 name = nameCtrlValue
             else:
                 name = _("%s.%s") % (nameCtrlValue, fileExtension)
-        path = wx.FileSelector(_("Choose a filename and directory"),
-                       "",
-                       "%s" % name,
-                       wildcard=_("*.%s") % fileExtension ,
-                       flags=wx.SAVE,
-                       parent=parent)
+                
+        dlg = wx.FileDialog(parent, _("Choose a filename and directory"),
+                       defaultDir = dirControl.GetValue().strip(),
+                       defaultFile = name,
+                       wildcard= "*.%s" % fileExtension,
+                       style=wx.SAVE|wx.CHANGE_DIR)
 
+        if dlg.ShowModal() != wx.ID_OK:
+            dlg.Destroy()
+            return
+        path = dlg.GetPath()
+        dlg.Destroy()
+        
         if path:
             dir, filename = os.path.split(path)
+            if dirControl.FindString(dir) == wx.NOT_FOUND:
+                dirControl.Insert(dir, 0)
             dirControl.SetValue(dir)
             dirControl.SetToolTipString(dir)
             nameControl.SetValue(filename)
 
     parent.Bind(wx.EVT_BUTTON, OnFindDirClick, button)
     
-    def Validate(allowOverwriteOnPrompt=False):
-        if nameControl.GetValue() == "":
-            wx.MessageBox(_("Please provide a filename."), _("Provide a Filename"))            
+    def Validate(allowOverwriteOnPrompt=False, infoString='', noFirstCharDigit=False):
+        projName = nameControl.GetValue().strip()
+        if projName == "":
+            wx.MessageBox(_("Please provide a %sfile name.") % infoString, _("Provide a File Name"))            
+            return False
+        if noFirstCharDigit and projName[0].isdigit():
+            wx.MessageBox(_("File name cannot start with a number.  Please enter a different name."), _("Invalid File Name"))            
             return False
-        if nameControl.GetValue().find(' ') != -1:
-            wx.MessageBox(_("Please provide a filename that does not contains spaces."), _("Spaces in Filename"))            
+        if projName.find(' ') != -1:
+            wx.MessageBox(_("Please provide a %sfile name that does not contains spaces.") % infoString, _("Spaces in File Name"))            
             return False
         if not os.path.exists(dirControl.GetValue()):
-            wx.MessageBox(_("That directory does not exist. Please choose an existing directory."), _("Provide a Valid Directory"))            
+            wx.MessageBox(_("That %sdirectory does not exist. Please choose an existing directory.") % infoString, _("Provide a Valid Directory"))            
             return False
         
-        filePath = os.path.join(dirControl.GetValue(), MakeNameEndInExtension(nameControl.GetValue(), "." + fileExtension))
+        filePath = os.path.join(dirControl.GetValue(), MakeNameEndInExtension(projName, "." + fileExtension))
         if os.path.exists(filePath):
             if allowOverwriteOnPrompt:
-                res = wx.MessageBox(_("That file already exists. Would you like to overwrite it."), "File Exists", style=wx.YES_NO|wx.NO_DEFAULT)
+                res = wx.MessageBox(_("That %sfile already exists. Would you like to overwrite it.") % infoString, "File Exists", style=wx.YES_NO|wx.NO_DEFAULT)
                 return (res == wx.YES)  
             else:                
-                wx.MessageBox(_("That file already exists. Please choose a different name."), "File Exists")
+                wx.MessageBox(_("That %sfile already exists. Please choose a different name.") % infoString, "File Exists")
                 return False                  
         return True    
     HALF_SPACE = 5
     flexGridSizer = wx.FlexGridSizer(cols = 3, vgap = HALF_SPACE, hgap = HALF_SPACE)
     flexGridSizer.AddGrowableCol(1,1)
-    flexGridSizer.Add(nameLabelText, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.TOP|wx.RIGHT, HALF_SPACE)
+    flexGridSizer.Add(nameLabelText, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
     flexGridSizer.Add(nameControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
     flexGridSizer.Add(button, flag=wx.ALIGN_RIGHT|wx.LEFT, border=HALF_SPACE)
         
-    flexGridSizer.Add(dirLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.TOP|wx.RIGHT, border=HALF_SPACE)
-    flexGridSizer.Add(dirControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border=HALF_SPACE)
+    flexGridSizer.Add(dirLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT)
+    flexGridSizer.Add(dirControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
     flexGridSizer.Add(wx.StaticText(parent, -1, ""), 0)
-    return nameControl, dirControl, flexGridSizer, Validate
+    if returnAll:
+        return nameControl, dirControl, flexGridSizer, Validate, allControls
+    else:
+        return nameControl, dirControl, flexGridSizer, Validate
+
+
+def CreateDirectoryOnlyControl( parent, dirLabel=_("Location:"), startingDirectory=None, choiceDirs=None, appDirDefaultStartDir=False):
+
+    if not choiceDirs:
+        choiceDirs = []
+        projectDirs = []
+
+        if appDirDefaultStartDir:
+            appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY, ProjectEditor.NEW_PROJECT_DIRECTORY_DEFAULT)
+        else:
+            appDirectory = wx.ConfigBase_Get().Read(ProjectEditor.PROJECT_DIRECTORY_KEY)
+        if appDirectory:
+            choiceDirs.append(appDirectory)
+            if appDirDefaultStartDir and not startingDirectory:
+                startingDirectory = appDirectory
+
+        projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+        if projectService:
+            curProjectDoc = projectService.GetCurrentProject()
+            if curProjectDoc:
+                homeDir = curProjectDoc.GetAppDocMgr().homeDir
+                if homeDir and (homeDir not in choiceDirs):
+                    choiceDirs.append(homeDir)
+                if not startingDirectory:
+                    startingDirectory = homeDir
+                    
+            for projectDoc in projectService.GetOpenProjects():
+                if projectDoc == curProjectDoc:
+                    continue
+                homeDir = projectDoc.GetAppDocMgr().homeDir
+                if homeDir and (homeDir not in projectDirs):
+                    projectDirs.append(homeDir)
+                projectDirs.sort(CaseInsensitiveCompare)
+            for projectDir in projectDirs:
+                if projectDir not in choiceDirs:
+                    choiceDirs.append(projectDir)
+
+        if startingDirectory and (startingDirectory not in choiceDirs):
+            choiceDirs.insert(0, startingDirectory)
+
+        if os.getcwd() not in choiceDirs:
+            choiceDirs.append(os.getcwd())                
+        if appdirs.documents_folder not in choiceDirs:
+            choiceDirs.append(appdirs.documents_folder)                
+            
+
+    if not startingDirectory:
+        startingDirectory = os.getcwd()
+            
+    dirLabelText = wx.StaticText(parent, -1, dirLabel)
+    dirControl = wx.ComboBox(parent, -1, startingDirectory, size=(-1,-1), choices=choiceDirs)
+    dirControl.SetToolTipString(startingDirectory)
+    button = wx.Button(parent, -1, _("Browse..."))
+    
+    def OnFindDirClick(event): 
+            dlg = wx.DirDialog(wx.GetApp().GetTopWindow(),
+                                _("Choose a directory:"),
+                                defaultPath=dirControl.GetValue().strip(),
+                                style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)
+            dlg.CenterOnParent()
+            if dlg.ShowModal() == wx.ID_OK:
+                dir = dlg.GetPath()
+                if dirControl.FindString(dir) == wx.NOT_FOUND:
+                    dirControl.Insert(dir, 0)
+                dirControl.SetValue(dir)
+                dirControl.SetToolTipString(dir)
+            dlg.Destroy()            
+
+    parent.Bind(wx.EVT_BUTTON, OnFindDirClick, button)
+    
+    def Validate(allowOverwriteOnPrompt=False):
+        dirName = dirControl.GetValue().strip()
+        if dirName == "":
+            wx.MessageBox(_("Please provide a directory."), _("Provide a Directory"))            
+            return False
+        if not os.path.exists(dirName):
+            wx.MessageBox(_("That directory does not exist. Please choose an existing directory."), _("Provide a Valid Directory"))            
+            return False
+        return True  
+          
+    HALF_SPACE = 5
+    flexGridSizer = wx.FlexGridSizer(cols = 3, vgap = HALF_SPACE, hgap = HALF_SPACE)
+    flexGridSizer.AddGrowableCol(1,1)
+    flexGridSizer.Add(dirLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.RIGHT, border=HALF_SPACE)
+    flexGridSizer.Add(dirControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border=HALF_SPACE)
+    flexGridSizer.Add(button, flag=wx.ALIGN_RIGHT|wx.LEFT, border=HALF_SPACE)
+        
+    return dirControl, flexGridSizer, Validate
+
+
+def CreateNameOnlyControl( parent, fileLabel, startingName="", startingDirectoryControl=None):
+
+    fileLabelText = wx.StaticText(parent, -1, fileLabel)
+    nameControl = wx.TextCtrl(parent, -1, startingName, size=(-1,-1))
+        
+    def Validate(allowOverwriteOnPrompt=False, noFirstCharDigit=False):
+        projName = nameControl.GetValue().strip()
+        if projName == "":
+            wx.MessageBox(_("Blank name.  Please enter a valid name."), _("Project Name"))            
+            return False
+        if noFirstCharDigit and projName[0].isdigit():
+            wx.MessageBox(_("Name cannot start with a number.  Please enter a valid name."), _("Project Name"))            
+            return False
+        if projName.find(' ') != -1:
+            wx.MessageBox(_("Spaces in name.  Name cannot have spaces.") % infoString, _("Project Name"))            
+            return False
+        path = os.path.join(startingDirectoryControl.GetValue().strip(), projName)
+        if os.path.exists(path):
+            if os.path.isdir(path):
+                message = _("Project '%s' already exists.  Would you like to overwrite the contents of the project?") % projName
+            else: # os.path.isfile(path):
+                message = _("'%s' already exists as a file.  Would you like to replace it with the project?") % nameControl.GetValue().strip()
+                    
+            yesNoMsg = wx.MessageDialog(wx.GetApp().GetTopWindow(),
+                          message,
+                          _("Project Directory Exists"),
+                          wx.YES_NO|wx.ICON_QUESTION
+                          )
+            yesNoMsg.CenterOnParent()
+            status = yesNoMsg.ShowModal()
+            yesNoMsg.Destroy()
+            if status == wx.ID_NO:
+                return False
+        return True  
+          
+    HALF_SPACE = 5
+    flexGridSizer = wx.FlexGridSizer(cols = 2, vgap = HALF_SPACE, hgap = HALF_SPACE)
+    flexGridSizer.AddGrowableCol(1,1)
+    flexGridSizer.Add(fileLabelText, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.TOP|wx.RIGHT, border=HALF_SPACE)
+    flexGridSizer.Add(nameControl, 2, flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border=HALF_SPACE)
+        
+    return nameControl, flexGridSizer, Validate
+    
 
-def AddFilesToCurrentProject(paths, save=False):
+def GetCurrentProject():
+    projectDocument = None
+    projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+    if projectService:
+        projectDocument = projectService.GetCurrentProject()
+    return projectDocument
+
+def AddFilesToCurrentProject(paths, folderPath=None, types=None, names=None, save=False):
     projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
     if projectService:
         projectDocument = projectService.GetCurrentProject()
@@ -92,11 +297,22 @@ def AddFilesToCurrentProject(paths, save=False):
                 if path in files:
                     paths.remove(path)
             if paths:
-                projectDocument.GetCommandProcessor().Submit(ProjectEditor.ProjectAddFilesCommand(projectDocument, paths))
-                projectDocument.GetFirstView().DoSelectFiles([paths[0]])
+                projectDocument.GetCommandProcessor().Submit(ProjectEditor.ProjectAddFilesCommand(projectDocument, paths, folderPath=folderPath, types=types, names=names))
                 if save:
                     projectDocument.OnSaveDocument(projectDocument.GetFilename())
 
+def AddFilesToProject(projectDocument, paths, types=None, names=None, save=False):
+    if projectDocument:
+        files = projectDocument.GetFiles()
+        for path in paths:
+            if path in files:
+                paths.remove(path)
+        if paths:
+            projectDocument.GetCommandProcessor().Submit(ProjectEditor.ProjectAddFilesCommand(projectDocument, paths, types=types, names=names))
+            if save:
+                projectDocument.OnSaveDocument(projectDocument.GetFilename())
+
+
 def MakeNameEndInExtension(name, extension):
     if not name:
         return name
@@ -106,23 +322,130 @@ def MakeNameEndInExtension(name, extension):
     else:
         return name + extension
  
-# Lame
-def PluralName(name):
-    if not name:
-        return name
-    if name.endswith('us'):
-        return name[0:-2] + 'ii'
-    elif name.endswith('s'):
-        return name
-    elif name.endswith('y'):
-        return name[0:-1] + 'ies'
-    else:
-        return name + 's'
-           
+
 def GetPythonExecPath():
     pythonExecPath = wx.ConfigBase_Get().Read("ActiveGridPythonLocation")
     if not pythonExecPath:
-        pythonExecPath = utillib.pythonExecPath
+        pythonExecPath = sysutils.pythonExecPath
     return pythonExecPath
     
 
+def _DoRemoveRecursive(path, skipFile=None, skipped=False):
+    if path == skipFile:
+        skipped = True
+    elif os.path.isdir(path):
+        for file in os.listdir(path):
+            file_or_dir = os.path.join(path,file)
+            if skipFile == file_or_dir:
+                skipped = True
+            elif os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
+                if _DoRemoveRecursive(file_or_dir, skipFile): # it's a directory recursive call to function again
+                    skipped = True
+            else:
+                os.remove(file_or_dir) # it's a file, delete it
+        if not skipped:
+            os.rmdir(path) # delete the directory here
+    else:
+        os.remove(path)
+        
+    return skipped
+
+
+def RemoveRecursive(path, skipFile=None):
+    _DoRemoveRecursive(path, skipFile)    
+
+
+def CaseInsensitiveCompare(s1, s2):
+    """ Method used by sort() to sort values in case insensitive order """
+    return strutils.caseInsensitiveCompare(s1, s2)
+
+
+def GetAnnotation(model, elementName):
+    """ Get an object's annotation used for tooltips """
+    if hasattr(model, "__xsdcomplextype__"):
+        ct = model.__xsdcomplextype__
+        if ct:
+            el = ct.findElement(elementName)
+            if el and el.annotation:
+                return el.annotation
+            
+    return ""
+
+
+#----------------------------------------------------------------------------
+# Methods for finding application level info
+#----------------------------------------------------------------------------
+
+def GetProjectForDoc(doc):
+    """ Given a document find which project it belongs to.
+        Tries to intelligently resolve conflicts if it is in more than one open project.
+    """
+    projectService = wx.GetApp().GetService(ProjectEditor.ProjectService)
+
+    projectDoc = projectService.FindProjectFromMapping(doc)
+    if projectDoc:
+        return projectDoc
+
+    projectDoc = projectService.GetCurrentProject()
+    if not projectDoc:
+        return None
+    if projectDoc.IsFileInProject(doc.GetFilename()):
+        return projectDoc
+
+    projects = []
+    openDocs = wx.GetApp().GetDocumentManager().GetDocuments()
+    for openDoc in openDocs:
+        if openDoc == projectDoc:
+            continue
+        if(isinstance(openDoc, ProjectEditor.ProjectDocument)):
+            if openDoc.IsFileInProject(doc.GetFilename()):
+                projects.append(openDoc)
+                
+    if projects:
+        if len(projects) == 1:
+            return projects[0]
+        else:
+            choices = [os.path.basename(project.GetFilename()) for project in projects]
+            dlg = wx.SingleChoiceDialog(wx.GetApp().GetTopWindow(), _("'%s' found in more than one project.\nWhich project should be used for this operation?") % os.path.basename(doc.GetFilename()), _("Select Project"), choices, wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.OK|wx.CENTRE)
+            dlg.CenterOnParent()
+            projectDoc = None
+            if dlg.ShowModal() == wx.ID_OK:
+                i = dlg.GetSelection()
+                projectDoc = projects[i]
+            dlg.Destroy()
+            return projectDoc
+
+    return None
+
+
+def GetAppInfoForDoc(doc):
+    """ Get the AppInfo for a given document """
+    projectDoc = GetProjectForDoc(doc)
+    if projectDoc:
+        return projectDoc.GetAppInfo()
+    return None
+
+
+def GetAppDocMgrForDoc(doc):
+    """ Get the AppDocMgr for a given document """
+    projectDoc = GetProjectForDoc(doc)
+    if projectDoc:
+        return projectDoc.GetModel()
+    return None
+
+
+def GetAppInfoLanguage(doc=None):
+    from activegrid.server.deployment import LANGUAGE_DEFAULT
+    if doc:
+        language = doc.GetAppInfo().language
+    else:
+        language = None
+        
+    if not language:
+        config = wx.ConfigBase_Get()
+        language = config.Read(ProjectEditor.APP_LAST_LANGUAGE, LANGUAGE_DEFAULT)
+        
+        if doc:
+            doc.GetAppInfo().language = language  # once it is selected, it must be set.
+        
+    return language
index 98d84eeb7049b6de4733456a51d2a5483580c990..af2b9dad1b6b78f914895d7826d77a932cb48e50 100644 (file)
@@ -39,7 +39,7 @@ class BaseWizard(wx.wizard.Wizard):
 class TitledWizardPage(wx.wizard.PyWizardPage):
 
 
-    def __init__(self, parent, title):
+    def __init__(self, parent, title=None):
         self._prev = None
         self._prevFunc = None
         self._next = None
@@ -48,13 +48,22 @@ class TitledWizardPage(wx.wizard.PyWizardPage):
         self.SetSizer(wx.BoxSizer(wx.VERTICAL))
         self.MakePageTitle(title)
 
-
+    def SetTitle(self, title):
+        if not title: title = ""
+        self.title.SetLabel(title)
+        
     def MakePageTitle(self, title):
         sizer = wx.BoxSizer(wx.VERTICAL)
-        title = wx.StaticText(self, -1, title)
-        title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
-        sizer.Add(title, 0, wx.ALIGN_LEFT | wx.ALL, 5)
-        sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 5)
+        if not title: title = ""
+        self.title = wx.StaticText(self, -1, title)
+        self.title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
+        # the code below used to add a 5 pixel border in all directions
+        # but I found that the left margin was not aligned properly because
+        # only a few of the wizards made sure that pages themselves added
+        # the 5 pixel left border. If we still want to inset 5 more pixels,
+        # we should add a wx.HORIZONTAL sizer here to take care of it.
+        sizer.Add(self.title, 0, wx.ALIGN_LEFT | wx.TOP | wx.BOTTOM, 5)
+        sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5)
         self.GetSizer().Add(sizer)
 
 
@@ -115,689 +124,6 @@ import cStringIO
 
 def getWizardData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00}\x00\x00\x00\xfa\x08\x06\
-\x00\x00\x00\x8c5HE\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00 \
-\x00IDATx\x9c\xec\x9dy\x9cdUy\xf7\xbf\xe7\xdc\xbd\x96\xdegzVfe`\x86u\xd8WY\
-\x14\x90M\x10\x11D\x11W4\x89Fc\xe4M\xd4\xa8\xd1\x88\x91D\r\x1a\xb7\x98\x98\
-\xa8o\xd4\x08\xae\x08\x18EDE@\x04E\xf6}\xf6\xadgz\xaf\xae\xedn\xe7\xbc\x7f\
-\x9c[\xd5\xd53=\xc3$\x8c\xd0\xf3v\xff>\x9f\xea\xea\xbau\xebn\xbf\xf3<\xe79\
-\xcfr\x8e\xf8\xe4\'?\xa9\x99\xc1\xb4\xc15\xd7\\\x83\r\xf0\xc0\x03\x0f\xbc\
-\xd8\xd72\x83\x17\x00\xdf\xbe\xe1Fq\xcd5\xd7h\xbb\xb1\xe1[\xdf\xfa\xd6\x8by=\
-3x\x01\xf0\xed\x1bn\x04@\xbe\xc8\xd71\x83\x17\x013\xa4OC\xcc\x90>\r1C\xfa4\
-\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\
-\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\
-\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\
-\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\
-\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\
-\x103\xa4OC\xcc\x90>\ra?\xf7.S\x05j\xa7\xcf\xbb\xb6\xd7\xddM})P-\xbf\x97\xcd\
-w\xdd\xfc~\xb2\xe3\xb7\x9eG\x81V\xd9\x19D\xf6#9\xf1\x1aZO.&\xb9\x18\xd1\xf2\
-\xeb\xc9.\xb4\xe5\xd0\x8d\xf7\x89\x87T\x13\xf7\xc9\xce\xbd\xf3i\x9b\xf7\xa1\
-\x15\x88\xc9\xe9\xddOHW@\xda\xf2\xb9q\xe7r\xc2MON\x9bB\xa2\x10\xc4\xd9\x1e6`\
-\xa1\xb3o\xccQT\xd60tF\xae\xccN!\x18\'\xbd\xde\xf2\x9d\x95\x1dg\x92\x07\xaf[\
-64\xfe\x97\xa0\x859\xbbl\xec\xa3v\xfaa\xa4\xc1\x12\xe0\x8c\xef\x9ff\xbbY\x80\
-\xa5Ss\xfeD\x83\x10 ]\xb4\xcc\xae:\xdb\x14\x85u\xa4N\xf0<\x07t\x0c\xa20\xe9\
-\x13\xd9OH\x87]%u\xf2oa\\ 4*k\x1ez\xc2\x1e\r\xc2\xc7\x05G\xeet\x04\x05\xda\
-\xca\xa4\xb9\xf1\xbde\x9e,\xd2H\x90\xb0\x98\x8c;!\x0cI\xe6\xe0\x89aD\x02\x08\
-\xf4\xce\x8f\xbb\xd1(\x04`7~\xd8\xd0J\x12\x8d R \xe2\x98\xbcT 5H\x1b\xa4h^\
-\xb9\x06\x94\x80z\xa8\xf1\x1c\x1fGj\xd2$\xc4\x92\xbb\xef\xb9\xf7#\xd2w&f\xd7\
-o\x1bhH\x94yo\xfc\xc6\xa5\xf1\xe0\x1bD\xb5\xeegag\x92\xdc\xd0"v\x93M-$\xc8`\
-\xc2\xefZ\x05\xba\x01A\x82 F\x93"D\x84$E\x88\x86v\xf1\xb1\xd0\x08\xb2\xc6\
-\xd4P"\x8d\x83\xc8\x04D\n*F\xa5)JZ\xd8\xb6\x87\x94\x16\x96g\x83\xca$]+\xe2zJ\
-\xa4b\xb4t\xb0}\x1b\x04\xd8\x9e \x05R\x04\xca\xf2\xd1)\x14w\xc3\xfb~D:d\xca1\
-{\x9f\xfc\x8e\x04\x99\xc0\xa0\xb0\x9a\xf4\x8cKY\xabdN8\x82nl\x91\x93\xf6\xcf\
-\x91\x98\xd8\xc1\xec|U\x13\x8f\xdch\\2kt\x12\x81\x06\x92\x96\xe3\xb6\x9c]$\
-\xa8z\x19)\x15\xb8\x16\xd2\xb2\x91\xd84\x0c\x810V\xb8\xae\xd3<\x8b\xb0M/\xa0\
-Z\xce\xaa\x80zj4\x8d+\xd9#\xb3\xfb\r\xe9:\x93@\xb1\xd3\xf6\x9d?\x1b\x8e[\x1f\
-\x87\xc1\xcej\xb8\xf5\xf7\xb2\xf5\x0b\xbd\xd3;\xe6A\xb6jbh4\xac\xf1&(\xb2\
-\x06#qv9\x911\x0fB n\xd9\xa0\x0c\xf1\xd9Ae>\xa0A\xa3i0\xc6n\xd0\x02\x12GRJ \
-\x95`\xc9\xac\x8fo9\xbe\x02*U\xd8\xb8i\x1b###tuu1\xff\x80^\xda\xbcIn\x98\xfd\
-\x86\xf4\xbd\x18Y6\xc8n<\xd0\xe6\x937\xca\xbbU\x9dC\x0bY\x93\x11\xde\xd8\xa1\
-y\\\x1ar\xd7\xfc\x9d\xd5\xd8eg=\xbf\x13\xe1\xbaq,\xb1\xd3=\x08\x89F\xa2\x04\
-\xe6\x1d\x9b\x88\xc4\xd8iXXB \xb2k\x8e\x05Tm\xd3d$F_lZ\x17\xf3\xe4\xc3\x0f\
-\xf0\xd8\xc3\x0f\xd0\xb7e\x1d\xe5\x91!.\xbe\xe8B.\xbe\xf0\x02\xda\x0b\xd6n\
-\xb5\x12\xec7\xa4\xc3\xee\x89o\xe9\xe7w?f\x9b\xf0\xef8\xd9\x8d\xe1Mv\xfcV\
-\xb5\xa1\xc9\xfax@Il\xdd\xf2\xb0Z\x89nj\x95\x16\xa3O\xec\xfa\xafi<\x99\xf4\
-\xe24\xc7\x12\x8d\xf7\x10\x00;k\x04\x06\xe5\x10\xb6\xf7\xc1\xd6Q\xb8\xeb\xe9\
-ml\x19\x1ef\xe33O\xb2y\xcdcD#}\xcciw9b\xf9B\x0e?\xe4P\xae~\xc3\x15\xb4\x07\
-\x0e\xb6HI\xaa\x15r\xbe\x0f\xb2U\x1f\x8cc?"}o\xd1h\x04\xc20\xab\'6\x16\xa3\
-\x8a\x13 \x1d\'\xb59\xe6\xb6h\x92\'\x94y\xa9l\x18\xa7\xedI\x1aUf\x9d\x8bL\
-\xb34U\x819F\x9a\xd9\x01\xa6\x8b\xb5@\x0b\xb4\xb0\x891dG\x18\xb2\x13\xa0?\
-\x86M[S\x1e{\xeaY\x9exr-\x9b7\xf532P\xa1R\x8e\x18K,\xca\xb9"\xb1\x10\x88\xa8\
-\x84\xabl\x16.Z\xc6\xe9G\xaf\xe2\xd5\xe7\x9e\xc2\x91K\x0bx\x80\xd7\xb8\x7fK\
-\x82\xae\x01\xfb\xf9\x90m\x97\xbe{\xb7;\xecl\xc7\x9bm\xf5(\xc2w]\xc2p\x0c\
-\xdf\x95f\x1c\xab\x12P\nl\x1f\xa4\x83q\x81\x88\x89G\x91\nR\x05:1d\x8a\x86\
-\xd2m4\x18\xd5\xb4\xc6+\xd5\x1a^\xae\x8d\xc1J\x85B>O\x04\xd44\x14\x04\xe4\
-\x91\xa4\x11\x8cE\x1a\xbf(\xd8R\x82\xdf<\xd4\xc7\xedw\xdf\xc7#k\xd61X\xa9\
-\x93\x08\x9b0\x11D1\xd8V\x8e\xc0mC\xdb6\xd54\xc2\xb2]\x92h\x0cG\xa7\xac\\\
-\xb1\x8c\xd7]x&\x17\x9f\xd2C\x0e\xa8\xd7\xa0\x18`\xeeIG\xec\xde\xe44\xd8oH\
-\xdf\x1b(\x05J)\xb46"i\xdb6B\x18\xbb\xd9q]@\x19)\x17"s^\xa4\x18\tU\x90jb)QBd\
-t\n\xa4\x16\xc6\x95c\x8f\xabI\x9di\x84\xc68?\xd3\x19D@\x92\xf3\xa8\x01:\x9fg\
-\x04\xd8Q\x87\x8d\x9b\xca<\xf3\xd0\xef\x91\x03\x9bx\xd7\x9f\\I\xe0\x19\xe9\
-\x969\xf8\xc2W\xbf\xc3\xc6\xa1*\xa9\x97g8tHq\xb0\xfd\x80\xa0\xadH\x12\x0bv\
-\x94C\x84V\x14\x02\x97\xda\xe0f\x8a~\xc2KO9\x8e\xb7^y\x06\x07\xf7\x18\x034\
-\xaaAOn\x12\xaf\xe3\x1e\xa4d\xff!}\xa2\xcf\xb4e\xf3\xb8d\x0bI\xd3)\xd1\xb4\
-\xdf5\xa4\x99W,\xd2\x8a\x9c\xe7\xd3\xe8A\x8d\xd4\x02\xc2&\xc4%\x15\xb2\xd9\
-\xc7\x02XB\x90f\x8f(!#\x96\xf1.=e\\M?\xb5\x06\xd6m\x1e\xe0\xb1\'\xd7\xb1nc\
-\x1fO?\xb3\x1e\xe9\xfa(m1\xb8\xeea\xbe\xf0\x81\xd7S\xaaA)\x821\x05\xff\xf9\
-\x83\x87\xd98\x10\xe2v\x1f\xc0h\xa4\xc9\xe5<\xeaI\x8a\xd6\x82\x18\x1bK\x82\
-\xe3iD*\xf0\xa8q\xf8\x01\x05.;\xffd^~\xd6\xa1t\xb9\x868W\x80\x93\x83\xb8^\
-\xc7\xf62\x0f\xa1t\x19\xb7\\&\xc7\xfeCz\x03\x13\xfc\xcf\x06\n\xa8\xd5C\x10\
-\x16\x96ec\xb7v\xbfb\xdc\xa5\x19\'\x16\x81\x03B%\xe3\xbf\xb4l\xd2\xd4#\xb1lB\
-\xa0\x8e!\xb2q\x1a/{/\x01\xdb\x87a\xe3\x96:k7la\xdd\xc6\xed\xac\xd9\xb4\x95\
-\r\x9b\xfb\x19\x18.#\x1c\x9f(\x11X\xd2\xa3\xad\xb3\x8b\xb1\xb4\x83\x9c\xc8\
-\x11F1G\x1c\x7f&\xe7_p4\x0eP\x08`\xcdZ\xf8\xfe-?\x03\xa7H-\xb6(\x8d\x96!/\
-\xc0\xb2 \rI*#t\xe4\x02\x0e9\xf0\x00\x0e9\xe8 \x96\xcf\xf29\xe7\x88v\x96\xf4\
-@\xde5\xd7\x13\xd7S\xb4N\xb0\x02\xc78o\xa0\xe91L\x91\xa4\x18w\xd4d\xd8\xffH\
-\x87I\x89\xf7}\xaf\xe9\xa1\x0fS\x9a\x8d\xbd\xe1\xf4J\x00\x1c#E\x8e\xc8\x91VK\
-\xd8\xb9<H\x8fjj\xc8.\x01C\x11\x0c\x96\xa0\xaf\x0f\xd6\xaeY\xcb\xfa\'\x1fc\
-\xf3\xb6a\x9e\xd9P\xa7\x96\xfa\xc4\x1a\xb4\xe5 \xbd\x1c\xca\x0e\x88\xd4\x01D\
-~\x82\x9f\x0b\x08+\xa3H\xa1H\xeb)a\x1a\x11\x96C|Wr\xc5U\xafaL\x81-\xe1\xd9M\
-\xf0\xb1O\xfc3\xb1\x16T\xeb\x11\xa9\x8e\xe8\x9e\xddK=\x0e\xe9l\x0f8\xfa\x88\
-\x838\xe4\xc0\x85Twl\xa6o\xe3\xb3\xac\xe8\xacp\xd9\xcbz\x99\xef\x80\xa74Q\
-\xb5\x8e\x1bx\xb8\x9e&\xac\xd4Ij1\xb6\xefg\xcfc\x9c\xf0=\xad\xbb\xb6\xff\x90\
->\x89zou\x89\xb6\xc6\xc0\xa45\xd1KU\x8f\xc1\xf1!V0:\xa2\x98\xdfe\x11\xe9\x1c\
-\xb6\xf6\x88\x04\x8c\xc5\xf0\xf1\xcf\xdc\xcc\x9a\xfe*Ol\x1ab\xdbp\x19\xa5\
-\x149\xd7\xa1\xe0YH\xe9\x93x\xb3I\x94G\xac\x04\x89\xb0H\xa5\x8d\xd2\xb69\xab\
-L\xa8%\x80\xeda\xb9\x16\xae\x15\x91ss\xc8\xa4\xca\xca\x15\x8b9s\xb5i|)p\xeb\
-\xed?\xe3\x91\'\x9e$\xd7s A\x10\xd0\xb3`\x01\x0b\x96-\xe3\xa4\x13\x172\xb0\
-\xbd\xca\x03\xf7\xdc\xc67o\xfb:g\x1e\xb7\x8a\xbf~\xeb\xe5,\xea4\x12\xab\xeb\
-\x11x\x127pH\xc3\x1a\x96e\xe1\xe5\xf3\x00\xd4jU\x82\\\xa1\xd9\xd5\xed\xd9a\
-\xbd?\x91\xfe\x1c\x08\x13\x8c\x07U\x8eG6c\x05\xa52\x8cU\xe1w\x8f\xad\'\xac\
-\xd5\xa9\xecX\xc7;\xdfr.\xb6\xef\x11i\xa3\xca\xcb\x11\xfc\xe0\'wSq\xbbH\xfcY\
-\x04\xdds\xf0\xfd\x00tB\xbdZ"\xac\x8d!\xdda\x12K\x92Z\x0e\xb1\xb4A8\x803\xee\
-t\x11\n\xe9(\xe2\xd2\x10\x92\x10\x9dT\xe8is\xb9\xf4\xa5\'\xe3c\xba\x89\xbb\
-\x1ex\x8a[~|\x0b\xc7\x1cw4+\x8fz)\x87\x1e\xb3\x98\xa7\xd6\xc1\x1f\x1e|\x8c\
-\xcf}\xea\xdf\x98\xdd&9\xf3\x84\x83\xf9\xf8\x9f}\x88\xc3\x16\xd8\x88z\r\xbfV\
-%\x08|\x94\xe3\x92*\x0b\xcb\x12X\xbe\xa1-M5B\x08\x82\\\x9b\xb9\x04\xc8\\\xcf\
-0\x1eQ\xdc\x15\x93lm\x98*\xd9a\xf4\xf3h\x17B\x8d\x8f\x93[%U\xb4^\xd8\xc4KiHh\
-CE5=ir|\xef\xc66\xd5\xb2\xef\xb3[C\xfa\x06\x86Y\xb3~\x0b\xeb\xd6of\xeb\xb6\
-\x1d\xf4\x0f\x8eR*U(\xd7b\x84\x9d#\x8d#t}\x84K_{.s\x03\x9a\x1e/\xed\x80\xdf9\
-\x87\x9ah\'T\x1e\xd5jL\xa9j\xa2Z\x16\x02\xcb\xf1\x11B\xa1\x85BK\xc5\xb8\x0f=\
-\xc9\x1c.\x1a\x92:mmyjcezr\x16A\xa4X>\xbb\xc0\xa5\xa7xh\x8c\xb17&:\xf9\xd8\
-\xa7?\xcb\x83\x0fo\xe4\xde\xdf=\xc1\xf7n\xfa\x11\xe5\xb1*s\xe6t\xf2\xfa\x0bN\
-\xe6e\xa7\x1c\xcaQK \x07\xb8h\x02_e!\xb42\xd2\x9fE\x9ay\xf0\x1b\xae i\x8dG\
-\xda&\xf4vZ\xed\xe4j\x9c\x88I\x18\xadS+\xf5\x13\xb4u\x9a\xa7\x11+\x90.qX\xc3\
-q\x1c\xb0\xed\x89$\xa6\xb1\x19+9\xce\xc4\xc34\x9d\x16\r\x96$$\nt\x089\x87zX\
-\xc6\xf7\xbd\xe6-\x84\xf5\x08\xcf\xcb14\x92\x90\xef4FU5\xfb6\x02b\r\xfd\x03\
-\xb0q\x8bb\xd3\xe6\xadl\xee\xdb\xce\x86-[\xd8\xb8e\x07\xdb\x07\x86I-3\xe4I\
-\x85\x8b\xd6\x0e\xa9\xf0Q\x14\x8cq\x17\x80\xadS|\x1f\xea\xf6\x08\x1b\xab0+\
-\x00\'5\xb6S\xa5\nc*\xa2\xee\x08\xa4c\x91\x92\xdd\xb7\xd2\xa4\x96\xc0q\x8b\
-\xe4,\x9fr\xb5N\x12\xa6\xe0f\x11\x0f\x9d\x00\t\xc2\xd1\x14r\x16#\x1b\x1ea\
-\xf9\xfcY8\xb5a\xda\xa9\xf1\xc1\xb7\xfc\x19\x1d\t\x945|\xe5\xc7\xdb\xb9\xfd\
-\xfe\x87x\xfa\xf1\xc7\xb1\x89\t\x1c\xc5\xbcN\x8fs^y\x06\xaf:\xefx\xe6w\x185\
-\xeeb\x0emi\r\xda5B\xe7\x18\x15&E\xab\xaf\x7fw\xd8\xf3pmr\xd2\xb5"h+\x00)i=F\
-Z\xdd\xa0\xc0\t\x82\xa6\xcb1\x8d\x12\x94RH)\x91\xb6\x8d\xd8\x99p\x1aWe\xa1\
-\xb5y6q\x15\xbc\xbc$J\x03,\x01\xa9\xe5\x91 \xb3\xc0\x81\x8d\xed;\x94cp:m\x1e\
-\xdb\n\xf7=\xbe\x9d5[w\xb0cd\x98\x07\x1f\x7f\x92\xa1\xe1\x1aa\xa2\x89\x12\r\
-\xc2A:>J:\x84\xa9K\x98\xce\xc6q\xf3(lt6\x866\xc1\x8c,\x14\xa2S<\x15\x92\x88\
-\x94\x9a\xcc1\x10\x92Y\xb7\x11\x12\xd7\xd8\x00\x96$L5:\x8a\xc0\xb5\x91\xb96\
-\xa4\x94\x88\xa4J\x12%\x0c\x8dV\x10\x96\x8b\x1bxX\x96&Ik\xc4\xe1($\x15$!\xb6\
-/9\xe2\xc0\xf9\x1c\xb2t!\xe7\x9dv*\xa7\xaf\x0ep1\xae\xd4k\xaf\xbf\x95\xef\
-\xdc\xfd4\xe4;\x11B\xe2\xdb\x92\xd3O<\x82\xab.=\x9bU\x0bhz\xd3LzG2\xae\xe2\
-\xb4e\x04O\xb4<\xd2=\x12\xdeB\xfc\xff\x88t,\xd2Ha9\x0e2(\xa2\xb4D\x0b(\x95\
-\xc6\xb0\x1d\x85\xeb{\xd8\x9e\x8bF6;\x82\x18\xe3\xc0L1\t J\x9b8\xbf\xc4\xb8"\
-\x95\x03\xa2\xc3\xec[Q\xc6C\xd8\x19\x04\xa4\x80EL\x14\xc3\xc3On\xe0o\xae\xfd\
-<\xc3\xaa\x8b2\x05\x06*\x11N\x90\xa3\xad\xdd\xa7\x16\xa6DV\x8e\xc4\x92h\xc7A\
-K\x0f!=\xb4\xf4A\xd9\xd8\xbe \x8e3/\x94H\x91$\x08\x1d\x9b+\x14)B$h\x99\x12\
-\x93\xa0\xec\x1aC\x95\x86\xf2\t1\x8a\x14t\x9cP\xc8\xe7\xf1\xbdv\xa2\xd4\xa6T\
-IH\xc2\x9a\xb1\x87\x1d\t\xf9<\xaeoc\'U\xc2\xd1\x1dX\xd1(+f\x179\xee\xf0\xc38\
-x\xd9B\x0e_u K\x96\xc0C\x8f\x86<\xfa\xd43\x14f\x1f\xca\xfc\xf9\xf0\x85o>\xc1\
--\xf7>\x86\xa5\x13\xba\x04\x9c\xf9\xd2\x13y\xcd\xabN`Yo\x96$\xa3L(t\xe7\xc8\
-\x19\x8d\x86\xfb\xdc\x0c\xff\x8f\xb1+\xe9J#\xdd\x80\x08\x9b\x14\x17%`\xf3vX\
-\xd0[\x04\x8c[\xa3\xc2\xf8P\xa8\xd1\xc35-h\x01\x89\x80\xb2\x82\xad\xdb\x15\
-\x1b\xd6od\xeb\x8e\n\x8f=1\xc4\xb6\xbe\x01|_Q\xf4k|\xfa#WR\x04\x02\x1c\\\x07\
-\x0e9l\x11\x1d\x0b\x0e\xe2\xee\xfb6RX\xb8\x84\xb0\xdd&\x12\x82\xca\xe8\x08\
-\x96\xe5!\xdc\x1cJ\xbahe\x11k\tI\x16\x96\xd4\x99w\xdbvi\xf8\xc2\x15`i\x85 \
-\xc5R\x86x-\x14\x89V`[\x0c\x8fVQ\xe4\x8c\xe7N@\x1c\xa6\xf8\xaeK-\xac18ZC%\
-\x0e\x8e_ \x97\x0f\xf0dB\xaa\xea\xa4n\x85\xf2\xd80\x9ecq\xd6)\xab\xb9\xf8\
-\x9ccY\xb5\x0c\xfa7\xc1\xe3\x0f\xaf\xe5_\xbf\xf4\x9fl\xdc\xbc\x89TH\xbe\xf4\
-\xd5\xf7\x91\xcb\xc3\'\xbft\x1f7\xdd\xfa\xdf\xf4\x14s\\\xf6\xb23\xb8\xfc\xdc\
-\x13Y2\xcf<\xbb\xb0\x06\xb9\xc0\x0c\xe3\x06\xb6\x0f1\xaf\xb7\xab%\xa6\xcfN\
-\xf1\xf6?6\xe9\x96c\xe2\xb3J"\xa5!\xb9\xad\x17\x06ScLI1\xee\x8d\x1a\xac\xc0\
-\xb6~\x18\x1c\x89x\xec\xc9g\xd9\xd6?\xc8\x9aM[\xd8\xda\xb7\x83R\xa5F\xaa\x05\
-\x08\x0b%|:\xe7\xae`\xc3\xfa!\xda\xf2\x1a/\x1d\xe0\xee\x87\x868\xfb\x88.\x12\
-m2\x85F+p\xe69\x17\xf2\xcbM?\xa6\xe6t\x91\xc6\x02\xb7\xad@4\x9c\x82NI*\x0eX\
-\xbe\xb1)l\x99\x89\x87\x00\xdb1\x07\xa8\xd6\xccU\xa5\xc6x\xd4\xa9m\xd4\xbbv\
-\x10J\x81%\xd0i\x88\xe3\nF\x86B$9,\xed\x9b\xe0G=\xa4^\x19\xc5o\xeb\xa43\x9f#\
-\x8e4\xb5x\x8c4\x1eF\x11\xe3\x881\xce;i5\xa7\x9dq\x11\xc7\x1d\xe2R\x03~~\'|\
-\xe8\x1f\xefe\xed\xba\xadDaB\x14\xa6X\xf4\xf0\xe9\x7f|\x1b\xddy\xf8\xfa\x7f\
-\xfd\x81_|\xf7\x8b\xbc\xf3u\x97p\xc5+_\xc1\xb2Nsyv\n\x8e\x05E\x17\xa2\xb1\
-\x18\xc7s\x987\xab\xab%N\xd4 }\\\x90\x1aMa_q\xbf\x0b\xe9\x89\x82XZHiS\x03\
-\x9e\xd8\x92\xc5o7E\x0c\x0e\x0c\xb1i\xcbV6n\xddF\xdf\xc00\xa3\xa5\n\x95zB=Q\
-\xe0\xfa$Z\x92`\xa1\xadnd\xe0\xa1\xb4 JS\xa2\x04J\x1b\x07 \xd7A)\xad\x90\x17\
-yn\xf8\xe1m\xbc\xec\x88\xd7\xe0d\xb1\xeaYy8\xf5\x84^\xe6\xfc\xb0\x9b5[F\xc0i\
-#\xaaE\x90@\xd0\xdeI\xb9&\xd1"\x1b\x17\xa7\n\x92\xba1 E\x96\x15\xe8f\xca13\
-\x1e\x95e\x11)3`\xb7\xb4\xc2C b\x85\xeb\xd9\x8c\x0c\x8c!\xe8D\xe2\x98\x04\n\
-\xad\t<\x97rRg\xa4RFk\xcd\xbc\xf9\x0b9\xe5\xe4\xe39\xeb\xb4y\xacZ`\x0e\xfd\
-\xdb\xdf\x0f\xf3\xc1\xeb~\xc6\x83\x8f\xaeed\xccBY9\x90\x05\xa4\xb0(\x14\xbb\
-\xb9\xfa\xaa\x0b9j\x05|\xee\xf3\xbfbx\xeb\xa3\xfc\xfc\x86\x7f\xa1\xb7\xd3\
-\xa1\xcdR\x08\xa5Qq\x8c%$\x8e4n57\xe7Ld\xb6\xa5\xd3\x9e,\xffn_a\x17\xd2\x85t\
-PH"`\xfd(\xfc\xf5G>\xc7\xe6\xed5\xea\xa9\x0b\xc2EH\x1b--\x94\xb4\xd0\xf8\xc4\
-Z\x92h\x89\'\x0b\xc4\x1ab%P\t\x90\xd8Y\x9fd\x81\xa3\xc0\xad\xd3\xde\x99\xa7V\
-\x95\xe4l\x87\x87\x1e\x7f\x96\xdb\xefz\x86\xd7\x9cr \xb6N\xb0\x84\xcd\x1c\
-\x17\xce>\xfe`\xbeq\xdb\x1fH\xf3\x01\xd50\x81(\xa4\x16V\xd1\xb6\x9b\r\x01\
-\x95I:\xd1\n\x07\x10Z R\x8d\xaa\'&\x94)e\xa6\x92\xa4\xe94\x85 M4Bid\x92`\xa5\
-\x16\xa5\xc1a,\x0e\xc0B\xa0\x05x\x8e\x8b\xef\xfb,]y8\'\x9dx<\xc7\x9f`3;\x075\
-\xe0\xae_\x0e\xf1o_\xb9\x83\xc7\xd7m\xa5\x16\x83\x14\x1e\xbe\xd7\x85\xdd&(\
-\x97*X\xc9 m\x81\xc79\'\x1c\xcf%g\xc2\xb3\x0f\xa7\xbc\xe9\x15\xa7r\xe0\xfc\
-\xd3(ZP/\xf7\xe1\x15r\xe6z\xbc,\xf6\x1a\xd7M\xc3u<v\xee\xc9\x1b\xe3\xaf?BW\
-\xbe{\xd25PU\t\x15i\xb3}(dc\xdf\x00V~\x01R\xe4\x89\x85\x87V\x90jE\xaaMF\xa9\
-\x906\xc2\xb2)\xc7\tH\x1b\xe1\xd8\x08a\x99\xfeR7\xee@c;\x92\xd1\xfe\x1d\xa0S\
-\xc6|\x89R\x1e\xdf\xbb\xf5W\\z\xca\x81\xd8\xb1"\t+\xcc.\xe6\xb9\xfaU+\xb8\
-\xf9\'w\xb0\xb9\xaf\x0c~7^{\'q\x9a\x18\x89N\xe3,\xb6\r\xae\xd48B#u\x8a\x16\
-\x1a\xad5If\xb1\xa7\xcd\xfc\xb2\xcc\x18"\xc1\x11\t\xe81\xac4$\xac\x0c\x98\
-\x1b\x95\t\x02\x1b\xcfs\xf8\xfa\xd7\xde\x8b\xb6\xa1\x94\xc0\x9dw\xc3On\xff\
-\x15\xeb\x9e}\n+)!\xbd\x1c\x83tBl,\xae$\xb5\x10a\x05W\x8fq@O\x91C\x16w\xf3w\
-\xefX\x89\x03,9\xdc\xc2V\x10HP\xe1\x18\x85|\xc1$5\xca,\x04\x9b&\xa6\x8f\xb4]\
-P\x19\xe1I\xc6\xc4N\x03n\x89B5\xd5\xc0\xbe\xf3\xa3\xedr$\x05\xf8\x99j\x7fv\
-\xcd::\xba{\xd8<\\\'\xc9\x07\x84I\x16\x9dr\xb2\x9f\xa5\x11\xd8\x8a \xb0\xa0\
-\x1a\x03\xa1q\x056.\xbey\x03)\xc9H\x89\xe2\xac^\xc6*\x11\xf58&\x8a\x03\x9e\
-\xdd^\xe7\xa6_<\xc1\xa5g\xac\xc4\xb3lT\x0cK\np\xf1\xa9\xab\xb8\xf1\x97O0\x10\
-\x8f\xa1\x9c.T\xea\xc0X\x84W(\xa0uLT\x1b%t \xe8\xcc\xa3I)\x8d\x8e -\x10B \
-\xb0\xf0\xb4\x83T.:\x15$\xb1\xc6J\xca\xf8n\x15\xcf\x1b!\xc8\x179\xe2\xd0\xa3\
-\xb0t\x02\xa2\x8a\xa4\x8db\x11~\xf5 |\xef\x8e\'\xf8\xc3CO\x90*A\xac%q\xadH \
-\x1d,\xbf\x13T\x07\xe4|`\x8c(\x1d\xc1\xaa\x0f\xd3\xa6\x868\xe3\x88\xc5\xbc\
-\xe7\xcd\x172\x0b\xf0P\xc6\xb0\x14\nR\x89t\x023\xce\x16\xc6\x85\xa4Q\x08+K\
-\xd4\xd0r|d\xe50\xd1y\x95\xa5~\tT\x96\xe8\xd5`f/\xd2\xc6\xfe7\xa4\x9b\x8b\
-\x968\xc0\xdc9\xb3\x19\x1d\x1a\xc4\xcb\xcd\'t\xbcq\x07\x8c\x94F\xf2\x92\x04\
-\x92\x88Z\xb9d\xbc\x1c\x00\xc4\xd9\r\x8c{\xdb\xa4V\x88\x9cO\xa5n\x86HX.:\xef\
-\xb2v\xa8\x8f\x9b\xefy\x9aSOXI\x87\x96\xe4|\xf0\x81W\x9fs"\xb7\xdf\xfb0\xa3Q\
-\x88\xf0\x02b\x95\xd0\xd6\xe5\x13U\xcb\x08\xa9i\xef\xea\xa0\x1a\xd7\x18\xd9\
-\xbe\x03l\x81\xd7\xd5\x0eI\x84\x8e\xebx2\xc5S\t\xb5\xd1\xad$\xd5\x1aK\xe7\
-\xccc\xc5\xaaE\xac8x\x01g_\xb0\x8a\xdeb\xc3\x01\x12C\\\xa3\x9c\xd8\xdc\xf3\
-\xdbM\xbc\xf7c\xdf\xc6\xed=\x84Z5!\xad\xc6\xb8\xddsi\xebj\'\x1c\xd9Ne\xb8\n\
-\xb3z!\x89!\xa9b\xa7c\x1c~\xd0\x02\xdep\xf1\xe5\\|\xf2B\xda\x01c\xde\xc5Y\
-\xb6\x8dm\x98\xd4Y\x9f-%\xa9\x90\xa4Y~,\x183\xa4\x99\xb65A@\x1a<4\xbel\x06z\
-\x9f\'\xd5\xe3\xd8\x8d\xce\xd0\xd8\x08\x96.\xe8\xc2\xd61\xa9V$ue,\xe5F\x02\
-\xa2\x94&\xf1^H\xd3GY\xc6h\x92Z \xb2\xa1\x90\xcc\xd2\x91\x94\xb0\xd1\xb6\x8b\
-\x8a1\x16x\x02\xa2\xbd\x97j%\xe1\x96\xfb\xb7r\xd2\xfdc\\\xf1\x92"hc\x9b\x1d\
-\xba\xcc\xe1\x94\xa3W\xb1\xe9\x97O\x12bAm\x8cR8\x8a\xd45\x94v\t\xcb\x1e\xc2.\
-`\xb5-@\x0bIRMpH\xb0b\r\xe10\xedm\x82W\x9eu\x14\xe7\x9fy\x12\x07/\xcf\xa1$X\
-\x1e\xac/\xc1\xadw\x8e2\xf0\xec\xef\xf8\xe8kO\xa6\xcd+\x1089\xfa\x06\x86\x99\
-;o!}\x89&\xd7\xd6\x8e\xd5\xe51Z\xa922R!\xb0S:\x9c\x94t\xe01T\\a\xc5\xf2\xf9\
-\x9cz\xc2I\x1c\xb1j\x01G\xae* \x80\x11@\x11\xe0b\x9b<V\x89q\xac\xb4D\x83\xb4\
-\x84$\xa3\xbc\xc1\xb1\x16\xe3!}\xa9w\xd3\x8fk\xd8%\xa9\xf2yb\x17\xd2m\x01u\
-\x15cI\x97\x9ev8r\xd5r~\xf5\xc8v(ta\xfcF\x1a\xa2\xd0\\\x8c\xef\x984#\xdb\xc9\
-2\x15\x1aw\xa8\xb2\xb4b\x95\xa5\xa9IT"\x8d\xe1\x92\nH4\x1a\x17\xd99\x8f\xd1\
-\x81\x88/\x7f\xf7\x0eN;\xf5"z\x04\xe8\n\xe4\np\xf9Eg\xf2\xe3{\x1eckm\x14\x02\
-\x17\x94C\xb1\x98\xc3q\\\xc2ZD\x1a\xd5\x90i\x88\x8e#\xa2\xea\x18+\x97/\xe1\
-\xd4\x13^\xce\xa9\'\xceb\xf1\x02\xe8q\x8dl\xf4\r\xc2\xe3O\xf7s\xdbo\x9e\xe6\
-\xb7\x0f?\xcd\xe0\xd8(\x87-\xc8\xe1\xbe\xf9\xa5$qH\x05X\xbba+\xa5j\x8d\xb0\
-\xae\t\xed\xd0\xe4\x98\xc5\x11N\xc1\xa1-\'H\xc7\x06\x99\x9b\x83\x8b\xcf9\x93\
-b\xde\xa6P\x80\x97\x1c^\xa0-\xcbP\xcd5\xf9\xb1H\x11H\xa4I\x89nI\x9f\xddY9\
-\xb7\xfa\xd0M\x8atK\x97\xde\xd4\xe8YU\xcd$\xa1\xe4}J\xbaQ91\x0e.\xbe\x86W\
-\x9c\xf5\x12\xee{\xe4[&\x7f\xcb\xf6\x11Bd\xbe\xe9\xd8T\x00H0J\xd9\x90\xac\
-\xb4)\xc8i\xcd\xd2j*z\xe9\x98\x84.\xdfC\x8f\x8d\x80\x90\x04\xb3\x96\xf0\xf0\
-\x13\x8f\xf0\xef\xdf\xdf\xc2\xbb_5\x9f\xae\x82!\xeb\xc8\xc5p\xf4\x8a\xd9l}`\
-\x0b\xd6\xec\x83Pr>\xa3\x83\xfdP\xed\x03;bv.a\xc5\xbc\x0e\xce;\xedX\xce:\xed\
-\x10fw\x8d\xfb\x10"\xe0W\x8f\xc1\x8d?\xba\x87\xdf?\xfa,\x89r\xa8\x8e\x85($Aq\
-!\xdb\x06\x87\x19\tA\x97\x14\x85Y \xed<q\xaa\xe9\x9c7\x87\x91\xe1~\x1cGr\xc0\
-\x8a\x05\xec\xd8\xb6\x96\x81\x1d\xeb9~\xd5R\xde\xf7\xe67\xf3\xab[o\xa2\xbbg\
-\x11\xaf:\xff(c*jh\x1708\xd0GoOwCqgn`#\xc9\xaa\x85\xe9\xc9\xd4\xea\x1e}\xe8\
-\xc0\x84\xc4\xce}D\xfc$\xd7\xa1\xb0\xb3\xf4@G\xc3K\x8e_\xc6\xd1+\x97\xf3\xf3\
-g\x86Q\xb1\x85t\x1c\x1c\xd71\xea*N\x8c\xcf5S\xed\x8d\x0bS;\x8f9\xa4\x04\xd73\
-\xdd\x80\xaa3\xcb\xf3\xe9\xdf\xb6\x03\x1d\xa7x\x07\x1eL\xad\xd0\xc3\xf7o\xbb\
-\x8b\xcb/\xbc\x9c\xceLBs\xc0k^~"\xf7<r#\xb5\xea\x16\xaa\xd5\x88y\xf3fs\xf4\
-\xaaS9\xe9\xa8\x15\x1c\xbb\xd2bI\x0f\x04\x8c\xf7v?\xbfw\x1b?\xfe\xe5\xfd<\
-\xb6\xae\x9fm%\x8b\xfe\xaa$\xd5>xy\x9c EJA\xe2\xbbHO#=(\xcc\n\x08\x81\x07\
-\x1e~\x8c\xd9\xbd\x8bY\xbbf\x03\x859\xddx\xae\xe0\xd9\xbb\x7f\xcd\xf2\xa3\
-\x0f\xe6m\x7f\xfeA\xe6\xb5\xd9|\xea\x13\x1f\xe4\xedW]\xc1Y\xa7\x1d\x86\x0bX\
-\xda\xa4+\xd9\x1a\xe6u\xf7d\x9eA\x00\x0bK(\x92,\x99\xa1\x91\r\xeb\xd0\xda+7\
-\x8a\x1a`\xd7D\x81F\xdc`\'Z\xfe\x98\x92\x0e\nG(\x14\ty\xcb\xc6/\xc2\xe5\xaf<\
-\x87G\xff\xed&\xb6T\x07Qa\x8am\xe5\xb0\x1c\x974\x8e\xd1\x02l\' I\x9b\x01\xbf\
-\xf1\x8e\xaa\x19\xf1\xc9\x8a\xeetBQ\xc6\x04\x95>:u\x95\x9a\xb4\xa8\x8d\x0e\
-\xe2\x17\x8b\xf4\x0fo\xe4\xa6[\x9fb\xfe\xcb\x0fd\x9e\x1f\xe2j\xc9\xd9G\x1f\
-\xc0\x95\xe7\x1c\xc7X\x04\x17\x9dv$\x07-k\xa3\xb38\x9e\xabV\x05\xeez\x10~y\
-\xf7}\xfc\xea\xb7\x0f\x80\x93g\xb4\x962X\x8a\xc1q(\xf6\xf4\xa0\xb1)\x97J\xc4\
-\xb6\xe9`\xc3\xea(#NJ\x04F\xda]\xa8\xc51k7nd\xf6\xf2\xd5\xec\xd8\xb4\x16\xab\
-\x90\xe3o\xae\xfd(K\x0f\x80\x9f|\xffn~w\xe7\xcd|\xf5\x0b\x1fa\xc1,\x1f\x91\
-\x19\xdd\xae0\xde\xb5\xfah\x15\xdf\x91\xe0\xdb\x99\xa3H\x83L\xb1E:\xa1\x1a\
-\xc6\x82\xac\x05d\x01a\xd1Z\\\x99\xa59\xa5\xae1\xf02\x9d\xaf[\x98\x17z\xdf\r\
-\xde\'!]"\xb1HU\x8c+m\x12\r/?\xa5\x8b\x1f\xdd;\x0fwC?[\xfaJ\x08R\x84\xce\xa3\
-\x89A\xd9\xa4"\x1d\'\xba9\xe4hI\xfe\x97\x02\xa2\x14\xa4\x83\x1b\xe4\x18\xd9\
-\xb1\x81\xae \xcf\x9cb;\xcf\xec\xd8\x84Wpq\xd3*\xb7\xfc\xe0{\xbc\xf3\xdc\x0f\
- \x85G\x1aV\xe9\xf4=\xdeu\xe5K(\x16\xc1\xcd\xdc\x97\x03\x11\xdc\xf5\x871~r\
-\xd7\x03\xfc\xfe\xa9\r\xec\x18\xaaPM!\x16.\xda\xb6I\xed\x0eh\xb3@\xa5\x8c\
-\x95C\x10%\x84\'\xd1q\x82\xdd\xddER\xaf\xa0\x92~$&\xdf\xac\n\x0c\xf4\xef\xa0\
-\xa7}\x05\x95\xe1m\xbc\xfd\xea7q\xe1\x05\xf0\xb3\x1f\xc3_\xbf\xfb\xb3\x9c\
-\xb4j>\xdf\xf8\x97\xeb\x98?\xdb\x1c\xd6\xce\x08\xac\xd7\x14\x05W\xe2\xb7\xe5\
-ZF+\x13+kdV\x9c\xd4,F\xcd\xde\x13=IT\x92\xf1G\xa8\xb5I\x8e\x10b\xcf,k\xad\
-\x9b\x99\xbf\x8d\xfd\x1b\x9f\x1b\xdb\xf6\x92t\x07)-\xdc\xacO\xb1\x84\x91\xaa\
-\xbf\xfd\xcbsx\xc3\xbb>\x8f\x1d\r\xe1\x06s\x88\x1b\xe3M\xaf\x88\x96\x05\xa3\
-\xe6\xa3(;\x84c:\xb3\xd48lp\x02s*\x1d3\xa8\xa0\xadk\x01\xe5\xb0Dep\x0b\xb3\
-\xad\x84\xbcR\xac>d1\xe7\x9ev,\x96\x80\x10\xc9`I0\xdb\x87\xf9E\x18\x0ba\xc3\
-\xa0\xe6\xab\xdf\xbd\x9d\x1f\xde\xb3\x96\xedQ\x11\x95\xef!\xa1\x17\x9cQ\xa4]\
-G\x08H\xb5@[\x018y\xa8W\xa1:\x08N\x9d|\xb1H\x19\x1b\xe9\x17`\xc7v\xba\xba,\
-\xbc\x10\xda\x1d\xd8\xbc5&G\xca\xeaUs\xb9\xfa\xbd\xaf`\xf3\x08\xfc\xc5{oc\
-\xeb\x9aG9xn\x8e\xeb>p)\x07\xb4\x8d\x9755\x0c//\x90M\x12\x1b\xf9i;[\xd9\xa2\
-\xf5\x01?G\xdf\xfe\xbf\xc1d\r\xa3\xf1Y)\xf5?!\xdd\xa8\xe8V\xd5\xe4\x02\xdd\
-\x12\xde\xf7\xa7o\xe5\x9a\x0f\xff\x03a\x181T\x1e\x00\x7f\x16\x08\x1bj\x11\
-\xe4\xf2\xe0{\xc84E\xa5!\x12\x8d\xe5X(\x95\x92\xd6\x86 \x8d\xb0\xf3.V\xbdDyd\
-\x1b\xbd\x05\xc9KO_\xcd\xb9\xa7\x9f\xc8\xaa\x03\x1d|\x0b\xba\x0b0:\n\xbe\x07\
-\x1d\xb3\xf3$@R\x8fy\xe4\x91\xb5\xbc\xfd\xfd\x9f\xc5?\xe0\x18\xd6\x0f\x01\
-\x9d\x9d\xa0\x02\x88k\xa0$\x85\xf6N\xc2J\t)-T\x14\x9a\xc4\xb8\\\x80=g.Vm;\
-\xe5\x1d\x03P\x9cEt\xff\xfd\xc8\x85]ty\x92.\x17\xa8%T#\xc1G?\xf1i\x96\xac\
-\xb4\xf8\xd1m\xc3\\\xff\x95o\xe0\xb8\x16\x9d^\xcag\xae\xfd\x13:]c\xa6\xee6\
-\xe0\xb1oGS/\x08\xf6\xaa\xd1I\xa0\x08\x1c<\xc7\xe7\x03\xef|\x0f\x9f\xfa\xd27\
-\xb1;\xbb\x19S9\xac\\\x07\xa3\xa5\xbaIF\x93\x1a\xdbQ8D\xa4a\x15\x15W\xf1,(\
-\xfa)\xbe\x18\xa0\xd7s8\xe9\xd4c8\xef\xec\xd7pp\x16\xc4P\x98\x86\xa5\x81Q`\
-\xfd\xd0\x18\xbf\xbe\xff).~\xd91$qL\xbb/8\xfa\xd8\x83Xt\xe8\xa9<S\n\x08zSB+D\
-\t\x05i\x1d\x11\x85DC)\x8e\xe3\x92*\xc0\x89\xc1\x11@\x95\xa4\x1c\x93\xc4\x16\
-\xf8\xb3\x90\xae\x8b{\xf0"r\xd10\xb5\x91\xed\x0c\x0eV\xe9\xe9\xca1{)\xdc\xf1\
-k\xf8\xfbk\xbe\xcb\x86\r\x1b\x98\xdb\xddEyp\x0b\xef\x7f\xd7\x9b\xe8\xb4 \x10\
-{ \xbc\x05i\x9abY\xfb\xce\x81\xf2\xc7\xc4^\x91\xeed\xdd\xc4\xe2N\xc8\x1f\xdb\
-\xc6\xba\xb5\xa7\xf2\x99\xaf~\x1f\xb7{\x01\xa5r\t\xd7/\xd0\xd6\x9d\xa3V\x1aD\
-\xc6U\x8a\xae\xc2\xf5\xeb\x14:m\x0e9h9\xc7\x1d\xbe\x84\x0bN_Jo~\xbchO`\xba\
-\x8d\xe1\x14\x1e{&\xe4\xc1G\x1e\xe7\xe7\xbf\xb8\x83\xca\xe80\xfd\xdb\xd6Q\
-\xaa\\\xcdU\x17\x9d\xde\xac\xf7z\xef\xfb\xae\xe0\x92\xb7}\x15\xdd\x96G\xd5k`\
-[XB\xd2Y,P+UH\x13\x81\xf4]p]\xe3\x9fO#\xd0\x02\xcb\xb1\t,(\x97\x07\xc9\x17\
-\x1d\x866\xaf\xe5\xb4c\x97\xd2\xd9\x9dc,\x86/\xdc\xbc\x85/}\xff\x97\xa8(DhI2\
-\xb6\x83W\x9f}<\x97\xbfl>\x05\x8c\xd5])W)\x14r\x93?\x9c\x0cS\x8d\xf4=\xd9\
-\x03{E\xba\x00t\xa5N[\xdeG\xe4\xe0]o:\x14%\xeb|\xf7\'\xbfF\xfb\x8ajT\x82J\
-\x8c\x9b\x96\x99U\xb09\xea\xf0e\xbc\xf4\xd4c9\xe6\xf0\x85\xcc\xca\x19\x97\
-\x8e\x93@:\x16\xe2\xe6=\xa4\x84\xa7\xfa\xe0\x87?\xbd\x97_?\xf0$\x83UM\xdfP\
-\x19\xcb\n\x08\xdc\x1c\xb3\x97\xcc\xe5[\xdf\xbb\x9b\xf3\xcf>\x9d@A\x90\x87Es\
-`\xd5\x8a\x05<\xf0\xf4:\x8a\xdd\xbd\x94\xab!i\x12\xa3}P\xbe&\xd6\n\xe9\xb8&\
-\xb9\xa2\x12\x82kS\xec\xca\xe1\xd6G\x18\xda\xbe\x91\xce\xce\x02VX\xe6\xeb_\
-\xf88g\x1cl\x0c\xe9\xba\x05Oo\xafR.\x0b\xe6,ZLi\xc3\x83\x9c\xba\xfa >\xf6\
-\xce\xb3\x08\x07\xab\xf8]\x86\xe8B~\xcf\x84\x03\xb8\xee\xeeJ\x0b\xa6\x1e\xf6\
-\xd2\xa6H\xf0\xac* \xc8I\x8f\x04x\xfb\x95\xc7\xb0f\xcd\x83\xfc\xfe\xf1g\x98\
-\xd3\xd9\xc51\xc7\x1c\xc5\x19/9\x91c\x0f)\xd0(\xaf\xf70\xaa\xb1\x86\xc9%\xac\
-[\x1ew\xdc\xb3\x9e[\x7f\xfe\x1b\x1e^\xbb\x9d\x92\xca1\x1c{\x0c\x0e\x878\x9d\
-\xf3q\x1c\x87\xc1\x91~FD\x9dy\xf96n\xfa\xc9\x1a^\x7f\xd12J5\xf0\x02\xf8\xdb\
-\xf7\x9c\xc5\x1b\xff\xfcK8Z\x10\n\x8f\xc4\xf1\x19\xacU!\x8e\xf1\xbb\xda\xa8\
-\x97\xab\xa0\x03hk\x87\xb0\xcc\xd8\xda\xa7\xc8\xbb\x15\x96\xf5\x16Y\xbct\x11\
-\x7f}\xcd\xd9\x04\xc0wnz\x94KO=\x948\x80{\x1f|\x0c\n\x05\xfa\xd6=\xc3l\'\xe1\
--W\\@\x00\xb4w\xb8\x10\x97Mq\xa30\xc9\xc5\xff\xbf`\xefH\x17\x1a|\tz\x8cz\xad\
-D.7\x0b\xe9\xc0\x97\xaf}+w>\xb8\x9e\x13\x8e\\\xdc\xdcUc\xaaE\x1c\x8c\x1a\xdf\
-0\x1a\xf3\xe8\xa3\xeb\xb9\xe5\xd6\xfbX\xbba\x98\xbe\x81\x11\xf0\xda\x91\xb9\
-\xd9Tt\x8e\x98<\xf4\x16\x89\xcb5b7 7\xbb\x8b\xb1\xcdOS\t$_\xfa\xfa\x0fY}\xd8\
-{9|\xb9)0=a>\x9cv\xc8B~\xfa\xbb\x8d\xa4\xb9y\x88\xf6N\xa8h\xc8\x07\xd4\x85\
-\x03\xaa\x0eR\xd1i\x01i\r\xe9\xa5\x1c\x7f\xc4R^z\xc6I\x9cs\xc6\\\xb6\x94\xe0\
-\xc3\x7f\x7f#\xb5\x81\x8d\xbc\xf9\xa2C\xd9T\x02t\x0c\x952\x8b\xe7\x15\xb8\
-\xf6\x1do\xe1\xa8\xa56n\xac!-\x83cS\x1d\x19!\xd7\xd9\xb3\xcf\x1f\xfc\x8b\x89\
-\xbd\x94ta\xf4\xa1\xed\x92\x0f\xac,\xc6+\t\xeb1g\x1f\xb9\x98jb\xb2\x98\x1aS`\
-\x85\x11\xdc\xf1\xc0Fn\xfd\xc5\xafy\xf8\x89\xb5\x94"\x97\xaa\xee@8=\xa8Ys\
-\x88\x12L$\xca\xce\x83]0\xc1\x89B\x11$TGFi_\xb0\x98\x91\xe1\r\xb4[\x01_\xf9\
-\xf6\x1d\\\xfbWg\xb2\xc0\x85\x91\x11\xc5\xbb\xdex\x01\x0f<\xfeyv81\xb5$6\xd3\
-4tuC\xdf&\x9c\x9ev\xfcz\x85\xe15O\xb0pV\x1b\xaf~\xf5\xb9\xbc\xf2\xc2\xe5\xcc\
-i\x87_\xfcA\xf3\x91\x8f\xff#\x96\x17\xb0\xa0\xab\xc3\x14\x1d>;\xcc\xf6\xf5O0\
-\xe7\x80\xa5\xbc\xf1\xbc\x938\xfbp;SK\xb1q\x19\xc7)\xb9\xce.j\xf5\x90 \xd8\
-\xcd\\\x1eS\x14\xa6\x06\x7fr\x7f\xc0^\x92n\x83\xdd\x91\x1dl\xdc\xad\xd8\xe3\
-\x9b\xa8[\xce2\xdd\xe8\x1f\x1e\xde\xc2\xb7~\xf83\xee{r3e\xab\x8b\xe1\xd4\xa7\
-"\x0fF\xe5\n\x10V\xc0r\x8c\xcbV\xa6\x99w*\x02Q6\xe3\xdbJ\x05:\xda\xc1\xae0Z\
-\x1d\xa5\xa7\xbb\xc0\xf6-\xfd\xdc\xbf\xf6\x19\xfe\xfb\xce\x83\xb8\xec\xc8\
-\xb9\xcc\xee\x94\xd0\x06\xab\x0f\x9f\xc5\x9dkK\xd4\x12\t\x85\x1e(\xa7`\xe7\
-\xc8\x87\x15D\xe9Y\x8e[\xd5\xce\xdb\xdf>^\xd7\xda\x00\x00 \x00IDATt%/9\xb6@\
-\x7f\x15\xfe\xe9+O\xf0\xfd\x9bo\xc2o\xefd\xc3\xf6\x11\x0e=\xec\x08"`\xa0o\
-\x0b\xf9h\x07\x97\x9e|\x0e\x7f~\xd1\x12\xda\x00\xdb\xcf&\x1a\xc0\x03O\xa2\
-\x85\xc4\xdd\xcf\x08\x070s\xdcLN\xfa^\x8d2\x1b\x89\x90\t&Hf\xf2\xce\xc0R\xe6\
-e+(H\xf8\xd5m\xbf`\xfd\x9a\xcdD\x91\xc7\xb6AEd-@yK\x81^(\xce1N\x1a!\xc1s\xc1\
-\xb3L.t}\x04\xc2a\xc8\t,+\x04\x99\x80\x8a\xa9#H\x82\x02\xcf\x0e\x96\xb9\xe1\
-\xc7?\xc7-Hv\xf4W\xd1\n\xfe\xeeo.G\xd6w\xd0\x11\xc4\xb0c\x1d\xae\x88\tt\rF\
-\xb6\xf0\x96W\x9f\xcd\x97\xaf\xffSN?\xb6\xc0\xe3\x1b\xe0\xef?\xf3[\xbe\xf3\
-\xdfw\xa3\xbdN\x06\xcb\t\x9d\xf3\x96!\x83NB\xe0\xee_\xde\xc6\x15\xe7\x9d\xca\
-\x9b/:\x9ev\xc0V\x15PY\xa2\x88\xb4\xb3\x18\xf8x\x1a\xfa\xfe\x85h\xb7\xdf\xec\
-\xb5k!my\xa9\xe6h`\xbc\xc4G\xa5\xf0\xa1\x0f\\\xc9Y/;\x83|>\xc7\xac\xd9s\x88\
-\xb4\x00\xe1A52\x81\xf2j\x19\xc6F\xa1V\xc6K*8I\x05WU\x08D\x84\x1dUp\xc3\xd0x\
-\xf0\xf0\x08S\x1f\xa7m>8\xb3\xb8\xef\xe9~\xae\xff\xd6]\xf8sr\xd4S\xe8\xb4\
-\xe1\xdc\x13V\xd3\x9d\x0c\xd0]\xac\xe0\x0e=\xcci+;\xf8\x8fO\xbe\x9b\xb7\\v\
-\x14\xed\x1e\xdcy\x7f\x85\xbf\xf9\xc4\xd7\xf8\xc9\xef\x9e\xa0\xec\xcfB\xe5\
-\xbb)G\x92r"\xb0\x1c\x17\x12hs\x15o\xb9\xf4\\\x0e\xea\x06K\x95AU\xcd\x1df^\
-\xc8\x98\xf1.k\x7fC\x9a\xec\x03\xd2\'B\x81\x88A\x86F\x8d\xc8\x1a\x8eg\xb4\
-\xe2\x9f\xbe\xf5d^{\xd9\xb9xv\x85\xb6\xa0\x0e\xd5\xcd\xe0\xa7Y\x0c\xde\x04\
-\x96e\xb5\x8a,W\xc8%\x8a\x82\xb0\xc9i\x0b]OH\xea1\x8e\x95\x03+O\\V\xc4*\xc0n\
-[\x88,\xce\xe5\xcb?\xf8\x19\x0fo59\xf5I\n\xef\xbb\xfa\xe5\xe8\xadOrX\xaf\xe4\
-\xcas\x8f\xe6C\xd7\x9c\xc3A\xcb\xa1\xe0\xc2\x7f}\xe7I\xde\xf3\xfe\xeb\xd88\
-\x10\xa2\xf2\xdd\xd4\xb1\x19\t5^{\x0fq\xa9B{!\xc0Vp\xc5\xc5\xe7q\xd8\xb26\
-\x920+\xc3\x990\x9b\x83\xc1\xfe\'\xe1\x06\xd2\xde\xfd0s/\xfbt\x85\xd5\xc8\
-\xf1\xca\x1e\x8a6s\x13fQ#\xb3\x8fR\x82j\xd5\xe3\xaaK\x96\xd2\xb5\xa0\x83\x8f\
-~\xf6k`\x07DI;I\x1a\xe0{yl\xcb!\xa9\x8c\x81\x8aq\xa5\x8bR\x16\xb5z\x8a\xe7uP\
-\x8b\x04\xe0\x99. \xac@\xaaIr\x16Z\xe4\x19\xf5\xba\xf8\xc4\x7f\xdc\xc4\xbf|\
-\xf0"\xf2\xc0\xac\x02\xbc\xeb\xf2\xf3Yr\xf8*\x8e:v\x11!\xd0W\x85\xbf\xfc\xe8\
-\x0fx\xe0\xa1\xb5\x14{\x0fg0\xc18k\xc6J$qJ\xd0\xdd\x89\xd0\x8a\xde\xbcC^\xc3\
-\xc9G\xaf\xa2\x02hG\x80\xf4\x8c6B\x820\x81\x92?V\n\xf2\x0b\x81\x88\x80\xddY"\
-{%\xe9f\x94\xaa\xb2)\xed$f\x1eDS0\xa8\xb3W\n\xb8\x96Ew\xce\xc2\x03.8\xae\x8b\
-\xaf\\\xf7.\x0e\xed\x8d\xe8T\xdbP\xd5a\xa2Z\x9d8J\xd1\xc2\xc1rrh\xdb\'\xc6\
-\xa1\xa6$\xd2+\xa2\x95DG\xb1\x89\xca\x15r&e8\xae\x91\x86!i~\x16\xf7<\xbe\x9e\
-\x1f\xfed\xa3\xb1\'\xca\xf0\xee7\x9d\xcbK\x8f]D\n\xdc\xfd\x84\xe6m\x7f\xf5\r\
-\xee||\x0b\x03\xa2\x8d-\xa5\x10\xa7\xd8\x8e\xaaW!\x08 \xdf\xc6\xd8H\t_\xa4\
-\xe4\xa8\x1b\xdf\xbb\x0e\xa9D&6\x14\x11\x80\xcc\x9b\x94m\xad\x10\x848Y\x94l\
-\x7fDy\x0f\xf2\xbcw\xea]KH\x1dH\x02P\x1eB{h<R\x02"\xf2D\xe4\x19\xaeh\x14\x0e\
-\x1am\n\xf2\x14\x9c\xb8\xd0\xe6[\x9f|7\xa7\x1d2\x97\x05\x0b\xba\x08\x1d(\x87\
-e\xca\x16D\x81\xcb\x88\x80\x92\x05\xba\xad@YG\x10X\xe0& \xc6p\xbc\x1aA\xae\
-\x86\xef\x0c\x82]\'J}\xca\x91\xcbm\xb7\xdf\x8cH\xc0\xf7\xc6 \xae04\x04\xff\
-\xfe\xcd\x07\xb9\xfa\xff\xfc3\x9b\xc2Nj\x85y\xf8\x0b\x17S\\0\x8b\xd1\xbe\x8d\
-P)C\xa4p\x82"\x841\x81\x8cY\xb9\xb0\x0b\xa1b\xd01\x910\xe1\xd52P\xc73\x01$RP\
-!B\x87\xcf1{\xcb\xd4E\xf8\xdc99{\x81F\xdaN\xa6\xf3v.\x7fn\xcb\x17\x10H,e<qm\
-\xd2\x10\xef\xd7k\xfc\xf3\x87_\xcbY\xc7\x1e\xc0\xb2\xd9 t\x19\xd7J\xd0\x96m2\
-o\xd2\x04r\x0e$\x15\xc8K\xc8I\x88*\xc4\xe5\x01\xd2\xea\x00"\x19\xa2 +\xf8\
-\xf1\x18\xc7\x1f\xb8\x84O]\xfb\x0e|\x07T\x14\x83\xeb\xa2\x1d\xf8\xef\x9f\xde\
-F\xb1\xd0\xc5\xd8H\nv;\xb5\xb1\x1a\xa3\x83\xdb\xa1\xb3\x00\xf9\x0eP\x82\xb8<\
-L\xbe\xd3f\xe9\xbc6N=\xae\x83\xc6\xfc\xed9g\xdc\xd7f,u\xcbH{\x16&\xb5&\x95\
-\xf6F\x177n\xdcN\xb5n\xc0\xdf\xc3w{Ozc^\xbdl~L)\xcc(\xd0\xce^\x8d\xff\x1d\
-\xd9\x98%\xd5\x94\x9b\xcdj\x0f(\x02\xff\xf0\x96\xa3x\xc7Y\x0b9\xa2+\xc1\x1e\
-\xddN\\\xa9`\xb5\xb5CG\x01\xa2\x12\x144\xd4\x06\xa1V\xc1w\x1c\xe6\xb4u\xa1+U\
-\\"\xda\x19\xe5\x9a\xf3\x8e\xe4\xcb\x7f\xf9r\xe6\xfa0R\x85\x11\xa7\x8b\x92p\
-\xf0\x8b\xf0\'\x7fz\x19jp\x03\x8b|\x9bB%\x85\x8a\xc6\xebn\x83\xda\x18\xe4:\
-\x8d)^\xde\xcc\xc2\xb6\x903NZE\xff\x08\x84\xb6G"\\\n@\x1b&=\xcb\x06blR\xf2 r\
-\xe6\xaet\x8a\xd0I37\xa45\xd5\xc9d\xfa\x8f[\xf9S\t\xb9\xc6\x0cZ\x93`\xefHo\
-\xc9\xeal\xfc\xdf\xd8\xd4\xc8\x0c\x11{x\xb9(\xf2*\xe2\xed\x17\xac\xe6\x1f\
-\xfe\xeaj\xce8r)A<B:\xda\x07\xe1\x88\t\xd8[\xc2$_T\xabx\x96\xa4\x7f\xd3zf\
-\x05\x16\x0b\x8b\x16\xd7\xfd\xd5\xdb\xb9\xf2\xac#X\xdemB\xf7k\xfb\xe1\xbd\
-\x1f\xffO\x9e\x1e6\x93\x03\x9d}\xe2b.?\xf74\xca[\xd7\xe0*\x10\xd2&,Ua\xee\\\
-\x18+A{\x9e\xb6\x0e\x0f\xea\x83\xcc\xed\xca\xd3\xd1n\xc8\nS\x93\xff\xeek\xd3\
-\x7f7\x885s\xc3I\x9a\xd3\x7f\xb7d\xa34*l\x9a\x1f\x99z\x84\x03\xc8\xe7M\xfa\
-\xf3\x84\x00<iS\x1a\x1c\xe5\xb8\x95\x0e\x9f\xfb\xbb\x0bx\xfb\xabN\xa6S\x0cBy\
-\x00\xd7\xb1a\xb4\x0e\x91\xc0\x9b\xbb\x80\xd1\xd2(]m\x16G/\x9f\xcd-\xff\xfan\
-\xceY\xdd\xc9\xc2y0\x96\xc2-\xf7\x0e\xf1\x86\xbf\xba\x8e[\xef{\x86O|\xee\xbb\
-\x04@\xbd\x0eW^z*\x9d\xf9\x147\x9fe\x96\xe5\xbba\xa4\x0ev\x82\x15\x0e"\xa3*\
-\'\x9fx\x02C\x03\xfd\xe4\x84I\xf4\xb1\xa5\x95\xa5\x1c\xa7H\x93\xc3:i\xdd\x01\
-\xd9\x04\x84\xe3\x9fu#\xe7u\xf2\xfd\xa7\x00\xd4n\xbcq\xf0\x82\xd9(\x92$\x8e\
-\x99\xd3\xddNA@\x8f\x03\xef~\xfdJ\xaey\xc3\x05\xcc\xcb\xa7Dk\x1f\x07Kc\x17|\
-\xc2\xd2\x0e<\'\xe4\xca\xcb\xce\xe3s\xd7\xbe\nQ\x86<F\xfa\xfe\xed\xbb\x0f\
-\xf0\xa1\xeb\xbfB_\xdc\x86\xecY\xcem\xf7<\xce}\x8f\x85\x14}Xz\x00\\\xf4\x8a\
-\xd3)W\xb6\xe0\xb4\xdbf&\x84\xe1\n\xdd\xed\x01\xe9\xd8v\x1c\x12^{\xf9\t\xfc\
-\xfe\xfe\xfb\x01c\x93\xb8\x96d\x8f\xae\x97\x9d\x18U\x13\xfeSMM7\x15\r\xbd\
-\xf8E\']\x83my\x10kl\r\x81\x86 \x86\xab/\\\xc6g\xde\xff\x0eN\\\xb5\x88|\xb5\
-\x8f\xceh\x07\xf3sU\xae\xfb\xc0\xd5\xbc\xf5\xd5\x07\xa0\x80\xb6\x02\x94\xea\
-\xf0\xb5\x9b\x1f\xe7\xdfo\xba\x9d~U@t/f t\xf1\xba\x16\xf3w\xff\xf0\x15\xfa\
-\x86\xcdi.\xbf\xe2H\x82\xa0D\xc1\xab\xc2\x8e~D{\x0f\xb2V"\xa7\xab\x9c\xf9\
-\x92S\xb0$\x94F\x86M\x97#M\x86:il\xca\xae\xd0M\x1fDv\xc9\x19\xb2\x9c\xb3\xe6\
-G\x9d}\x99\xcdx\x91\xed\xa1\xd4\xd4R\xf2\xbb,\x1d\xd2\x82\x17\xac\x91F5S\xad\
-Y+\x8f\x10\x87%\xda\x1d#\xc1\xc7.\xb2\xf8\xd6\'\xaf\xe0\x1d\x17\x9c\xc8\x11\
-\x1d\x117\\\xff&.\\\r\x8d\xa5q\xaa\xc0\xbf}\xef>>\xf1\x95o\xb3\xa9*Y\xb0\xf2\
-(F\x9fXKj\xe7\x19\x8b]\xb6\x95|>\xfd\xa5\xbb(\x01\x9dyx\xfdk\xcf\xa6>\xf2\
-\x0c\x9e+\x08\xc2\x98x\xb8\x9f\xee\xb6\x1cW\xbd\xf6X\xbes\xc3}\x1c|\xe0\x8aq\
-\xe9\xd4\x8dt\xe4\xd6\x9a\xb1q\x8c\x13\xbf\xf3cjH\xban\xaaxg\x1f\x97\x1e=_\
-\xa4{\x18O\xbc`Wj;f\xad\x11\xbf\xd8\x86\xeb{\x94+C\xc8$fQ\x0e\xe6\xc6\xf0\
-\xfeKN\xe0\'\xd7_\xcd\x812\xa4\x07S\xc40\x9a\xc2\xb5\xffz?\x1f\xfe\xd2\x0f\
-\x18t\xe7"f/a\xfd3\x1bpV\x1e\x86\x9b/\x10)\x8f\x8a\xe8\xe5\xee\xc7w\xf0\xc3_\
-\x0c1\x00\xbc\xe1\xc2U\x1c\x7fp7\xf3\x83\x145\xd8\x87\'SN9\xe9D\xe6v\xc2\xbd\
-\xf7\xdc\xc3\xa2E\x8b\x80\xcc6\xd3\x1a3\'\xba!\xbd\xd1\xaf\xef\xf2\x88Z;m\
-\xdd\xfa\xae\xa6\xec8\xde\xdb\'\xe3\xf4\xe7\tag\x05\nqL\xa8"\x8a\xf9\x00\xdf\
-V\x888\xc5\x93\xd0\xe1\x87XI\x8d\xd9\xb9\x1a\x05j\x08\r\x1f\xbf\xeek|\xe9\
-\xff~\x87E\x87\x9fD\x12t\x10\xd6\x12h\xef$V\x9ah\xd36\n]s(\xa7\x01\x9bG\x14\
-\xd7\xff\xeb\xd7\x19(\x19\xed\xf0\xb6\xd7\xbf\x8a\xda\x8eMty\x82\xae\xc0\xe6\
-\x95\xe7\x1f\xcd\x86m`9\x81\x99p7+\xb85\xde7\x9aD\x8a]\x94z\x86\ts\xc6\x8b\t\
-U\xb9\x12\x85T\x8a8\x8e\xff\x88O\xef\x7f\x0e\x97\xdd_\xcf\x0bB\xba\x16\xd9,S\
-\x12\x1c\xc7\xc3\x95.\xb2\x11\xa1\x93\xcad\xaf\x10\x9by\xc7t\x8cV!?\xff\xe9m\
-<\xf9\xe4\xe3\xd8\xb6M\xa9T2\x95\xa0(c\xaa\xc7\t\xcc\xea\xa5\\\xae\x83W\x00\
-\xbf\x00^\x9e/~\xf9\xbf\x18Tp\xf4\x81\x1d\x9cu\xfa\xc9x\xaa\xc6\xb1\x87.\xe3\
-\xb0\xc5\xf0\xe0\x83\x83l\xeb\xebg\xfe\xc2\xc5(\xc0u \tC\xe3o\xdf\xc3rV{k\
-\x9a;\x93M\xab\xf6"\xa2^\x19\xd8\xedw/\x98\xa47\xc2\xb1\xa6\x0f43?5EL\nSK\
-\xec\x14@\x06h\xe9s\xc6\x19g\xf0\xbew\xff\x19\xaf8\xed(j}O\xa1\x867c\xcb\x14\
-+\xe7\x9b\xf1V\xaa!\xc8\xe3\xe5\x1dR\x15R.Wx\xe4\xd1\xa7\xf9\xf5o\x9e \x01\
-\xdez\xf5\xc9\xb4\xb7\xb9\xbc\xee\x92\x97\x91\xc6p\xef\xbd\xf7\xa2\x84G\xef\
-\xfcN,a\xe4\xd4\xf6\xf2 mT\xad\x96]\xa5\x98\\]O\x14\xfb\xf1\xe2\x06hv\x08SM\
-\xd2\x0b\xf6\xee\xa9}\xc1\xe6\x86m\\\x82\xdd\x9c\x16_e\xb5\xba\xa6\x0e$\x05\
-\x12\x0b\x12<"\xa0\xcd\x83\xb3\x8fY\xcc\xbc \xcf\xc1\xbd>\xdf\xbc\xedN\x94\
-\xdb\xce\xa6\xda\x08\xa8"t\xcc\x81\xb1\x12\xe1\xf0\x00\xb3{}\xca\xfduB\x0b\
-\xbe\xf8\xd5\x9bYu\xf8J\x96\xf5\xc0\x9b\xdf\xf6\x06\x8e]\x01}\xa3\xf0\xe0\
-\x03\x0fPS6\xdb\xb6\xa7\x1c4\xcf\xa2\xd0\x1c\x8eI\xa3\x8a\xb4\xdc;\xa9n\x96m\
-\x99\xdfj\x00\xadQj\x8aE\xdd\xe5T\xe8\xd3i\xf8\xb8uK\r\xafefi\xb0\xa0\xa4\
-\x8d\xa5\x9e\xa51\x00\xc6\x87\x7f\xca!\xb3\xf8\xdb?\xbb\x80\xf7]u!\xc1\xd8V\
-\x18\xde\x82\xd7\x93\xb9X\xc3*N\xb7O\xa5\xbc\x83 \xc8\x13%\x01\xa3\x95\x80\
-\xf7\x7f\xe4\x87\xc4\xc09g\xe7q\x81;o\xfb5ZX\x08\xb7\xc0m\xbf\xbc\x8b0\xcb\
-\xd6\xaaE\x1a\xb0\x90\xb9\xfcs<\x8a\x9d\t5\x8e\xe6\xd6A\x9e\xe7M\xad\x94\xaa\
-ZR\xdc\xedw/\x98G\xae\xa1\xd6\r\xe1.\x86R\xb7\x99\xa5b\xd9\xe3\x93\xeb[\x8c\
-\xe7\xca\x0b]\xc3\xd55\xae:\xffT\xde\xf3\xba\x8bX>\'G\xb8\xe1qS\xd1\xd8\xe5\
-\x12G;PVB\xa8l\x84=\x0b\xd7_\xcc\x93\x0f\xae\xe5\x86\x1f\x0f`\x03C\x031w\xdc\
-\xfe3\xa4\x9b\xa3\xd09\x8b\x07\x1f~\x92j\x9c\x15]$\x98\xeb\xc1\x9e\xa0\xb2\'\
-b\'\xc2\x9b\xd5\xa3V6-\xe9\xc4B\xc2\xa9\x02\xb9\x07;\xe5\x05\x92t\x13\x9f\
-\xceRj1\xe1\x19\x0f\x84\x89\xc3\x0b\x146f\xdc\x9e\xc7\xe4\xdc\xb9\xdaT\xa9"\
-\x14Im\x8c\x9cT\xbc\xf1\xa2\xd5\xfc\xc5U\xafd^\xb7\x84\x91\x8dP\x1d\x00\xaa\
-\x90\xf7\xa8\xc9\x02\xb1\xecbxX3{\xc12n\xbe\xe9\xbfP@W\x8f\xc3\x8aU\x873:V\
-\xa5\x16C\x7f\xa9\xc2\xc3\x8f\xd5I\x01\'\x10\x99\x05\x9fi\x9f=\\\x7f#\x88d\
-\xd0\x90\xf4,\xc26\x05I\xdfS\xb5\xcd\x0bF\xba\x91c\x93O\x97\xca,\xedI\x98\
-\xef\\\xaa\xe4T?yJ\xe4SE!\xc2,b\x0cD\xe4!\xd7\x03R\x12\x8d\xc2e\xa7\xcf\xe6\
-\xb3\x1f|\x0b\xf3;\x81\xda\x00]\x8b\xe7S+WP\xf9\xb9TF-\xda\xf3\xb3\xa9\xf4\
-\x0f\xb0j\xe9,\x06\x06+\xa4\xc0\x85\x97]\xca\x8aC\x8ff\xb8TCaq\xcb\xad?\xa5\
-\x9a\xad\xdf\x93*\xcd\x1e\xe7`\x9d\x8cKm\xdc2\x8d\xcc\x9a\xc8q\xa6\\\x9f>\
-\x05$}\x1c-3\xd3\xb4\xcc\xc3\xa2\xcc?*\x06\x1d\x9a\xb5D]c\xf1\x9b\xc9\xb8$\
-\x90P\xc8k\\\r\'/\x83\xaf~\xfc\r\x1c\xbf\xa2\x97\xa1{\xee\xa0\xd8\xde\x85.\
-\x83\xd5>\x8f(L\xb1-X\xbet6\x0b\xba\xf3<\xb5\xb5F\xef\\x\xcd\x15\xe7\xe0\xd9\
-)\xbeg\xf3\x9b\xdf\xdeK\x98\x18)\x1d\x1e\x8b\xd0\xc2Fc\xd3X\x19a\xbc;\xca\
-\xd2\xa1[\'\x01\xda\xa9\x814#\x8dS\xa8\x8e\r\xa6\x04\xe9\x12\x13\xd6w\xccR\
-\xd3\xc2\x14\x96\x9a\x95\xd0$\xc6\xff\xd6\x06\xa2\x90\xe5\xc6\x9b\x9f4\xf2\
-\xeb]b\xb0\xca\xc4\xaa\x1ft\x8d<p|\x0f|\xe8\x923\xb9\xfc\xd4\xe3\xb1\x9ey\
-\x96\x0e\x02\xa8*,K\x10tx\xf4,\xe8$\x02n\xfe\xd5]\xfc\xfc\xfe2g\x1f\x03\xc7\
-\x1d1\x9f\xa8\xda\x8f\xe3\n~\xf7\x87~\xb6\x8fA\xd0\xe1\xed\x12\x13\xb7\xb2Y\
-\xa4Q1\xa8\x08\xd24K\xa1j\xdc\x8b)\xe5\xce:)s\x1f{\x1a\xebO1\xbc\x80\xa47\
-\xd2-&\xc6\xda\xc7\xa9\xf5L\xba\xb4\xb0\'\xc4\xec\x9bk\x9a\xa6\x11\x9ek\x13H\
-IX\xab\x91\xd7p\xceQ]\xbc\xed\x15gr\xce\xd1\xab\x10\xa5\xedt\xe5$c\xa5m\xf4\
-\xf5\xad\xe5\xf8\xe3V\xa3\x81\xce\xde%\xfc\xed\xb5\x9f\xe2\xa15\xf0\xb67\x9d\
-\xcb\xbc9\xb3\xf0\x1c\x97\xdb\xee\xf8\x05\xf9\xa2\xe9pF\xab\xe3\xdag\xc2<``\
-\xaey\x17\xbf\xfa\xb8Fh\xcd\'\x98J\xa8V\xab\xbb\xfdn?i\x9e\x02c\xe2\x05\x80G\
-!\x08\x8c\xdd%\xe1\xa8\xa3\xe7\xf2\x17\x7f\xfeJ\x96-r\t\xc7\x9ebi\xaf\xcd\
-\xa2\xde\x02s-\x18N\x14k\xd7\x0e\x90\xaa\x02\xff\xfe\x1f71\x7f\x01\x9cw\xde\
-\xf9\x8c\x8c\x8e\xf1\xfb\xfb\x7f\x8f\x85I\xa7.\xe6\xc6U\xba\xc9\x8a\xc9\x0c<\
-\xe9\x19\xa7\x91t\xd8o\x1eU\x86=\x95a\xed\x1fw\xa2m @\x87\x13\x17\xbc\x1f\
-\xab&\xd8\x16\xac8\x00\xfe\xe6//\xe4\xc8\xe5yF\xb7>\xc8\x81s\x8b8\xc0,[22\
-\xa8h\xebX\xc4\x1f\x1ez\x86\xcf|\xfe>.\xb9h1\x8b\x96\x1c\x08\xc2\xe2\xde\xfb\
-\xfbQ\xe9xL\\dG7v\x84m\x82\xa7\x99\x0by\x8f\xc6\xfd\x14\xc4\x9e\xea\xd3\xf7\
-\x13\xd2\x81T"\xa4\x83\xc4\xcc.\x12+\xc8\xe7l\\\x11"I9\xe1`x\xff;_\xc1\xca\
-\xb9\x82\xa3W\xcc\xc6\xc5t&]]\x07\xb0~\xf3\x08nn\x16?\xbb\xf3>~z\x17|\xf4\
-\xef\xff\x84HI~\xff\xc0\xc3\xc6\xed\xae\x1bj:\xcdV;\xd2\x13VWl]\x95q\xbf\x81\
-~\xd1\r\xb9\xe7\t\x8dYN"{\xf2\x96\x05\xa96\xf2n\x11b\xa9Qr\xc01\xcb\xe1\xba\
-\xf7_\xcd\xc5g\x1c\x83E\xcah\x05vl\x1f\xa2\xd81\x87\x9av)v\xcf\xe7\xba\xeb\
-\xff\x85\x91\x1a\\\xf2\x9a\xab\xf8\xcd\xef\x1e\xa4Z3\x06\xfax\xaaD\xd2X\x05\
-\x06\xd87\xd9\xae:s\xd36^i\x9a6_\r\x84aH\x9a\xa6\xcd1\x7f\xeb\xfe\x90\x90\
-\x00\xa126H\xe3\x15)\xbdk\xad]\xe3\xc3\x1e\xfc\x06\xfb\x07\xe9`\xae4m1\t-A-2\
-\xab9\x14\xa5\xc4\'!\x1d+s\xfc\xc1s9b\xc9\x1c\xda\xd1\xcc\xc9\xc3\xe6-\x1b\
-\xf1\x82\x1ca"\x19\xa8(B+\xcf\xbb\xfe\xfa\xffr\xd6+VP\x8e-\xd6o\xa9\xb5<\x85\
-F\\ \xc6"\xdeg\xb1\xf2\xc6T_\r\x95\xdb\x98\x15J\x08\x01\xf51\x08\xcbx\x0eX"A\
-\xc4uD\x1a"E\xb6\x18\xb0NM\xe1\r\x1aK\xea\tF\xb0Nc\x928B\x00a\xbd\x8eNU\xebI\
-\xf7\xf8(\xa7>\xb2j\'\x04\xd4\xc2\x908\x1b\\\xe5\xdd<\x16.\xa4\x1a\x11W\xe8-\
-z\xa4\xe5\x11\x02+!\xae\x0fa\x03\xed\x05\xc1Xe\x00\xcb\xcf\x91\x96cd\xd0I\
-\xea\x16\xf9\xcc\xbf<\xc2\xd5\xef\xfa\x0b~\xfc\x8b{vJa6K\xe9\n\xa2\xac\xa2g\
-\xdfX\xe7\x96e\x91\xa6)q\x1c7\xbdwJ)3\x8d\xba#\xcc\xf00\x8e\xb24\xf3F\x94\
-\xc2FH\x07!m\xacl\xe6Y\xadb\xd2$D\xa2\xf0\x1c\x1b\xcf\xb1\x89\xe3\x10\xdf\
-\xf3\x9b\xc3F\x9d$\xa8=D\xfd\xf6\x0f\xd2\xc1<u[\xe1y`\xb5\xa4)\xa1< \x87#\
-\x03\xd0\xe0\x05\x01\xc4!\x05\xdfexx\x84\xa5\x0b\x8b\x946=\x8a\xd2\x11\x08\
-\x9bz\xac\xa9&\x92\x9bo\xbf\x8bu\xdb\xeb\x88\xa0\xab\xb9p}sA\xc0Z\x15#\xed!\
-\xd5\x91a\xf6\x85\xed\xae\xb5FJ\x89\xe7yMG\x8e\x94\rG\x8f4\xa3\x05\xc76A\x08\
-\x04\x08\xdbL\xa4,\xc6\xed\t\x81\xc6\x96\x02\xd7\xb6\x18_:[\xe18\x16f\x1dw\
-\xb3\xa7\xb0m\xe4\x1e\xe2\xfb\xfb\t\xe9\xd9\r\xc9\x18M\x8cl\xa8^\x8d\x99\xd1\
-By\xd9{f\x87\x0b\x01\xa4t\xb7\xbb\x1c\xb7z1\xe7_|\x06\x1d\x81\xce\x86\xdc\
-\x02ay\xb4\xcd\x9e\xc7\xa7\xbe\xf0\x15\x0e:j5\x8f\xae\x87\xaa\x86D\x99\xceC\
-\xd8\xd9\x84\xc7:\xa53\x1f`\xe9\xe7/\xe9\xad}5\x8c{\xccT\xa3`S\xca\xcc\x1f\
-\x90\x11\xcexN\xfd\xc4\xde\xf9\xf9W\xcb\xef\x1f\xa47:W\xa9\xc8\xca\x14\xc8b1\
--\xa5\xa5\x8d\x87\xd6\xa8\xb5\x81\x82\xd4\x9c\xbc\xfa\x00\xde\xf6\xba3\x99\
-\x93O\xa1>\x80\xaf\xebT\x06w0\xdc?\xc4\xdc\xa5\x07q\xed\xf5_\xc3\xeb\xceb\
-\x01\xd2\xf8\xff\xb0=\xd3p\xe2\x08a\t\x8c\x1e\xd8w\xf6{\xeb\xd4\x9e\xe6\x9f\
-\xec\xda\x85\xd5$|\xe7\xb3\x89\tY\xf6\xcd\x072\xfe\xd2r\x8f\x16{+\xf6\x0f\
-\xd2\x1b\x84\n;+\x97\xce\x86V\xad\x8d\xde2\x81\x1c\xe3\xb4i\xe4\x86\xa4\xf4\
-\x16\xe0\xb8e\xf0\xe1w\\\xce\x11\x8b\xdah\x17U,\xea89\x9fg\xd7oa\xb8\xa6\xf9\
-\xc4\xe7\xef\xa0?1\xd3\xcdTb\xcbx\x06\xa5o\xe6\xb3\xddG\xd3PL0\xdev\xda\xa6\
-\x11\xe8\xac\xd3j%\xbc\xb5\xa8\xa8\xf9\x1cv\x8a\xf7M [0\xf1}7\xd8OH7H1+I\x99\
-|\xf3\x16CE@$\xcd\xacV\xa1\x04-\xc7\x97\xd2\xc8\xbc\xfa\x9c\xbd\x12>\xf6g\
-\xaffA>bqO\x0e\x9d\xd6\xb1\x1d\x17\xa7m\x167\xff\xecn\xbeq\xd3\xd3\x0c\xa4\
-\xa0\x1c\x87\x94\x00\x84\x8f\x92\xbe\xe92\xb4\xb5\xd7R\xb4;\x08!\xcc2\x9e-\
-\xc47\xc3\xb1\xdaj\xe6\xe26\x08oPkgS\xbdL\xdc\xda\xf2j\x11~\xcd\xc4\xf7\xdda\
-\xbf \xbd\xb5:\x14\x1aFL\x16\xaa\xcdn\xd8\xd8\xdc\xe3\xce\x140\x99\xae"I\xc9\
-\xa5\x90\x8b\xe1\xb4\x83\x1d\xfe\xe9\x83o\xa5\xdd\x89\xe9\xca\xfb\xd8\x9eK\
-\xdf\xb6~f/]\xc9Wo\xb8\x99\xfb\x1e\xad\x9a\x86\x83\x99\xf5^\xfaEcX\xa9\xe7\
-\xdb\xa3\xef\xe1\xde\xb2\xbe\xbeU\xa14\x15y\xab\x86\xd1\xbbyg\xa22\x9a\xe4\
-\xeb]\xb0_\x90\x0e\xe3s\xbf\x98\xca\r\x05\x8d\tDE\x0cr<Z\xdfxAf\xd8i\x01i\
-\x8a\xafJ\xb4i\xc5\x11\x0b\xe1\xf3\xff\xf8&:\n\x0eI\x12\x83\x9fg\xa8\x1c\xd1\
-7Z\xe7\xc6[~\xc6\x13[\xcc\xb1\xea\xdat\x17\xc0\xf3\x9e7pgg\x8bRj\xd7~\x9d\
-\x86:\xcff\xfb\xd0\x89y\xa9l\xd5jhf\x9aiZ\xde[\xce\xa3vz\xed\x0e\xfb\r\xe9\
-\x12\xd3\xf2-\x1c,|\x9a)N\x02\x10\xaa9\x0f\xbb\x85I\x96U\xb1\xa2\x99\xf7)LQC\
-82@\x0e\x98\x9b\x83\x1b\xbex)\x07\xf6X\x14\x9d\x04[Z\xcc>\xe0`~t\xfb\xef\xf8\
-\xd1\xdd\x8f3\x02\xd4%D\x8d\xfc\xadf\x9e\xfb$\x8fu_\xf5\xf7{\xdca\xef\x8dH\
-\xb9\xd3\xfb\x9e\xf6\x99\xd2\x10\x98\xb5tl\x01\x0e\x0e\x16\x05 \xc8\xa2`f\
-\x98\xe6Ac\xab\x99\xb9\xd9\xf5Ll\xde\x96\xd9\xd87\x8f\xd76\x1b;IY\xe0\xc2\
-\x81\x12\xbe\xf6\xb7\x97q\xc9\x89+\xa8o\xde\xc8\x8e\x11\x8d\xbb\xe4\x04>\xfd\
-\xed\x9fs\xe3\x03\xb1I\xd0\x14\x1a\xc6v@2\x04\xba\x86\xd2!Ze\xae\x1c\x9d\x12\
-Gu\xb3@`\xc3\xa8\xcc\xd0\xe8\x8e\x1a.W\x98h\xc8M\xf6\x1a\x0f\xfa4\xfa\xeal\
-\x18\'\xadl8G3\xdc\xbc\xbb\x97\xdc\xe9}w\xd8/HG\x98\x11\x94\x91d\x89h\xa4.\
-\x88\xc6\xd2\x9eF\xa6\x1b\x8b\xceg\xae\x8f\xf1,\x17\x01\xb5\x84\xcc\xf6\xd1P\
-\x19&\x9f&\x1c\xde\x0b\xaf;\xef\x18\xde\xf0\xda\x97C8J\x14\'\xf8\xdd\x0b\xf9\
-\xf4\x17\xff\x93G\xb7\x82\xb0\x05\xe4\xf3P\xab\x80\x00)\xe4x\xb2\x84\x108\
-\xb2\xb1\xd2d\xb6m\xe7~6S\xe1\xad+5\xeci\xc5\x86\x89[[\xc8\xdfK\x9a\xf6\xd2x\
-\xdfOH\x7f\x9e\xd0\xc2\xcc[\xa8%\xa0ll\xa7\x13\xb4\x8d\xa3\xe1\xa8e\xf0\xce7\
-\x1e\xc6+_v \x0c?\x85]\x1dcd{\x89/|\xf9G\x8c\x01\xa1\x93G\x15g\xa3\x85G\xd2\
-\xacv\xcb\xe4\xd2r\xd0\xc2BO\xa2}\x05\xec\x91\xe0\x17\x13\xd3\x82t\x03E=\xa9\
-\x93&Y>\x9e\x06B\x85\xa7`\xb1\x0f\x7f\xf1\xfa\x97\xf0\xea3\x0e\xc5\xad\xf6\
-\xd3\x95\xcb\xf1\xe0Ck\xf8\xee\x1dCl\x03F,\x8f\n6\x89\xb2\x88\x12\x88\xb54\
-\x8e`\x01\xd2\xb6v\x89m4U\xecsH\xf6\x8b\x85iB\xba"%\xc6\xb1m,O\x1a\xc2\xe3\
-\x10\xcbI)\xc8\nAR\xe6\xb0N\xf8\xec{\xcf\xe3\xb4C\x17\x10\x8f\xf4\xd1\xd3;\
-\x87\xcf~\xf5F\x1e\x19\x82\x1dd\x0b\x13H\t\x96eV\xf2nt\xe3\xcdj\x97\x0c\xcdb\
-\xc8\x19\xd2_tX\x8dq\x97P`\xc5&jG\x08:&oC\x1b\x8a\x9c\x86/~\xec2.8c5\x03\xdb\
-\xd7SKS>\xfc\x0f7Sa\xbc\x10\xa3\x91I\xd5(\xa7\x9b4\xa3f\x1fy\xf1\xfeX\x98&\
-\xa4K\x046\xf50\xa4R\x1f\x05\x19\x82\x15\x9a\xc9\x7fc\x01\xa9G:Z\xa6M\x80\
-\x1d\xc2?\xbe\xefB\xce=\xf3p\xfa\xb7\xaf\xa7ZQ|\xeb\x07\xfd\x8cE\xe3\x1exM\
-\x96\x9e\xfd\\\xe4NQ\xe2\xa7\x05\xe9\x02H\xa2\x84\xbc\x17\xe0\xfb.!\x11\x91\
-\x8a\xc1\xf1\xc1\xc9\x93\x94\x13\xdc|\x1b\xd5\xe1Q\xba=\x93\xac}\xcd\x9f\x9e\
-\xcfU\x97\x9cM\xdf\xba\xa7\xf8\xc1\r\xdfah\x08\xc6j\xe3\xf9yM\xe2\x9f+\x7fn\
-\n\x12?-H\x07\xf0\\\x89@e\x91x\x0f%\x0b\x84\x04\xa4\xc2\xc6.\x06\xe8\x04\xf2\
-m\xed\x08B\x02\x14s\x1cx\xcf\x1b\xce\xe2\xeaW\xbe\x94\xea\x96g\xf8\xfb\xbf\
-\xbb\xaeIx\x98dCg\xb1\xc7\xac\xa4qL1\xe2\xa7\t\xe9\r_\xbd\xa9\xa5\xd3\x04\
-\xa4\x98!X\x8c\t\xd6\xa4\r\xef\x88\x12\xc84&\x07,*\xc0\xe5/;\x92\xf7\xbd\xf3\
-r\xb6\xac\x7f\x86o|\xf3\x87\xa4\xda\xe4:TjF\x83( \x8e\xf7A\xc0\xfd\x05\xc4\
-\x0bV\x9f\xfe\xe2"\xc5\x84Q$\x82B\x93\x9f\x863\xd5\xc2\xccLavu\xd1Q\x8a\xed\
-\x19g\xdeQ\x8b-\x96\xf5\x9e@2\xb6\x99\x9b\x7f|3\x87\x1dr\x10/9q%A\x00c\xd5\
-\x94\xf6\x9cE\xb5^\xc5u\xf2\x13\xdd\xa5\xcf3*\xf7\xc7\xc44!}\x1c\x96\x1e\x0f\
-X\x08\xc65\xafB\x91"\xb1$H\xcb2qZKa9u\xba\x02\x87\xab\xdf|)\x96\xedr\xe3\x8d\
-7\xb0\xfa\x88\x8f\xd0\x96\x83|\xce\x0c\xdf\xf2\xc5|\x16\xe7\xdf\t\xad\'\x98B\
-\x98\xba\xcdq\x9f\xa2Q\x80db\xec\xb66\x93\x15{\xda\x8c\xdcl\x14)\xa9\x19{\
-\x9bl\xa5,\x11Sd\xbe\xf5\x08O\xc2[\xde\xf8\n\x0e=t\x15\xd7_\xffO\x84Y\x0e\
-\xa3\xd2\x8d\xf8\x9f\xca\xca$\xc6O9\x05\xf9\x06\xa6\r\xe9\xa6B\x86\xc6j\xc6:\
-\x1b\xaek\xb0\xb5\xc2\xc5\x04rD\x16\x97O\x9b\x19\x0c\xc2,C\xa5m\xea\xa1i:oy\
-\xd3et\xb4\xb7\xf1\xc8#\x0fQ\xadG8V\xebr\x00\xc6\xd4\x9b\x10\xdf\x9e\x82\xd5\
-1\xd3\x83t\r\xba\x99V\x94`*\'J\xa0\xca\xa6"5\x95\xd8\n\xb3\xc4\xbb0C\xf7\xa4\
-\xe1bW9H=|\x0f\x12m\xfa\xf9w\xbf\xf3\xadl\xd8\xb0\x0e\xcb\x16\x94\xab\xa5\
-\x9dO\xd5Dk\x10v*I\xfd\xf4 \x1d&\x96\x80\x88\x14D\xe6j\xc9\xc4R%\xe3\x99*\
-\xa6+\xce\xe6\\\x94\xa2\x19\xd2lD\xf0\xd2\x04.\xbf\xe4b6\xad_G1W@L)J\x9f\x1b\
-\xd3\xc3\x90\x13-#*aaT}\xf6Yg\x81\xd8,\xc9f\\\n\xb2\x19\xa2\xb3\xe8\x89\x8b\
-\xd1\xf6`\x96\x10\x95\xc0\xca\xe5+\x1a\x87\xdf\t\xb2\xe5/\xbb\xd9\xe7\xc5\
-\xc3\xf4 \x1dZ\x9ezKB\xe1\x84\xed\xbb!F\x8c\xbf\xfdOgq\x99JD\xb7b\xfa\xa8\
-\xf7\x1941C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\
-\xd3\x103\xa4OC\xcc\x90>\r1C\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1C\
-\xfa4\xc4\x0c\xe9\xd3\x103\xa4OC\xcc\x90>\r1EH\xdf\xbfr\xcc\xf6wL\t\xd2\xe34\
-d\x86\xf8\x17\x0eS\x82\xf4hJ\xae\x82\xf2\xff/\xa6\x04\xe9\xbe\x9c\x91\xf2\
-\x17\x12S\x82t-\xfe\xb7\xb3\xf3M\xd5)\x1f\xa6\xe25\x8dcJ\xa4@\xdb\x93\xb5=\
-\xadI\x84\xc2V\x16J*\xd0\x12\x89&\x15\x02\x89"\xd5\x1a+M\x88\xa5\x8d\x14)\
-\xb60\xab\xbc\xbdX\xd0\xa9"\x15\x02\x91\xc6\xc4\x96\xc6\x93\xde\xa4W\xb3~\
-\xfdz\x1c\xc7a\xce\x9c9\x13\xb67\xe6\x8d}!0%$}2\xb2T\xa3\xd2@\x98\xd9^\x04)\
-\x1a\xcd\xffk\xef\xdc\x83\xa3\xaa\xee\x00\xfc\x9d{\xf6\xbd!\xbby@\x1e\xc4@B\
-\x91G\x84\x12\x9fT\xd1RPl3\xad\xb4\x96\xf1Q\x18t\xda\xd2Z\xb1\xd3\x8aN\xad:\
-\xe3L\x9d\xda\x87Z-\xed\xd4>\xa6\xd5"\x91\x82\x03\x96\xfa\xc0X\xa7(T#\x85\
-\x82$D\xb0\x89\x08I\x0c\xe4\x9d\x05\x93\xecn\xf6\xde{\xfa\xc7n\x96DQ\xab\xd3\
-Ml\xef\xf9f2\x9b=\xd9\xdc\xf3\xf8rN\xee9;\xfb\xfb\xc9\xd4g\xc5\x84er\xef\xd6\
-F\xae\xb9\xf7y\xdel\xef?\xed5\xc6\n\x05\xbc\xde;\xc0\xf7\xff\xb0\x93\x1d\x07\
-;pY\xa7\x17\x0eP]]MMM\r\'N\x9c\xe0\xd1G\x1f\xa5\xb1\xb1\x91G\x1ey\x84\xba\
-\xba\xba1k\xef\xc7D\xfa;IJN\xcem\x93\x96\x9e(\x1bw\x1de\xd3\xee\xa3\xe9\xb4\
-\x1b]\t\x17?\xdc\xf2\x1a[_\xf3\xf0\xa7\x1dM\xe3\xbe\xa0>\xb3\xfd ?\xdf.\xb8\
-\xfb\x99\x06\x94|\xff\xdd\x88\x10\x82p8Lqq1S\xa7N%\x1a\x8d\xd2\xd1\xd11fm\
-\xcd\xe8\xf2>\x94\xb0pK\x85e\x08\xa4J~TT\x90\n\xa5-\xe0T<\xae\x91\x03\x94\
-\x9c#B\xd9\x08\x1b,\xe1\xe2\x9fotp\xdd/^%\xe8J\xb0\xf4\xfc2\xfcJ\x91\xebMp\
-\xe3\xe5\xa5\xec>\x1c\xe1\xf3\x17\xccyG\xcd\n\xc5\xc8x\xab#\xeb\x19\xf98\xfc\
-\xddp\xfd\x1fm\xb5\x10(\x96]:\x8b!\xeb0\x8b\xcf\x9d\x82aI\xde/i\xfd0\x15\x15\
-\x15H)Y\xb6l\xd9\xa8\xccM\x99&\xa3\xd2=n\x89\xb2m\xa4\x82\x98ms\xe8\xf8 GZ"\
-\xc4\xf0p\xd6d?3J\xfc\xf8\x94\x1b%-\x94\xad\x88\x9a\x06\xbb\xdf\xec\xa3\xad;\
-BQ\xb6\x97\xca\x99\xc5\xf4\xf4D8\xdc\x97\xc06\x14\t\x95M}k\x07><TL\xf6s\xd5\
-\xa2O\xb0t!L\xce\xf5s\xe8X7\xfdC\x10\xf6IJ\'\xfa\x91\xc2\x83\xcbV\xd4\xb7\
-\xbf\x8d\x95\x18\xa2(7\x8b\xc2\xa0 nx9~r\x80\xba\xd7\xfbPq\x93Y3\x0b(\x0f\
-\xbbp{\rL\xdcH;\x81\xc2`\xa0\x7f\x80H$Bnn.>\x9f\x0f\xc30\xd2\xe1>G\x86\xff\
-\xec\xee\xee&\x18\x0cR\x9a\x93\xc5\xf7\xae\x9e\x9b\\:\x85\xc0\xb6m\x84\x10$\
-\x12\t:::\x08\x04\x83\x84\xc2\xa1d\xfax\x92\xf9\\JJJ\x00(**\xca\xa4\x86w\x91\
-\xf1\x1b9\x05\xf4\x0f\xc6\xf9\xea\xda\xbfSS\xd7\x8de\xc0\x90p\x13\x182\xf8\
-\xe6US\xb8\xe7\xaasp+\x83W\x8e\xf6p\xd3\xaf^\xa6\xfe\x98\x00\x97\xc4P6\xb3\n\
-\x0f\x92\xe3\x1f\xa2\xf6\x88\x0b\x0bA,\xa1\xb8\xe8\xce\xed\x84d\x90\xa3\x0f/\
-e\xf9\x8f\x9f\xa2\xa5g\x90_\x7f\xe7\x12ZZ\x8e\xf1\xe3\'\xdb(\tK\xf6\xfe\xe2J\
-\xbcF\x82\x9e\x98\xe4\xf2;\x9f\xa6\'\xe1\xe1\xe9\xdb?E\xce\xec"\xee\xdf\xba\
-\x97\x9f<\xf9&\x03\xa6@*APD\xf9\xc1\xf2O\xf2\xed\xcf\xcd\xc1\xad\x12\xf4\x0f\
-Fyx\xddz\xfeQ[\x0b@ \x10\xe0\x8a+\xae`\xe3\xc6\x8d\xdcr\xcb-TVV\xb2v\xed\xda\
-t\x1e\xb5\x83\x07\x0f\xb2r\xe5J\x16/^\xccu\xd7]\xc7\xea\xd5\xab\x99?\x7f>\
-\x00555l\xde\xbc\x99h4\x8a\x90\x06\xf3\xe7\xcf\'\x1e\x8f\x8f{\xae\xf5\x8cK7\
-\x0c\x83`\xd0O\xc1\x14\x1f_\xcc\x9d\xcc\xf2\x85g\xd1u\xbc\x9b\x1b\xffX\xc7\
-\xef6\xb7q\xd3\xc2\x99d\x07\x13\\\xff\xc0v\x0e\xf7e1=4\xc8\xf9\xb3\xf2\xd9\
-\xd3\xd0\xca\xea+?M\x7fg;\x86g\x80\x17\x1bM|\x86\xc9\x17..\xa7\xc0\xb6\xf0\t\
-E\xdc\x08\x11w\x05\x10\x18\\\xb3\xe4l~\xba\xad\x87\xa3\'\xa0\xb6\xfe-.\x9dW\
-\xc2\xb6\xbdo\xd0\x13\xf70\xbb\xc4\xcf\xe2Y\x93x\xf8\xa5f\xee\xde|\x84)9n~p\
-\xd5\\ZNJ~\xb4\xe9\x00\xb7\xafo\xe2\xe2\x8aR\xce)\xf4\xf2\xf0\xba\xc7\xa8\
-\xab\xdb\xcf\r7\xdc\xc0\xec\xd9\xb3iiia\xdd\xbau\xa3\xfa$\x84\xe0\xc0\x81\
-\x03,X\xb0\x805k\xd6P\\\\\x9c\xce\xc04\x1c!r\xd7\xae]<\xf6\xd8c,Y\xb2\x84\
-\xcb.\xbb\x8ch<\xc6\x96-[8r\xe4\x08eee\x99\x1e\xf6\xf7e\x0c\xb6l\n\x03\xc1=_\
-\xba\x88\xed\rm\x1c<t\x8c\xde\x84"/\xec\xe7\xf8\x90\xc1\x81\xd6n\xbaO(\x8ev{\
-\xc8\t\x98<{O\x15\x85a7\x83q\x93l\xaf@\x1a\x85\x94\x9c\xd1\xceK\x87^\xc2#\
-\x03\xfc~\xd5\xd9\xf8p\'\xc3v*\x13C\xc5\x10X\x94\xe5x\xf9\xec\xd9a\xb6\xee\
-\xe9e\xfd\xae6\x16W\x96\xf0\x97\xdd\xc7\xb1\xe4\x04\xae\xbfx\n\t\xe9\xa6\xfa\
-o\x87\xb0e\x16\xe7\x9d\x99C\xdc\x90\x14g+\xca\x8b\x0c\xea\x8f\xb9\xa9\xd9\
-\xd7\xcc\x8c\x85S\xa9\xdd\xb3\x8f\xab\xaf\xacb\xc1\x82\x8bP\n\xc2\xe10+V\xac\
-\xe0\xc1\x07\x1f\x1c\xd5\xab\xe2\xe2bV\xadZ\x85\x94\xf2\xb43\xf7\x85\x17^\
-\xa0\xbc\xbc\x9c\xe5\xcb\x97\'\x0b\x84\xe0\xa6\xd5\xab\xf9\xee\xcd7\xff\x7f\
-\xcf\xf4!\xc0m\xc7\xd9\x7f,\xc65\xf7\xee\xe0H\'\xb8U?\x81,\xc9@\xdc\x83\xe9\
-\xf6\x10\x8b\xda\xb4\xf7F\xb1\x85\x8b\x8aBIA\xbe\x17\xaf2\xf1\xf9$\t\xe1B*\
-\x0b\x9f\xa5\x007\xb64\x91J \xb0\x91\x02\xd4p\\8\xe5A!\xf8\xda\xc2)<\xb5\xbb\
-\x87\xa7_\xe9\xe4_\xcbb\xbcX\xdfF\x96p\xb3\xec\x92R\xb0-\x8e\xf5EQd\xb1\xb5\
-\xb6\x93-\xbbZ\x91\xb6A\xc2m\xe25\xfd\x9c8\x99\xa0\xab\xfb8\xb6m2m\xea\x0c\
-\x840Rq\xe2\x14\xd3\xa6M{W\xdfJJJ\x90R\x9eJ\xbe\xf3\x0e\x91]]]\xcc\x9b7/\xbd\
-\x02\x00\xf8\xbc>\x8a\n\n1\xc6\xf9\xc89\xa3\xd2]\x98\xd8\xb8\xf9\xe5\xb6\xfd\
-4\xf5x\xa9\xaa\x94\xfc\xe6[K\x08\x05}|\xee\xee\xed\xbc\xf2F\x84!\xe1\xa6p\
-\x92\x1b0y\xbd\xb5\x9f\xe6\x9e(\xd3s<Db6\xd9~\x13\xd4\x10\x83R"\x94\xc44\x87\
-\x18\xb4%R\xa6\x02\xfa\x8c\xfa\xec\xb8\xc9EsK\x99^P\xc7\xbf\x8e\x0b\xbe\xf1\
-\xd0+D\xd4\x04\xbe|n\x1e\x85\xd9~lC2=\xdb\xc5\xe1>\x0f\xd7.\x9e\xc07/=\x13\
-\x054\xf7\xbd\xcd\xe4\xf0\x04\xf2C\x01\xf2I\xe0\xb6\\tt\xb6\x02\xb3\xd2\x15\
-\xb4\xb5\xb5}\xe8\xbeggg\xd3\xde\xde\x9e~>\x9c\xd2\xa3\xa7\xa7\'}\x037^d|\
-\x9fn+\x85e&\x90v\x82\x81\xb8\xcd\xfe\xd6\x08\x0f=\xf9\x1a{\x9b\xdeF\xe1A\n\
-\x9b/\x9d\x13bj\xbe\x8bn\x95\xc7\xa5w>\xcb\xb2\x07j\xa9\xbc\xf9\x19~\xbb\xa3\
-\x19Sx\xc8\x91&\xca\x10\x0c\xaa +\xee\xdb\xcew\x7f\xb7sD\n\xdcTG\x0cI\x96\
-\x01+?3\x15\xa4E\xed\x1bCH\xcbdY\x1f\x03%\x00\x00\x04\xd0IDAT\xe5%e\xb8\x84\
-\x8d[%\xb8\xfe\xb3sq\xa9A\x9e\xd8\xd5\xc6\xb6=\xcd<U\xd7\xce\xad\xbf\xd9\xcb\
-\xdam\r\x14\x04\r\xb2\xc2!\xce={.[\x9f\xf83\xfb\xf6\xbdJ4\x1a\xa5\xa9\xa9\
-\x89\xea\xea\xeaw\xf5\xeb\x83N\xcf.\xbc\xf0B\x1a\x1a\x1ax\xee\xb9\xe70M\x93X\
-,\xc6\xfa\xf5\xeb\xe9\xed\xed\x1d\xf7\xa8\xd0\x19\x9d\xe9&.\xa4=\xc0\x8d\x97\
-\xcfb\xfb\xfe\x1d\xbc|\xd0`\xf7k;)\x9c\xe4ez\xa1\x97\xa6\xb7\xfa\xb0\x84 \
-\x14\xf0\xf0\xc4\xad\xe7\xb3\xea\xa1W\xd9\xff\x96\xcd\xb6\xbd\'q)\xc9\xa6\
-\x9azV\\0\x95\x0b+\xce\xe0\x82i\r\xec9<\xc0_\xeb\x13\x84}p\xff7@*\x13\xc9\
-\x10B\xd9\x98H\\\xca\xe4\xdaE\xb3\xb8\xf7\x89\x06N\x0c)\xce\xcc7X4\xa7\x08\
-\x13\x85\xa1L\xbe\xb0\xa0\x9c\xfb#\x11\xee~\xbc\x99\x1f\xfe\xe5\x18R\xc4\xf0\
-\xd9\x01\xcas\xb3\xf0\xba<\xc4%|\xed\xeb_\xe1\x0f\xbf\xdf\xc0\xcf~\xf6\x00B\
-\x80\xcb\xe5b\xe9\xd2\xa5\xb4\xb6\xb6~\xa8\xbe/Z\xb4\x88\xf6\xf6v\xaa\xab\
-\xab\xd9\xb0a\x03J)\xca\xcb\xcb)--\xcd\xd0h\xff\xe7\x88\xfb\xee\xbbO\xed\xdb\
-\xb7\x8f\r\x1b6d\xa8\x8a\xe4AIg\x7f\x94\x7f4v"%\xcc\x9f9\x99\x13o\xc7\xb0\
-\x12\t&\x86\xfc\x84\xfc\x12\x81"\x8a\x87\xfa\xc3]\xb4uE\x99\x98\xebb\xde\'\
-\x8a\xc8\x92\n0\x184m\xfe\xd9\xf4\x16]\'\xe3\x14\xe5eq^y!\xcd]\'1M\x8b\xe2\
-\x9c \xa1\x80\x07\x10\xd86\x1c\xef:I\x9fm3\xc1\xe7\xe1\x8c\x9c@*\xdbYre\xb0\
-\x95\xa2\xaf?N\xed\x9b\x9d\x08s\x889\xe5\xc5\x14\x85\xfdxD\xf2\x88F\xd9\x16\
-\xb6\xad\xe8\xeb\x8b\x10\x89\xf4QPP@,\x16c\xcd\x9a5\xdcv\xdbmTTT\x10\x89D\
-\x10B\x10\n\x85\xd2\xe93-\xcb\xa2\xb3\xb3\x93\xec\xecl\x02\x81@z6wvv\xd2\xda\
-\xdaJ0\x18d\xfa\xf4\xe9\xf4\xf5\xf5!\xa5$\'\'\'C\xe3\xfd\xde\x18\xd2%l\xcbTc\
-p\xf7\x9e<\x19\x9b\x18p\xf1\xf9O\x16\xa7\x8a\x14\xd9yA\x0c\x14\x86\x12\x88T\
-\x1e\x14\xbf\xa18\xaf<\x8bs\xa7\x05\xb0U \x95t/9\xa8\x01\x15\xe7\xe2\x99%\
-\xd8*\xf9\xff\x1baQ61\x94\xec\xcc\x88\xc4|B(\x8a&N\xa00u\xf0f\xa4\xda\x90F)r\
-\x82^\xaa\xe6\x94\x80R\x18\xc2D\xa88\x08/\x02\xc1\xbeW\xf7STTDaa!\xf9\xf9y(\
-\xa5x\xfe\xf9\xe7\xf1x<\x94\x95\x95\xa5\x8fP\x93u\x9d\xba\xaea\x18\x14\x14\
-\x14\xbck\xe9\xce\xcf\xcf\'???\xfd\xfa\xbc\xbc\xbc\xff\xe6\xe0~$\xc6\xec]6e\
-\xb8\x91*\x991\xcd\x12.\xdc\xe9S\xf4d\xf8\xa6\x84\x91\xcc\xadh\x08\x1f\x86\r\
-R(\x10F\xfa8U\xb9\xfd(\x92\xe5"\x15\xf2\'\x95\x03\x99tbZ\x14B$\xbfP*\x19\xf1\
-\x11c\xd4\x91\xec\xf0\xccD\x812\x04\n\x0f\x16"\x99\xed\xcd\xb6\xd9\xb4i\x13\
-\xbd\xbd\xbdTVV\x92\x97\x97Gss3\r\r\r\xac\\\xb9\x12\xbf\xdf\xff\x9e\x99\x1a\
-\xde\xab<]\xdf\xc7\x881\x93.\x95\x8d\x9dz\xdf\\*\x1b\x84\x1c\x95\x1e\xd2\x95\
-\n\xa0;\x1c\xcbMa`\xa5~,\xd5p\x16\xd2\xe1?\x04\x99\x0e\xe4\x0b\xc9\xcc\xab\
-\xa76F\xc9P}\xb6p3|\xf9\xf7\xbam\x1a.\x97\xa9\xe5\xdf0\x0c\xee\xba\xeb.v\xee\
-\xdc\xc9\xa1C\x87hlld\xd2\xa4I\xdcq\xc7\x1d\xcc\x981c\xdco\xc0\xfe[dT\xba\
-\xb2-\x84!1\x01\x97\x10\xa7\xf6\xa7\xa3\x1fF?I\r\xac\x18\xd9\xb8\xf4`\'\x15\
-\xa6\xc3{\xa5\x8aO\t\x1f\xfe-\xf5\xc1\xdb\x92\x11\xf5\x8c$++\x8b\xaa\xaa*\
-\xaa\xaa\xaa>\xe8\n\xff\xb3dt\xed\xb1\x85L\x07\xe0\x1d=\xbc\x1fe\xc6\xbc\xdf\
-\x9c=\xddk?\xec\xb5\x9dCF\xa5\'l\xc5\xe8,\xb1\x9a\x8f\x03\x19]\xde}\xf2t\xeb\
-\xb8f\xbc\xf9\xf8\xddZj2\x8e\x96\xee@\xb4t\x07\xa2\xa5;\x10-\xdd\x81h\xe9\
-\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\xa2\xa5;\x10-\xdd\x81h\
-\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\xa2\xa5;\x10-\xdd\
-\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\xa2\xa5;\x10-\
-\xdd\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\xa2\xa5;\
-\x10-\xdd\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\xa2\
-\xa5;\x10-\xdd\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\x07\
-\xa2\xa5;\x10-\xdd\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x96\xee@\xb4t\
-\x07\xa2\xa5;\x10-\xdd\x81h\xe9\x0eDKw Z\xba\x03\xd1\xd2\x1d\x88\x0b`\xe3\
-\xa6\xc7\xc5\xc6M\x8f\x8fw[4c\x84PJ\xa9\xf1n\x84fl\xf97\x87\xba&\x9e\x12\xca\
-GT\x00\x00\x00\x00IEND\xaeB`\x82' 
-
-def getWizardDataOld():
-    return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00t\x00\x00\x01\x04\x08\x06\
 \x00\x00\x00\xf9\xcf\x10R\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
 \x00\x0f\xdfIDATx\x9c\xed]K\xb6\xe3(\x0cU\xf5\xa9MU\x86\xd9\xd6\xcb\xd0\xd9\
@@ -962,6 +288,6 @@ def getWizardBitmap():
 
 
 def getWizardImage():
-    stream = cStringIO.StringIO(getWizardDataOld()) # NOTE: This reverts us to the bitmap Peter likes.
+    stream = cStringIO.StringIO(getWizardData()) # NOTE: This reverts us to the bitmap Peter likes.
     return ImageFromStream(stream)
 
index 0c27e51f1563ee2f5d4bf1c799084cb52a5c4233..66fd95cf1ef1ea69e335b21484629c11a0aa5100 100644 (file)
@@ -109,7 +109,7 @@ class XmlCtrl(CodeEditor.CodeCtrl):
         # Tag
         self.StyleSetSpec(wx.stc.STC_H_TAG, "face:%(font)s,fore:#00007F,bold,size:%(size)d" % faces)
         # Attributes
-        self.StyleSetSpec(wx.stc.STC_H_ATTRIBUTE, "face:%(font)s,fore:#00007F,bold,size:%(size)d" % faces)
+        self.StyleSetSpec(wx.stc.STC_H_ATTRIBUTE, "face:%(font)s,fore:#007F7F,bold,size:%(size)d" % faces)
 
 
 class XmlOptionsPanel(STCTextEditor.TextOptionsPanel):
@@ -118,13 +118,16 @@ class XmlOptionsPanel(STCTextEditor.TextOptionsPanel):
         STCTextEditor.TextOptionsPanel.__init__(self, parent, id, configPrefix = "Xml", label = "XML", hasWordWrap = True, hasTabs = True)
 
 
+    def GetIcon(self):
+        return getXMLIcon()
+
+
 XMLKEYWORDS = [
         "ag:connectionstring", "ag:datasource", "ag:editorBounds", "ag:label", "ag:name", "ag:shortLabel", "ag:type",
         "element", "fractionDigits", "length", "minOccurs", "name", "objtype", "refer", "schema", "type", "xpath", "xmlns",
         "xs:complexType", "xs:element", "xs:enumeration", "xs:field", "xs:key", "xs:keyref", "xs:schema", "xs:selector"
     ]
 
-
 #----------------------------------------------------------------------------
 # Icon Bitmaps - generated by encode_bitmaps.py
 #----------------------------------------------------------------------------
@@ -136,19 +139,17 @@ def getXMLData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x01\x1aIDAT8\x8d\xed\x92?N\xc3P\x0c\xc6\x7fv\xf2\x924\xa8E*7\xe1\n\xbd\
-\x01G\xa8\xd8\x989\x05S/\xd0\x0110\xf4$\xa0J\xdd\x18\x18XY\x82\xa0\xad\xd2\
-\xfc\xe9{f\x08-\x02\xc1\xd4\x85\x01/\xb6l\xd9\xdf\xf7\xd9\x16\xd1\x88CL\x0f\
-\xea\xfe\x13\x03\xc4\xae\xcf\x8d\xb6\x84\xba\x84m\x83e\x03\xa8\x96\x88F`\x86\
-\xf5\x06\xc8\xba\x80\xf4\x08\xda\x1a\xf2cB04q\xcc\xe7\x0bb\xbb\xbf\x85\xd75\
-\xf2\xb1K\xc9\x12\xa8\x9aO\x84o\x88\xb6\x0bbxx\x04\xc5e\xe0:%\xe5\xd4\xa0j:\
-\x0f\xd4\x93\x82\xcd\xe9\x19\xf5\xa4\xd8\xd7\x97\xe2\x904\x82D\x89bA\xa5\xad\
-!\x85\xb0\x82|,\x94S#\x1fw\xb8\xbe?\xc4\x8d.\xf0\xfd\xe1\x9e\x81\x7fk\x91\
-\xd6\x83\x05\xcc\x0c\xf5\xea\xf0U@\xfb\xec\x9bw\x0c\x00\xe2\xab\xd1\x17\t\
-\xd9\xcc \x80o\xc1D\x11\xbb<1^\n\xf0\xbf\xacy\x03\xf4~\xc8g0{R\xe2\x9b\xc5\
-\x8aM\x03\xd4\xe0=\xb8\xb4;\x88\xc6 \nQ\x1e\xe1W\x1e\x89\xc1W\xe0\xb7\xa0=Hr\
-\xb8{\x0e\xc8\xff+\x1f>\xe0\x1d~\xafr\x13\x04HY"\x00\x00\x00\x00IEND\xaeB`\
-\x82' 
+\x00\x01\x08IDAT8\x8dc\xdc{\xf6\xde\x7f\x064p\xfb\xd1K\x06\x06\x06\x06\x86\
+\xd7o\xbf2\xd4\xa5\xb93\xa2\xcb\xa3\x80\xbdg\xef\xfd\xbf\xff\xed?\x1c_\xf9\
+\x04\xc13\xd6\x1f\xff\xbf\xeb\xf9\xff\xff\xcds\xf6\xfcgdbf\xc0\x85\x99\xb0\
+\x19\xfa\xe5\x17\x82m\xee\xed\xcc\x90Z\xb7\x08\xc3\x950\xc0\x82\xcc\xf9\xfa\
+\x07\xc1~\xfd\xf6+\xc3\xeb\xad{\x19\x1e?y\x89\xd7\x07,\xe8\x1aa\xb6\x9b{;300\
+00(\xfdb`88\x7f\x19N\x03\x98`\x01\x86\xac\xf9\xd3o\xa8+\xa0\xfc\x07\x0f\x1e\
+\xe3w\x01\xb2\x9f\xd15\xbf\xfa\x8e\xd7\x07\x0cL\xaf\xdf~%[3\xdc\x050\x8d\xa4\
+jf````LkX\xfa\x7f\x8a\xcdi\xe2T\xe3r\x01\x03\x03\x03\xc3\xa7#\x13H\xd6|\xea1\
+\x03jB\x12\xae\xffO\x14\x8d\x0cP\x0cx\xdb\xc8\xc8 \\\xff\x9f\xe1m#"\xf9c\xd3\
+\x84b\xc0\xec\xa68\xb8j\x98fdM\xc8\x86\xc1\xd4 \xcb32213\xfc\xdc\x95\xfb\x9f\
+\xdc0`A\xe6\x90\x03\x00\x11\x95\x8b;4e.A\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 
 def getXMLBitmap():
diff --git a/wxPython/samples/ide/activegrid/tool/project.py b/wxPython/samples/ide/activegrid/tool/project.py
new file mode 100644 (file)
index 0000000..babdade
--- /dev/null
@@ -0,0 +1,549 @@
+#----------------------------------------------------------------------------
+# Name:         project.py
+# Purpose:      project model for wx.lib.pydocview
+#
+# Author:       Morgan Hua
+#
+# Created:      8/25/05
+# CVS-ID:       $Id$
+# Copyright:    (c) 2005 ActiveGrid, Inc.
+# License:      wxWindows License
+#----------------------------------------------------------------------------
+
+import copy
+import os
+import os.path
+import activegrid.util.xmlutils as xmlutils
+from IDE import ACTIVEGRID_BASE_IDE
+if not ACTIVEGRID_BASE_IDE:
+    import activegrid.model.basedocmgr as basedocmgr
+    import AppInfo
+
+#----------------------------------------------------------------------------
+# Constants
+#----------------------------------------------------------------------------
+# Always add new versions, never edit the version number
+# This allows you to upgrade the file by checking the version number
+PROJECT_VERSION_050730 = '10'
+PROJECT_VERSION_050826 = '11'
+
+    
+#----------------------------------------------------------------------------
+# XML Marshalling Methods
+#----------------------------------------------------------------------------
+
+def load(fileObject):
+    version = xmlutils.getAgVersion(fileObject.name)
+    # most current versions on top
+    if version == PROJECT_VERSION_050826:
+        fileObject.seek(0)
+        if ACTIVEGRID_BASE_IDE:
+            KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile}
+        else:
+            KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile, "ag:appInfo" : AppInfo.AppInfo}
+        project = xmlutils.load(fileObject.name, knownTypes=KNOWNTYPES, knownNamespaces=xmlutils.KNOWN_NAMESPACES)
+    elif version == PROJECT_VERSION_050730:
+        fileObject.seek(0)
+        project = xmlutils.load(fileObject.name, knownTypes={"project" : Project_10})
+        project = project.upgradeVersion()
+    else:
+        # assume it is old version without version number
+        fileObject.seek(0)
+        project = xmlutils.load(fileObject.name, knownTypes={"project" : Project_10})
+        if project:
+            project = project.upgradeVersion()
+        else:
+            print "Project, unknown version:", version
+            return None
+            
+    if project:
+        project._projectDir = os.path.dirname(fileObject.name)
+        project.RelativeToAbsPath()
+        
+    return project
+
+
+def save(fileObject, project, productionDeployment=False):
+    if not project._projectDir:
+        project._projectDir = os.path.dirname(fileObject.name)
+    project.AbsToRelativePath()  # temporarily change it to relative paths for saving
+    if ACTIVEGRID_BASE_IDE:
+        KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile}
+    else:
+        KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile, "ag:appInfo" : AppInfo.AppInfo}
+
+    savedHomeDir = project.homeDir        
+    if productionDeployment:
+        # for deployments, we don't want an abs path in homeDir since that
+        # would tie the app to the current filesystem. So unset it.
+        project.homeDir = None
+        
+    xmlutils.save(fileObject.name, project, prettyPrint=True, knownTypes=KNOWNTYPES, knownNamespaces=xmlutils.KNOWN_NAMESPACES)
+
+    if productionDeployment:
+        project.homeDir = savedHomeDir
+    
+    project.RelativeToAbsPath()  # swap it back to absolute path
+
+
+#----------------------------------------------------------------------------
+# Classes
+#----------------------------------------------------------------------------
+
+class BaseProject(object):
+
+    __xmlname__ = "project"
+    __xmlexclude__ = ('fileName', '_projectDir', '_getDocCallback')
+    __xmlattributes__ = ("_homeDir", "version")
+    __xmlrename__ = { "_homeDir":"homeDir", "_appInfo":"appInfo" }
+    __xmlflattensequence__ = { "_files":("file",) }
+    __xmldefaultnamespace__ = xmlutils.AG_NS_URL
+    __xmlattrnamespaces__ = { "ag": ["version", "_homeDir"] }
+
+
+    def __init__(self):
+        self.__xmlnamespaces__ = { "ag" : xmlutils.AG_NS_URL }
+        self.version = PROJECT_VERSION_050826
+        self._files = []
+        self._projectDir = None  # default for homeDir, set on load
+        self._homeDir = None         # user set homeDir for use in calculating relative path
+        if not ACTIVEGRID_BASE_IDE:
+            self._appInfo = AppInfo.AppInfo()
+        
+
+    def __copy__(self):
+        clone = Project()
+        clone._files = [copy.copy(file) for file in self._files]
+        clone._projectDir = self._projectDir
+        clone._homeDir = self._homeDir
+        if not ACTIVEGRID_BASE_IDE:
+            clone._appInfo = self._appInfo
+        return clone
+
+    
+    def initialize(self):
+        """ Required method for xmlmarshaller """
+        pass
+
+
+    def GetAppInfo(self):
+        return self._appInfo
+        
+
+    def AddFile(self, filePath=None, logicalFolder=None, type=None, name=None, file=None):
+        """ Usage: self.AddFile(filePath, logicalFolder, type, name)  # used for initial generation of object
+                   self.AddFile(file=xyzFile)  # normally used for redo/undo
+            Add newly created file object using filePath and logicalFolder or given file object
+        """
+        if file:
+            self._files.append(file)
+        else:
+            self._files.append(ProjectFile(filePath, logicalFolder, type, name, getDocCallback=self._getDocCallback))
+
+
+    def RemoveFile(self, file):
+        self._files.remove(file)
+
+
+    def FindFile(self, filePath):
+        if filePath:
+            for file in self._files:
+                if file.filePath == filePath:
+                    return file
+                
+        return None
+
+
+    def _GetFilePaths(self):
+        return [file.filePath for file in self._files]
+
+
+    filePaths = property(_GetFilePaths)
+
+
+    def _GetLogicalFolders(self):
+        folders = []
+        for file in self._files:
+            if file.logicalFolder and file.logicalFolder not in folders:
+                folders.append(file.logicalFolder)
+        return folders
+
+
+    logicalFolders = property(_GetLogicalFolders)
+    
+
+    def _GetPhysicalFolders(self):
+        physicalFolders = []
+        for file in self._files:
+            physicalFolder = file.physicalFolder
+            if physicalFolder and physicalFolder not in physicalFolders:
+                physicalFolders.append(physicalFolder)
+        return physicalFolders
+
+
+    physicalFolders = property(_GetPhysicalFolders)
+
+
+    def _GetHomeDir(self):
+        if self._homeDir:
+            return self._homeDir
+        else:
+            return self._projectDir
+        
+
+    def _SetHomeDir(self, parentPath):
+        self._homeDir = parentPath
+        
+
+    def _IsDefaultHomeDir(self):
+        return (self._homeDir == None)
+
+
+    isDefaultHomeDir = property(_IsDefaultHomeDir)
+
+
+    homeDir = property(_GetHomeDir, _SetHomeDir)
+
+
+    def GetRelativeFolders(self):
+        relativeFolders = []
+        for file in self._files:
+            relFolder = file.GetRelativeFolder(self.homeDir)
+            if relFolder and relFolder not in relativeFolders:
+                relativeFolders.append(relFolder)
+        return relativeFolders
+        
+
+    def AbsToRelativePath(self):
+        for file in self._files:
+            file.AbsToRelativePath(self.homeDir)
+
+
+    def RelativeToAbsPath(self):
+        for file in self._files:
+            file.RelativeToAbsPath(self.homeDir)
+
+
+    #----------------------------------------------------------------------------
+    # BaseDocumentMgr methods
+    #----------------------------------------------------------------------------
+
+
+    def fullPath(self, fileName):
+        fileName = super(BaseProject, self).fullPath(fileName)
+        
+        if os.path.isabs(fileName):
+            absPath = fileName
+        elif self.homeDir:
+            absPath = os.path.join(self.homeDir, fileName)
+        else:
+            absPath = os.path.abspath(fileName)
+        return os.path.normpath(absPath)
+
+
+    def documentRefFactory(self, name, fileType, filePath):
+        return ProjectFile(filePath=self.fullPath(filePath), type=fileType, name=name, getDocCallback=self._getDocCallback)
+
+
+    def findAllRefs(self):
+        return self._files
+
+
+    def GetXFormsDirectory(self):
+        forms = self.findRefsByFileType(basedocmgr.FILE_TYPE_XFORM)
+        filePaths = map(lambda form: form.filePath, forms)
+        xformdir = os.path.commonprefix(filePaths)
+        if not xformdir:
+            xformdir = self.homeDir
+        return xformdir
+         
+   
+    def setRefs(self, files):
+        self._files = files
+
+
+    def findRefsByFileType(self, fileType):
+        fileList = []
+        for file in self._files:
+            if fileType == file.type:
+                fileList.append(file)
+        return fileList
+
+
+    def GenerateServiceRefPath(self, wsdlFilePath):
+        # HACK: temporary solution to getting wsdlag path from wsdl path.
+        import wx
+        from WsdlAgEditor import WsdlAgDocument
+        ext = WsdlAgDocument.WSDL_AG_EXT
+        for template in wx.GetApp().GetDocumentManager().GetTemplates():
+            if template.GetDocumentType() == WsdlAgDocument:
+                ext = template.GetDefaultExtension()
+                break;
+        wsdlAgFilePath = os.path.splitext(wsdlFilePath)[0] + ext
+        return wsdlAgFilePath
+
+
+    def SetDocCallback(self, getDocCallback):
+        self._getDocCallback = getDocCallback
+        for file in self._files:
+            file._getDocCallback = getDocCallback
+
+
+if ACTIVEGRID_BASE_IDE:
+    class Project(BaseProject):
+        pass
+else:
+    class Project(BaseProject, basedocmgr.BaseDocumentMgr):
+        pass
+        
+
+class ProjectFile(object):
+    __xmlname__ = "file"
+    __xmlexclude__ = ('_getDocCallback', '_docCallbackCacheReturnValue', '_docModelCallbackCacheReturnValue', '_doc',)
+    __xmlattributes__ = ["filePath", "logicalFolder", "type", "name"]
+    __xmldefaultnamespace__ = xmlutils.AG_NS_URL
+
+
+    def __init__(self, filePath=None, logicalFolder=None, type=None, name=None, getDocCallback=None):
+        self.filePath = filePath
+        self.logicalFolder = logicalFolder
+        self.type = type
+        self.name = name
+        self._getDocCallback = getDocCallback
+        self._docCallbackCacheReturnValue = None
+        self._docModelCallbackCacheReturnValue = None
+        self._doc = None
+
+
+    def _GetDocumentModel(self):
+        # possible bug is if document gets replaced outside of IDE, where we'll return previous doc.
+        # originally added a timestamp check but that increased the time again to 4x
+        if self._docModelCallbackCacheReturnValue:  # accelerator for caching document, got 4x speed up.
+            return self._docModelCallbackCacheReturnValue
+            
+        if self._getDocCallback:
+            self._docCallbackCacheReturnValue, self._docModelCallbackCacheReturnValue = self._getDocCallback(self.filePath)
+            return self._docModelCallbackCacheReturnValue
+            
+        return None
+
+        
+    document = property(_GetDocumentModel)
+    
+
+    def _GetDocument(self):
+        # Hack, just return the IDE document wrapper that corresponds to the runtime document model
+        # callers should have called ".document" before calling ".ideDocument"
+        if self._docCallbackCacheReturnValue:  # accelerator for caching document, got 4x speed up.
+            return self._docCallbackCacheReturnValue
+        return None
+    
+
+    ideDocument = property(_GetDocument)
+
+
+    def _typeEnumeration(self):
+        return basedocmgr.FILE_TYPE_LIST
+        
+
+    def _GetPhysicalFolder(self):
+        dir = None
+        if self.filePath:
+            dir = os.path.dirname(self.filePath)
+            if os.sep != '/':
+                dir = dir.replace(os.sep, '/')  # require '/' as delimiter
+        return dir
+
+
+    physicalFolder = property(_GetPhysicalFolder)
+    
+
+    def GetRelativeFolder(self, parentPath):
+        parentPathLen = len(parentPath)
+
+        dir = None
+        if self.filePath:
+            dir = os.path.dirname(self.filePath)
+            if dir.startswith(parentPath):
+                dir = "." + dir[parentPathLen:]  # convert to relative path
+            if os.sep != '/':
+                dir = dir.replace(os.sep, '/')  # always save out with '/' as path separator for cross-platform compatibility.
+        return dir
+
+
+    def AbsToRelativePath(self, parentPath):
+        """ Used to convert path to relative path for saving (disk format) """
+        parentPathLen = len(parentPath)
+
+        if self.filePath.startswith(parentPath):
+            self.filePath = "." + self.filePath[parentPathLen:]  # convert to relative path
+            if os.sep != '/':
+                self.filePath = self.filePath.replace(os.sep, '/')  # always save out with '/' as path separator for cross-platform compatibility.
+        else:
+            pass    # not a decendant of project, use absolute path
+
+
+    def RelativeToAbsPath(self, parentPath):
+        """ Used to convert path to absolute path (for any necessary disk access) """
+        if self.filePath.startswith("."):  # relative to project file
+            self.filePath = os.path.normpath(os.path.join(parentPath, self.filePath))
+
+
+    #----------------------------------------------------------------------------
+    # BaseDocumentMgr methods
+    #----------------------------------------------------------------------------
+
+    def _GetDoc(self):
+        # HACK: temporary solution.
+        import wx
+        import wx.lib.docview
+        if not self._doc:
+            docMgr = wx.GetApp().GetDocumentManager()
+            
+            doc = docMgr.CreateDocument(self.filePath, docMgr.GetFlags()|wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE|wx.lib.docview.DOC_NO_VIEW)
+            if (doc == None):  # already open
+                docs = docMgr.GetDocuments()
+                for d in docs:
+                    if d.GetFilename() == self.filePath:
+                        doc = d
+                        break
+            self._doc = doc
+        return self._doc
+        
+
+    def _GetLocalServiceProcessName(self):
+        # HACK: temporary solution to getting process name from wsdlag file.
+        return self._GetDoc().GetModel().processName
+
+
+    processName = property(_GetLocalServiceProcessName)
+
+
+    def _GetStateful(self):
+        # HACK: temporary solution to getting stateful from wsdlag file.
+        return self._GetDoc().GetModel().stateful
+
+
+    def _SetStateful(self, stateful):
+        # HACK: temporary solution to setting stateful from wsdlag file.
+        self._GetDoc().GetModel().stateful = stateful
+
+
+    stateful = property(_GetStateful, _SetStateful)
+
+
+    def _GetLocalServiceCodeFile(self):
+        # HACK: temporary solution to getting class name from wsdlag file.
+        return self._GetDoc().GetModel().localServiceCodeFile
+
+
+    def _SetLocalServiceCodeFile(self, codefile):
+        # HACK: temporary solution to setting class name from wsdlag file.
+        self._GetDoc().GetModel().localServiceCodeFile = codefile
+
+
+    localServiceCodeFile = property(_GetLocalServiceCodeFile, _SetLocalServiceCodeFile)
+
+
+    def _GetLocalServiceClassName(self):
+        # HACK: temporary solution to getting class name from wsdlag file.
+        return self._GetDoc().GetModel().localServiceClassName
+
+
+    def _SetLocalServiceClassName(self, className):
+        # HACK: temporary solution to setting class name from wsdlag file.
+        self._GetDoc().GetModel().localServiceClassName = className
+
+
+    localServiceClassName = property(_GetLocalServiceClassName, _SetLocalServiceClassName)
+
+
+
+# only activate this code if we programatically need to access these values
+##    def _GetRssServiceBaseURL(self):
+##        return self._GetDoc().GetModel().rssServiceBaseURL
+##
+##        
+##    def _SetRssServiceBaseURL(self, baseURL):
+##        self._GetDoc().GetModel().rssServiceBaseURL = baseURL
+##         
+##   
+##    rssServiceBaseURL = property(_GetRssServiceBaseURL, _SetRssServiceBaseURL)
+##
+##
+##    def _GetRssServiceRssVersion(self):
+##        return self._GetDoc().GetModel().rssServiceRssVersion
+##        
+##
+##    def _SetRssServiceRssVersion(self, rssVersion):
+##        self._GetDoc().GetModel().rssServiceRssVersion = rssVersion
+##            
+##
+##    rssServiceRssVersion = property(_GetRssServiceRssVersion, _SetRssServiceRssVersion)
+
+
+    def _GetServiceRefServiceType(self):
+        # HACK: temporary solution to getting service type from wsdlag file.
+        model = self._GetDoc().GetModel()
+        if hasattr(model, 'serviceType'):
+            return model.serviceType
+        else:
+            return None
+
+
+    def _SetServiceRefServiceType(self, serviceType):
+        # HACK: temporary solution to getting service type from wsdlag file.
+        self._GetDoc().GetModel().serviceType = serviceType
+        
+
+    serviceType = property(_GetServiceRefServiceType, _SetServiceRefServiceType)
+
+
+    def getExternalPackage(self):
+        # HACK: temporary solution to getting custom code filename from wsdlag file.
+        import activegrid.server.deployment as deploymentlib    
+        
+        appInfo = self._GetDoc().GetAppInfo()
+
+        if appInfo.language == None:
+            language = deploymentlib.LANGUAGE_DEFAULT
+        else:
+            language = appInfo.language
+            
+        if language == deploymentlib.LANGUAGE_PYTHON:
+            suffix = ".py"
+        elif language == deploymentlib.LANGUAGE_PHP:
+            suffix = ".php"
+        pyFilename = self.name + suffix
+        return self._GetDoc().GetAppDocMgr().fullPath(pyFilename)
+
+
+#----------------------------------------------------------------------------
+# Old Classes
+#----------------------------------------------------------------------------
+
+class Project_10:
+    """ Version 1.0, kept for upgrading to latest version.  Over time, this should be deprecated. """
+    __xmlname__ = "project"
+    __xmlrename__ = { "_files":"files"}
+    __xmlexclude__ = ('fileName',)
+    __xmlattributes__ = ["version"]
+
+
+    def __init__(self):
+        self.version = PROJECT_VERSION_050730
+        self._files = []
+
+
+    def initialize(self):
+        """ Required method for xmlmarshaller """
+        pass
+
+
+    def upgradeVersion(self):
+        currModel = Project()
+        for file in self._files:
+            currModel._files.append(ProjectFile(file))
+        return currModel
+
+
index 943607976fb1a401a2da1d7d0c737edc4c0e6436..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,48 +0,0 @@
-#----------------------------------------------------------------------------
-# Name:         __init__.py
-# Purpose:      Utilities
-#
-# Author:       Joel Hare
-#
-# Created:      7/28/04
-# CVS-ID:       $Id$
-# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
-# License:      wxWindows License
-#----------------------------------------------------------------------------
-
-import traceback
-import sys
-import os
-
-def isWindows():
-    return os.name == 'nt'
-
-def _generateMainModuleDir():
-    if sys.executable.find('python') != -1:
-        utilModuleDir = os.path.dirname(__file__)
-        if not os.path.isabs(utilModuleDir):
-            utilModuleDir = os.path.join(os.getcwd(), utilModuleDir)
-        mainModuleDir = os.path.normpath(os.path.join(utilModuleDir, os.path.join(os.path.pardir, os.path.pardir)))
-        if mainModuleDir.endswith('.zip'):
-            mainModuleDir = os.path.dirname(mainModuleDir) # Get rid of library.zip
-    else:
-        mainModuleDir = os.path.dirname(sys.executable)
-    return mainModuleDir
-
-mainModuleDir = _generateMainModuleDir()
-
-
-def _generatePythonExecPath():
-    if sys.executable.find('python') != -1:
-        pythonExecPath = sys.executable
-    else:
-        pythonExecPath = os.path.join(os.path.dirname(sys.executable), '3rdparty\python2.3\python')
-    return pythonExecPath
-
-pythonExecPath = _generatePythonExecPath()
-
-def getCommandNameForExecPath(execPath):
-    if isWindows():
-        return '"%s"' % execPath
-    return execPath
-
index e4b5e7fd4771ca0841919ce37de9db65942e7ada..227e9726fa17f9bf64eb6b69853feeb38a2d7111 100644 (file)
@@ -15,7 +15,10 @@ import os
 import re
 import traceback
 import logging
+import logging.config
 from activegrid.util.lang import *
+import activegrid.util.objutils as objutils
+import activegrid.util.sysutils as sysutils
 
 LEVEL_FATAL = logging.FATAL
 LEVEL_ERROR = logging.ERROR
@@ -23,6 +26,90 @@ LEVEL_WARN = logging.WARN
 LEVEL_INFO = logging.INFO
 LEVEL_DEBUG = logging.DEBUG
 
+EXCEPTION_INFO = 'exceptionInfo'
+
+LOG_MODE_IDE = 1
+LOG_MODE_TESTRUN = 2
+LOG_MODE_RUN = 3
+def initLogging(mode):
+    configFile = None
+    if (mode == LOG_MODE_IDE):
+        configFile = os.getenv("AG_LOGCONFIG_IDE")
+    elif (mode == LOG_MODE_TESTRUN):
+        configFile = os.getenv("AG_LOGCONFIG_TESTRUN")
+    else:
+        configFile = os.getenv("AG_LOGCONFIG_RUN")
+    if ((configFile == None) or not os.path.exists(configFile)):
+        if (mode == LOG_MODE_IDE):
+            configFile = "IDELog"
+        elif (mode == LOG_MODE_TESTRUN):
+            configFile = "TestRunLog"
+        else:
+            configFile = "RunLog"
+        configFile = sysutils.mainModuleDir + "/py" + configFile + ".ini"
+    if (os.path.exists(configFile)):
+        fileConfig(configFile)
+    else:
+        defaultStream = sys.stderr
+        if (mode == LOG_MODE_RUN):
+            defaultStream = sys.stdout
+        handler = logging.StreamHandler(defaultStream)
+        handler.setLevel(logging.INFO)
+        handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s"))
+        logging.getLogger().addHandler(handler)
+    return configFile
+
+ag_debugLogger = logging.getLogger("activegrid.debug")
+
+def log(logger, level, msg, *params):
+    if (logger == None):
+        logger = ag_debugLogger
+    apply(logger.log, (level, msg) + params)
+
+def fatal(logger, msg, *params):
+    apply(logger.fatal, (msg,) + params)
+
+def error(logger, msg, *params):
+    apply(logger.error, (msg,) + params)
+
+def warn(logger, msg, *params):
+    apply(logger.warn, (msg,) + params)
+
+def info(logger, msg, *params):
+    apply(logger.info, (msg,) + params)
+
+def debug(logger, msg, *params):
+    if (logger == None):
+        logger = ag_debugLogger
+    apply(logger.debug, (msg,) + params)
+    
+def setLevelFatal(logger):
+    logger.setLevel(LEVEL_FATAL)
+    
+def setLevelError(logger):
+    logger.setLevel(LEVEL_ERROR)
+    
+def setLevelWarn(logger):
+    logger.setLevel(LEVEL_WARN)
+    
+def setLevelInfo(logger):
+    logger.setLevel(LEVEL_INFO)
+    
+def setLevelDebug(logger):
+    logger.setLevel(LEVEL_DEBUG)
+    
+def isEnabledForError(logger):
+    return logger.isEnabledFor(LEVEL_ERROR)
+
+def isEnabledForWarn(logger):
+    return logger.isEnabledFor(LEVEL_WARN)
+
+def isEnabledForInfo(logger):
+    return logger.isEnabledFor(LEVEL_INFO)
+
+def isEnabledForDebug(logger):
+    return logger.isEnabledFor(LEVEL_DEBUG)
+
 TEST_MODE_NONE = 0
 TEST_MODE_DETERMINISTIC = 1
 TEST_MODE_NON_DETERMINISTIC = 2
@@ -38,8 +125,11 @@ def getTestMode():
     global agTestMode
     return agTestMode
     
-def testMode(normalObj, testObj=None):
-    if getTestMode() > TEST_MODE_NONE:
+def testMode(normalObj, testObj=None, nonDeterministicObj=None):
+    testMode = getTestMode()
+    if testMode > TEST_MODE_NONE:
+        if ((nonDeterministicObj != None) and (testMode == TEST_MODE_NON_DETERMINISTIC)):
+            return nonDeterministicObj
         return testObj
     return normalObj
 
@@ -68,18 +158,41 @@ def _fileNameReplacement(match):
 def _fileNameReplacementPHP(match):
     return "%s...%s" % (match.group(1), match.group(2).replace(os.sep, "/"))
     
-def getTraceback():
-    extype, val, tb = sys.exc_info()
-    tbs = "\n"
-    for s in traceback.format_tb(tb):
-        tbs += s
+def formatTraceback(tb=None):
+    if (tb == None):
+        extype, val, tb = sys.exc_info()
+    tbs = "\n" + "".join(traceback.format_tb(tb))
     return tbs
 
+def formatExceptionCause(cause, stacktrace=False):
+    if (cause == None):
+        return ""
+    tbs = ""
+    if (stacktrace):
+        tbs = formatTraceback()
+    return "Caused by %s.%s: %s%s" % (cause.__module__, cause.__class__.__name__, str(cause), tbs)
+
+def addExceptionInfo(e, key, value):
+    if not hasattr(e, EXCEPTION_INFO):
+        try:
+            setattr(e, EXCEPTION_INFO, {})
+        except:
+            return # Make sure we still report the real exception even if we can't add the extra info
+    if not e.exceptionInfo.has_key(key): # Never overwrite exception info since we assume earlier info is more specific
+        e.exceptionInfo[key] = value
+            
 def reportException(out=None, stacktrace=False, diffable=False, exception=None):
-    if (True): # exception == None):
+    exstr = exceptionToString(exception, stacktrace, diffable)
+    if (out == None):
+        print exstr
+    else:
+        print >> out, exstr
+
+def exceptionToString(exception=None, stacktrace=False, diffable=False):
+    if (exception == None):
         extype, val, t = sys.exc_info()
     else:
-        extype = type(exception)
+        extype = objutils.typeToString(exception)
         val = exception
         if (stacktrace):
             e,v,t = sys.exc_info()
@@ -87,17 +200,169 @@ def reportException(out=None, stacktrace=False, diffable=False, exception=None):
         exstr = removeFileRefs(str(val))
     else:
         exstr = str(val)
-    if (out == None):
-        print "Got Exception = %s: %s" % (extype, exstr)
-    else:
-        print >> out, "Got Exception = %s: %s" % (extype, exstr)
+    if hasattr(val, EXCEPTION_INFO):
+        firstTime = True
+        for infoKey, infoValue in getattr(val, EXCEPTION_INFO).items():
+            if firstTime:
+                prefix = " EXTRA INFO:"
+                firstTime = False
+            else:
+                prefix = ","
+            exstr += ("%s %s=%s" % (prefix, infoKey, infoValue))
+    result = "Got Exception = %s: %s" % (extype, exstr)
     if (stacktrace):
         fmt = traceback.format_exception(extype, val, t)
         for s in fmt:
             if (diffable):
                 s = removeFileRefs(s)
-            if (out == None):
-                print s
+            result = result + "\n" + s
+    return result
+    
+def fileConfig(fname, defaults=None):
+    """
+    This is copied from logging.config so that we could fix the class lookup of
+    handlers.  Previously handlers had to be defined in logging.handlers and we
+    need to be able to define our own.
+    """
+    import ConfigParser, string
+
+    cp = ConfigParser.ConfigParser(defaults)
+    if hasattr(cp, 'readfp') and hasattr(fname, 'readline'):
+        cp.readfp(fname)
+    else:
+        cp.read(fname)
+    #first, do the formatters...
+    flist = cp.get("formatters", "keys")
+    if len(flist):
+        flist = string.split(flist, ",")
+        formatters = {}
+        for form in flist:
+            sectname = "formatter_%s" % form
+            opts = cp.options(sectname)
+            if "format" in opts:
+                fs = cp.get(sectname, "format", 1)
             else:
-                print >> out, s
-            
+                fs = None
+            if "datefmt" in opts:
+                dfs = cp.get(sectname, "datefmt", 1)
+            else:
+                dfs = None
+            f = logging.Formatter(fs, dfs)
+            formatters[form] = f
+    #next, do the handlers...
+    #critical section...
+    logging._acquireLock()
+    try:
+##        try:
+            #first, lose the existing handlers...
+            logging._handlers.clear()
+            #now set up the new ones...
+            hlist = cp.get("handlers", "keys")
+            if len(hlist):
+                hlist = string.split(hlist, ",")
+                handlers = {}
+                fixups = [] #for inter-handler references
+                for hand in hlist:
+##                    try:
+                        sectname = "handler_%s" % hand
+                        classname = cp.get(sectname, "class")
+                        opts = cp.options(sectname)
+                        if "formatter" in opts:
+                            fmt = cp.get(sectname, "formatter")
+                        else:
+                            fmt = ""
+                        klass = None
+                        try:
+                            klass = eval(classname, vars(logging))
+                        except:
+                            pass
+                        if (klass == None):
+                            klass = objutils.classForName(classname)
+                        args = cp.get(sectname, "args")
+                        args = eval(args, vars(logging))
+                        h = apply(klass, args)
+                        if "level" in opts:
+                            level = cp.get(sectname, "level")
+                            h.setLevel(logging._levelNames[level])
+                        if len(fmt):
+                            h.setFormatter(formatters[fmt])
+                        #temporary hack for FileHandler and MemoryHandler.
+                        if klass == logging.handlers.MemoryHandler:
+                            if "target" in opts:
+                                target = cp.get(sectname,"target")
+                            else:
+                                target = ""
+                            if len(target): #the target handler may not be loaded yet, so keep for later...
+                                fixups.append((h, target))
+                        handlers[hand] = h
+##                    except Exception, e:     #if an error occurs when instantiating a handler, too bad
+##                        pass    #this could happen e.g. because of lack of privileges
+                #now all handlers are loaded, fixup inter-handler references...
+                for fixup in fixups:
+                    h = fixup[0]
+                    t = fixup[1]
+                    h.setTarget(handlers[t])
+            #at last, the loggers...first the root...
+            llist = cp.get("loggers", "keys")
+            llist = string.split(llist, ",")
+            llist.remove("root")
+            sectname = "logger_root"
+            root = logging.root
+            log = root
+            opts = cp.options(sectname)
+            if "level" in opts:
+                level = cp.get(sectname, "level")
+                log.setLevel(logging._levelNames[level])
+            for h in root.handlers[:]:
+                root.removeHandler(h)
+            hlist = cp.get(sectname, "handlers")
+            if len(hlist):
+                hlist = string.split(hlist, ",")
+                for hand in hlist:
+                    log.addHandler(handlers[hand])
+            #and now the others...
+            #we don't want to lose the existing loggers,
+            #since other threads may have pointers to them.
+            #existing is set to contain all existing loggers,
+            #and as we go through the new configuration we
+            #remove any which are configured. At the end,
+            #what's left in existing is the set of loggers
+            #which were in the previous configuration but
+            #which are not in the new configuration.
+            existing = root.manager.loggerDict.keys()
+            #now set up the new ones...
+            for log in llist:
+                sectname = "logger_%s" % log
+                qn = cp.get(sectname, "qualname")
+                opts = cp.options(sectname)
+                if "propagate" in opts:
+                    propagate = cp.getint(sectname, "propagate")
+                else:
+                    propagate = 1
+                logger = logging.getLogger(qn)
+                if qn in existing:
+                    existing.remove(qn)
+                if "level" in opts:
+                    level = cp.get(sectname, "level")
+                    logger.setLevel(logging._levelNames[level])
+                for h in logger.handlers[:]:
+                    logger.removeHandler(h)
+                logger.propagate = propagate
+                logger.disabled = 0
+                hlist = cp.get(sectname, "handlers")
+                if len(hlist):
+                    hlist = string.split(hlist, ",")
+                    for hand in hlist:
+                        logger.addHandler(handlers[hand])
+            #Disable any old loggers. There's no point deleting
+            #them as other threads may continue to hold references
+            #and by disabling them, you stop them doing any logging.
+            for log in existing:
+                root.manager.loggerDict[log].disabled = 1
+##        except:
+##            import traceback
+##            ei = sys.exc_info()
+##            traceback.print_exception(ei[0], ei[1], ei[2], None, sys.stderr)
+##            del ei
+    finally:
+        logging._releaseLock()
diff --git a/wxPython/samples/ide/activegrid/util/appdirs.py b/wxPython/samples/ide/activegrid/util/appdirs.py
new file mode 100644 (file)
index 0000000..7b73d5c
--- /dev/null
@@ -0,0 +1,59 @@
+#----------------------------------------------------------------------------
+# Name:         appdirs.py
+# Purpose:      Utilities for retrieving special application dirs
+#
+# Author:       Kevin Ollivier
+#
+# Created:      8/27/05
+# CVS-ID:       $Id$
+# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
+# License:      wxWindows License
+#----------------------------------------------------------------------------
+
+# NOTE: This was made a separate file because it depends upon the 
+# wx.StandardPaths module, and thus, on wxWidgets, unlike other
+# utils modules. I wanted to ensure this module is never loaded
+# from the web server, etc.
+
+import sys
+import os
+import string
+import wx
+
+def isWindows():
+    return os.name == 'nt'
+
+def _generateDocumentsDir():
+    path = ""
+    if sys.platform == "win32":
+        from win32com.shell import shell, shellcon
+        path=shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)
+    elif sys.platform == "darwin":
+        import macfs, MACFS
+        fsspec_disk, fsspec_desktop = macfs.FindFolder( MACFS.kOnSystemDisk, MACFS.kDocumentsFolderType, 0)
+        path = macfs.FSSpec((fsspec_disk, fsspec_desktop, '')).as_pathname()
+    
+    if path == "":
+        path = os.path.expanduser("~")
+
+    return path
+            
+documents_folder = _generateDocumentsDir()
+
+# NOTE: We don't set this at startup because wxStandardPaths needs a running
+# application object. This makes sure the wxApp will always be created when
+# we get the folder.
+def getAppDataFolder():
+    # wxStandardPaths requires a running app
+    if wx.GetApp() and wx.Platform != "__WXGTK__":
+        data_folder = wx.StandardPaths.Get().GetUserDataDir()
+        if not os.path.exists(data_folder):
+            os.mkdir(data_folder)
+        return data_folder
+    else:
+        # wxBug: on *nix, it wants to point to ~/.appname, but
+        # so does wxConfig... For now, redirect this to ~/.appbuilder
+        # when this is fixed, we'll migrate settings to the correct place
+        return os.path.join(os.path.expanduser("~"), ".appbuilder")
+
+    return ""
diff --git a/wxPython/samples/ide/activegrid/util/fileutils.py b/wxPython/samples/ide/activegrid/util/fileutils.py
new file mode 100644 (file)
index 0000000..2a75997
--- /dev/null
@@ -0,0 +1,348 @@
+#----------------------------------------------------------------------------
+# Name:         fileutils.py
+# Purpose:      Active grid miscellaneous utilities
+#
+# Author:       Jeff Norton
+#
+# Created:      12/10/04
+# CVS-ID:       $Id$
+# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
+# License:      wxWindows License
+#----------------------------------------------------------------------------
+
+import logging
+import copy
+import os
+import shutil
+import sys
+import zipfile
+
+import activegrid.util.aglogging as aglogging
+import activegrid.util.sysutils as sysutils
+from activegrid.util.lang import *
+
+global fileutilsLogger
+fileutilsLogger = logging.getLogger("activegrid.util.fileutils")
+# FATAL : No logging
+# ERROR : No logging
+# WARN  : No logging
+# INFO  : No logging
+# DEBUG : debugging
+aglogging.setLevelFatal(fileutilsLogger)
+#logging.getLogger().addHandler(logging.StreamHandler(sys.stderr))
+
+
+def makeDirsForFile(filename):
+    d = os.path.dirname(filename)
+    if (not os.path.exists(d)):
+        os.makedirs(d)
+
+def createFile(filename, mode='w'):
+    f = None
+    if (not os.path.exists(filename)):
+        makeDirsForFile(filename)
+    f = file(filename, mode)
+    return f
+
+def compareFiles(file1, file2):
+##    result = filecmp.cmp(file1, file2)
+##    if result:
+##        return 0
+##    return -1
+    file1.seek(0)
+    file2.seek(0)
+    while True:
+        line1 = file1.readline()
+        line2 = file2.readline()
+        if (len(line1) == 0):
+            if (len(line2) == 0):
+                return 0
+            else:
+                return -1
+        elif (len(line2) == 0):
+            return -1
+        elif (line1 != line2):
+            line1 = line1.replace(" ", "")
+            line2 = line2.replace(" ", "")
+            if (line1 != line2):
+                len1 = len(line1)
+                len2 = len(line2)
+                if ((abs(len1 - len2) == 1) and (len1 > 0) and (len2 > 0) 
+                    and (line1[-1] == "\n") and (line2[-1] == "\n")):
+                    if (len1 > len2):
+                        longer = line1
+                        shorter = line2
+                    else:
+                        shorter = line1
+                        longer = line2
+                    if ((longer[-2] == "\r") and (longer[:-2] == shorter[:-1])):
+                        continue
+                    if ((longer[-2:] == shorter[-2:]) and (longer[-3] == "\r") and (longer[:-3] == shorter[:-2])):
+                        continue
+                return -1
+
+def expandVars(value):
+    """Syntax: ${myvar,default="default value"}"""
+    import activegrid.runtime as runtime
+    sx = value.find("${")
+    if (sx >= 0):
+        result = asString(value[:sx])
+        endx = value.find("}")
+        if (endx > 1):
+            defaultValue = None
+            defsx = value.find(",default=\"")
+            if ((defsx > sx) and (defsx < endx)):
+                varname = value[sx+2:defsx]
+                if (value[endx-1] == '"'):
+                    defaultValue = value[defsx+10:endx-1]
+            if (defaultValue == None):
+                varname = value[sx+2:endx]
+            if (varname == "AG_SYSTEM"):
+                varval = runtime.appInfo.getSystemDir()
+            elif (varname == "AG_SYSTEM_STATIC"):
+                varval = runtime.appInfo.getSystemStaticDir()
+            elif (varname == "AG_APP"):
+                varval = runtime.appInfo.getAppDir()
+            elif (varname == "AG_APP_STATIC"):
+                varval = runtime.appInfo.getAppStaticDir()
+            else:
+                varval = os.getenv(varname)
+            if ((varval == None) and (defaultValue != None)):
+                varval = defaultValue
+            if (varval == None):
+                result += value[sx:endx+1]
+            else:
+                result += varval
+            return result + expandVars(value[endx+1:])
+    return value
+
+def toPHPpath(path, otherdir=None):
+    return convertSourcePath(path, "php", otherdir=otherdir)
+                    
+def toPythonpath(path, otherdir=None):
+    return convertSourcePath(path, "python", otherdir=otherdir)
+                    
+def toUnixPath(path):
+    if (path != None and os.sep != '/'):
+        path = path.replace(os.sep, '/')
+    return path
+
+def convertSourcePath(path, to, otherdir=None):
+    fromname = "python"
+    if (to == "python"):
+        fromname = "php"
+    pythonNode = os.sep + fromname + os.sep
+    ix = path.find(pythonNode)
+    if (ix < 0):
+        ix = path.find(fromname) - 1
+        if ((ix < 0) or (len(path) <= ix+7)
+            or (path[ix] not in ("\\", "/")) or (path[ix+7]  not in ("\\", "/"))):
+            raise Exception("Not in a %s source tree.  Cannot create file name for %s." % (fromname, path))
+        if (otherdir == None):
+            return path[:ix+1] + to + path[ix+7:]
+        else:
+            return otherdir + path[ix+7:]
+    if (otherdir == None):
+        return path.replace(pythonNode, os.sep + to + os.sep)
+    else:
+        return otherdir + path[ix+7:]
+
+
+def visit(directory, files, extension):
+    testdirs = os.listdir(directory)
+    for thing in testdirs:
+        fullpath = os.path.join(directory, thing)
+        if (os.path.isdir(fullpath)):
+            visit(fullpath, files, extension)
+        elif thing.endswith(extension):
+            fullname = os.path.normpath(os.path.join(directory, thing))
+            if not fullname in files:
+                files.append(fullname)
+def listFilesByExtensionInPath(path=[], extension='.lyt'):
+    #Collect input and output arguments into one bunch
+    retval = []
+    for directory in path:
+        visit(directory, retval, extension)
+    return retval
+
+def getFileLastModificationTime(fileName):
+    return os.path.getmtime(fileName)
+
+def findFileLocation(location, fileName):
+    i = fileName.rfind(os.sep)
+    if i > 0:
+        fileName = fileName[:i]
+    while location[0:2] == '..' and location[2:3] == os.sep:
+        location = location[3:]
+        i = fileName.rfind(os.sep)
+        fileName = fileName[:i]
+    absPath = fileName + os.sep + location
+    return absPath
+
+def getAllExistingFiles(files, basepath=None, forceForwardSlashes=False):
+    """For each file in files, if it exists, adds its absolute path to the rtn list. If file is a dir, calls this function recursively on all child files in the dir.
+    If basepath is set, and if the file being processed is relative to basedir, adds that relative path to rtn list instead of the abs path.
+    Is this is Windows, and forceForwardSlashes is True, make sure returned paths only have forward slashes."""
+    if isinstance(files, basestring):
+        files = [files]
+    rtn = []
+    for file in files:
+        if os.path.exists(file): 
+            if os.path.isfile(file):
+                if basepath and hasAncestorDir(file, basepath):
+                    rtn.append(getRelativePath(file, basepath))
+                else:
+                    rtn.append(os.path.abspath(str(file)))
+            elif os.path.isdir(file):
+                dircontent = [os.path.join(file, f) for f in os.listdir(file)]
+                rtn.extend(getAllExistingFiles(dircontent, basepath))
+                
+    if forceForwardSlashes and sysutils.isWindows():
+        newRtn = []
+        for f in rtn:
+            newRtn.append(f.replace("\\", "/"))
+        rtn = newRtn
+        
+    return rtn
+
+def hasAncestorDir(file, parent):
+    """Returns true if file has the dir 'parent' as some parent in its path."""
+    return getRelativePath(file, parent) != None
+
+def getRelativePath(file, basedir):
+    """Returns relative path from 'basedir' to 'file', assuming 'file' lives beneath 'basedir'. If it doesn't, returns None."""
+    file = os.path.abspath(file)
+    parent = os.path.abspath(basedir)
+
+    if file == parent:
+        return None
+
+    if file.startswith(parent):
+        return file[len(parent)+1:]
+    
+    return None
+
+def isEmptyDir(dir):
+    if not os.path.isdir(dir):
+        return False
+    return len(os.listdir(dir)) == 0
+
+ifDefPy()
+def zip(zipfilepath, basedir=None, files=None):
+    """Zip all files in files and save zip as zipfilepath. If files is None, zip all files in basedir. For all files to be zipped, if they are relative to basedir, include the relative path in the archive."""
+    
+    if not files and not basedir:
+        raise AssertionError("Either 'basedir' or 'files' must be set")
+            
+    if not files:
+        aglogging.debug(fileutilsLogger,\
+                        "Looking for files to zip in %s" % basedir)
+        files = getAllExistingFiles(basedir)
+    else:
+        # removes files that don't exist and gets abs for each
+        files = getAllExistingFiles(files) 
+
+    if len(files) == 0:
+        aglogging.debug(fileutilsLogger, "No files to zip, nothing to do")
+        return
+    
+    z = zipfile.ZipFile(zipfilepath, mode="w", compression=zipfile.ZIP_DEFLATED)
+
+    try:
+        for file in files:
+            arcname = None
+            if basedir:
+                arcname = getRelativePath(file, basedir)
+            if not arcname:
+                arcname = file
+                aglogging.debug(fileutilsLogger,\
+                                "%s: adding %s with arcname %s" %\
+                                (zipfilepath, file, arcname))
+            z.write(file, arcname)
+    finally:
+        z.close()
+endIfDef()        
+
+
+ifDefPy()
+def unzip(zipfilepath, extractdir):
+    """Unzip zipfilepath into extractdir."""
+    z = zipfile.ZipFile(zipfilepath, mode="r")
+    for info in z.infolist():
+        filename = os.path.join(extractdir, info.filename)
+        try:
+            dir = os.path.dirname(filename)
+            aglogging.debug(fileutilsLogger, "Creating dir %s" % dir)
+            os.makedirs(dir) # do we have to worry about permissions?
+        except:
+            pass
+        if os.path.isdir(filename):
+            continue
+        aglogging.debug(fileutilsLogger,\
+                       ("Writing arcfile %s to %s" % (info.filename, filename)))
+        f = open(filename, "w")
+        f.write(z.read(info.filename))
+        f.close()
+endIfDef()
+
+ifDefPy()
+def copyFile(src, dest):
+    """Copies file src to dest. Creates directories in 'dest' path if necessary."""
+    destdir = os.path.dirname(dest)
+    if not os.path.exists(destdir):
+        os.makedirs(destdir)
+    shutil.copy(src, dest)
+endIfDef()
+
+ifDefPy()
+def copyDir(src, dest):
+    """Copies dir 'src' into dir 'dest'. Creates 'dest' if it does not exist."""
+    shutil.copytree(src, dest)
+endIfDef()
+
+ifDefPy()
+def remove(file):
+    if not os.path.exists(file):
+        return
+    if os.path.isfile(file):
+        os.remove(file)
+    elif os.path.isdir(file):
+        shutil.rmtree(file)
+endIfDef()
+
+ifDefPy()
+import warnings
+warnings.filterwarnings("ignore", message="tmpnam is a potential security risk to your program")
+def getTmpFile():
+    return os.tmpnam()
+endIfDef()
+
+ifDefPy()
+#@accepts str, dict, str, str, boolean
+def replaceToken(infilepath, tokens={}, outfilepath=None, delim="@@",\
+                 useEnv=False):
+    """Replaces tokens of form 'delim'<tokenname>'delim' in file at 'infilepath', using values in dict 'tokens'. If 'outfilepath' is set, writes output to 'outfilepath', if not set, overwrites original file. If 'useEnv' is True, adds os.environ to 'tokens'. This makes it possible to define an env var FOO=BLAH, and have @@FOO@@ be replaced with BLAH, without explicitly passing FOO=BLAH in 'tokens'. Note that entries in 'tokens' take precedence over entries in os.environ."""
+
+    if useEnv:
+        for key, val in os.environ.items():
+            # passed in tokens take precedence
+            if not tokens.has_key(key):
+                tokens[key] = val        
+    
+    f = open(infilepath, "r")
+    try:
+        content = f.read()
+    finally:
+        if f: f.close()
+
+    for token, value in tokens.items():
+        content = content.replace("%s%s%s" % (delim, token , delim), str(value))
+
+    if not outfilepath: outfilepath = infilepath
+    f = open(outfilepath, "w")
+    try:
+        f.write(content)
+    finally:
+        if f: f.close()
+endIfDef()
index 56777fa37014f414f3429503594239f1dd08c821..9519e174fab8ef6e28026320d32d812a40bd5c9f 100644 (file)
@@ -65,3 +65,9 @@ def ifDefPy(comment=False):
     
 def endIfDef():
     pass
+    
+def ag_isPHP():
+    return False
+    
+def ag_isPython():
+    return True
index 9658aa2a2aa5a52816c46ed3a241323739a1f17e..79cb02919e323217b1039171b650b2196b812a80 100644 (file)
@@ -14,36 +14,192 @@ import logging
 import traceback
 import sys
 import os
+import __builtin__
+import types
+import xml.sax.saxutils as saxutils
 from types import *
+from activegrid.util.lang import *
 
+FUNCTION_HAS_ATTR = '_hasAttr'
+FUNCTION_GET_ATTR = '_getAttr'
+FUNCTION_SET_ATTR = '_setAttr'
+FUNCTION_DEL_ATTR = '_delAttr'
+
+def hasRawAttr(obj, name):
+    if obj == None:
+        return False
+    if name != FUNCTION_HAS_ATTR and hasattr(obj, FUNCTION_HAS_ATTR):
+        return obj._hasAttr(name)
+    return obj.__dict__.has_key(name)
+    
+def getRawAttr(obj, name):
+    if name != FUNCTION_GET_ATTR and hasattr(obj, FUNCTION_GET_ATTR):
+        return obj._getAttr(name)
+    return obj.__dict__.get(name)
+    
+def setRawAttr(obj, name, value):
+    if name != FUNCTION_SET_ATTR and hasattr(obj, FUNCTION_SET_ATTR):
+        obj._setAttr(name, value)
+    else:
+        obj.__dict__[name] = value
+    
+def delRawAttr(obj, name):
+    if name != FUNCTION_DEL_ATTR and hasattr(obj, FUNCTION_DEL_ATTR):
+        obj._delAttr(name)
+    else:
+        del obj.__dict__[name]
+
+def getStaticAttr(obj, attr):
+    if (isinstance(obj, types.TypeType)):
+        classDesc = obj
+    else:
+        classDesc = obj.__class__
+    if (hasattr(classDesc, attr)):
+        return getattr(classDesc, attr)
+    return None
+    
+def setStaticAttr(obj, attr, value):
+    if (isinstance(obj, types.TypeType)):
+        classDesc = obj
+    else:
+        classDesc = obj.__class__
+    setattr(classDesc, attr, value)
+
+def moduleForName(moduleName):
+    module = None
+    pathList = moduleName.split('.')
+    if (len(moduleName) > 0):
+        module = __import__(moduleName)
+        for name in pathList[1:]:
+            if (name in module.__dict__):
+                module = module.__dict__[name]
+            else:
+                module = None
+                break
+    return module
+    
+def typeForName(typeName):
+    i = typeName.rfind('.')
+    if (i >= 0):
+        module = moduleForName(typeName[:i])
+        if (module != None):
+            name = typeName[i+1:]
+            if (name in module.__dict__):
+                return module.__dict__[name]
+    elif __builtin__.__dict__.has_key(typeName):
+        return __builtin__.__dict__[typeName]
+    return None
+    
+def functionForName(functionName):
+    ftype = typeForName(functionName)
+    if (isinstance(ftype, (types.FunctionType, types.MethodType, types.BuiltinFunctionType, types.BuiltinMethodType))):
+        return ftype
+    return None
+    
 def classForName(className):
-    pathList = className.split('.')
-    moduleName = '.'.join(pathList[:-1])
-    code = __import__(moduleName)
-    for name in pathList[1:]:
-        code = code.__dict__[name]
-    return code
+    ctype = typeForName(className)
+    if (isinstance(ctype, (types.ClassType, types.TypeType))):
+        return ctype
+    return None
 
-def hasPropertyValue(obj, attr):
-    hasProp = False
-    try:
-        prop = obj.__class__.__dict__[attr]
-        if (isinstance(prop, property)):
-            hasProp = hasattr(obj, attr)
-            if (hasProp):
-                # It's a property and it has a value but sometimes we don't want it.
-                # If there is a _hasattr method execute it and the
-                # result will tell us whether to include this value
-                try:
-                    hasProp = obj._hasattr(attr)
-                except:
-                    pass
-    except KeyError:
-        pass
-    return hasProp
+def newInstance(className, objargs=None):
+    "dynamically create an object based on the className and return it."
 
-def toDiffableString(value):
-    s = str(value)
+    if not isinstance(objargs, list):
+        objargs = [objargs]
+
+    if className == "None":
+        return None
+    elif className == "bool":
+        if ((len(objargs) < 1) or (objargs[0].lower() == "false") or (not objargs[0])):
+            return False
+        return True
+    if className == "str" or className == "unicode": # don"t strip: blanks are significant
+        if len(objargs) > 0:
+            try:
+                return saxutils.unescape(objargs[0]).encode()
+            except:
+                return "?"
+        else:
+            return ""
+
+    classtype = classForName(className)
+    if (classtype == None):
+        raise Exception("Could not find class %s" % className)
+        
+    if (len(objargs) > 0):
+        return classtype(*objargs)
+    else:
+        return classtype()
+
+def getClassProperty(classType, propertyName):
+    return getattr(classType, propertyName)
+    
+def toDiffableRepr(value, exclude=None):
+    if (value == None):
+        return "None"
+##    elif (isinstance(value, ObjectType) and hasattr(value, "__dict__")):
+##        if (exclude == None):
+##            exclude = []
+##        s = "%s(%s)" % (type(value), toDiffableString(value.__dict__, exclude))
+    elif (not isinstance(value, (BooleanType, ClassType, ComplexType, DictType, DictionaryType, 
+                               FloatType, IntType, ListType, LongType, StringType, TupleType, 
+                               UnicodeType, BufferType, BuiltinFunctionType, BuiltinMethodType,
+                               CodeType, FrameType, FunctionType, GeneratorType, InstanceType,
+                               LambdaType, MethodType, ModuleType, SliceType, TracebackType,
+                               TypeType, XRangeType))):
+        if (hasattr(value, "__str__")):
+            s = str(value)
+        elif (hasattr(value, "__dict__")):
+            s = "%s(%s)" % (type(value), toDiffableString(value.__dict__, exclude))
+        else:
+            s = str(type(value))
+        ix2 = s.find(" object at 0x")
+        if (ix2 > 0):
+            ix = s.rfind(".")
+            if (ix > 0):
+                s = "<class %s>" %s[ix+1:ix2]
+    elif (isinstance(value, bool)):
+        if (value):
+            return "True"
+        else:
+            return "False"
+    elif (isinstance(value, (tuple, list))):
+        items = []
+        for v in value:
+            if (isinstance(v, basestring)):
+                if (v.find("'") >= 0):
+                    items.append('"%s"' % v)
+                else:
+                    items.append("'%s'" % v)
+            else:
+                items.append(toDiffableString(v, exclude))
+        s = "[" + ", ".join(items) + "]"
+    elif (isinstance(value, dict)):
+        if (exclude == None):
+            exclude = []
+        items = []
+        for key, val in value.iteritems():
+            if (isinstance(val, UnicodeType)):
+                items.append("'%s': u'%s'" % (key, toDiffableString(val, exclude)))
+            elif (isinstance(val, basestring)):
+                items.append("'%s': '%s'" % (key, toDiffableString(val, exclude)))
+            else:
+                items.append("'%s': %s" % (key, toDiffableString(val, exclude)))
+        s = "{" + ", ".join(items) + "}"
+    else:
+        s = str(value)
+    return s
+    
+def toDiffableString(value, exclude=None):
+    if (value == None):
+        return "None"
+    if ((exclude != None) and not isinstance(value, (basestring, int))):
+        for v in exclude:
+            if (v is value):
+                return "<recursive reference>"
+        exclude.append(value)
+    s = toDiffableRepr(value)
     ds = ""
     i = s.find(" at 0x") 
     start = 0
@@ -54,22 +210,43 @@ def toDiffableString(value):
         ds += s[start:i]
         start = j
         i = s.find(" at 0x", start) 
-    return ds + s[start:]
-
+    ds = ds + s[start:]
+    i = ds.find("\\src\\")
+    if (i < 0):
+        i = ds.find("/src/")
+    else:
+        ds = ds.replace("\\", "/")
+    if (i > 0):
+        i += 4
+        if (ds[i:i+5] == "\\php\\"):
+            i += 4
+        elif (ds[i:i+8] == "\\python\\"):
+            i += 7
+        ds = "filepath: ..." + ds[i:]
+    return ds
+        
 def toString(value, options=0):
     if ((options & PRINT_OBJ_DIFFABLE) > 0):
         return toDiffableString(value)
+    elif (not isinstance(value, basestring)):
+        return str(value)
     return value
 
-def toTypeString(obj):
+def typeToString(obj, options=0):
     if (isinstance(obj, BooleanType)):
         return "bool"
     elif (isinstance(obj, UnicodeType)):
+        if ((options & PRINT_OBJ_DIFFABLE) > 0):
+            return "string"
         return "unicode"
     elif (isinstance(obj, basestring)):
         return "string"
     elif (isinstance(obj, IntType)):
         return "int"
+    elif (isinstance(obj, LongType)):
+        if ((options & PRINT_OBJ_DIFFABLE) > 0):
+            return "int"
+        return "long"
     elif (isinstance(obj, FloatType)):
         return "float"
     elif (type(obj) == ListType):
@@ -79,18 +256,46 @@ def toTypeString(obj):
     elif (isinstance(obj, TupleType)):
         return "tuple"
     elif (isinstance(obj, InstanceType)):
-        return type(obj)
+##        ds = str(type(obj))
+        ds = "<class %s.%s> " % (obj.__module__, obj.__class__.__name__)
     else:
-        return type(obj)
+        ds = str(type(obj))
+    if (options == 0):
+        import activegrid.util.aglogging
+        options = activegrid.util.aglogging.testMode(0, PRINT_OBJ_DIFFABLE)
+    if ((options & PRINT_OBJ_DIFFABLE) > 0):
+        if (ds.startswith("<class ")):
+            ix = ds.rfind(".")
+            if (ix < 0):
+                ix = 8
+            ds = "<class %s>" % ds[ix+1:-2]
+    return ds
+    
+def nameToString(name, options=0):
+    if (name.startswith("_v_")):
+        return name[3:]
+    if ((options & PRINT_OBJ_DIFFABLE) > 0):
+        ix = name.find("__")
+        if ((ix > 1) and name.startswith("_")):
+            name = name[ix:]
+        return toDiffableString(name)
+    return name
             
 PRINT_OBJ_GETATTR = 1
 PRINT_OBJ_HIDE_INTERNAL = 2
 PRINT_OBJ_COMPACT = 4
 PRINT_OBJ_NONONE = 8
 PRINT_OBJ_DIFFABLE = 16
+PRINT_OBJ_HIDE_EXCLUDED = 32
 PRINT_OBJ_INTERNAL = 512
 
-def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent=30):
+def printObject(out, object, name=None, indent=0, flags=0, exclude=None, remove=None, maxIndent=30):
+    if (name == None):
+        name = ""
+##    elif (name.endswith("_") and not name.endswith("__")):
+##        name = name[:-1]
+    if ((remove != None) and (name in asDict(remove))):
+        return False
     if ((maxIndent != None) and (indent > maxIndent)):
         print >> out, " "*indent, "%s: %s" % (name, toString(str(object), flags)),
         if ((flags & PRINT_OBJ_INTERNAL) == 0):
@@ -98,12 +303,11 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
         return True
     finalNewLine = False
     printed = True
-##    if (exclude == None):
-##        exclude = []
-    if ((flags & PRINT_OBJ_COMPACT) > 0):
-        if (exclude and object in exclude):
+    if ((flags & (PRINT_OBJ_COMPACT | PRINT_OBJ_HIDE_EXCLUDED)) > 0):
+        if ((exclude != None) and ((object in exclude) or (name in exclude))):
             return
-        indent = 0
+        if ((flags & PRINT_OBJ_COMPACT) > 0):
+            indent = 0
     if ((flags & PRINT_OBJ_INTERNAL) == 0):
         finalNewLine = True
     flags |= PRINT_OBJ_INTERNAL
@@ -113,23 +317,23 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
         else:
             finalNewLine = False
             printed = False
-    elif (name.startswith("_") and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
+    elif (name.startswith("_") and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0) and not name.startswith("_v_")):
         finalNewLine = False
         printed = False
     elif (isinstance(object, (list, tuple))):
         if ((exclude != None) and object in exclude):
-            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (already printed)",
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (already printed)",
         elif ((exclude != None) and name in exclude):
-            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (excluded)",
         else:
             if ((exclude != None) and (len(object) > 0)): exclude.append(object)
-            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = %d" % len(object),
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = %d" % len(object),
             for i, o in enumerate(object):
                 print >> out
-                printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
+                printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
     elif (isinstance(object, dict)):
         if ((exclude != None) and object in exclude):
-            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " (already printed)",
         else:
             if ((exclude != None) and (len(object) > 0)): exclude.append(object)
             if (len(name) > 0):
@@ -147,51 +351,62 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
                     n = key
                     if (not (isinstance(n, basestring))):
                         n = str(n)
+                    else:
+                        n = nameToString(n, flags)
                     if ((not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
-                        if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, maxIndent=maxIndent):
+                        if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, remove=remove, maxIndent=maxIndent):
                             if ((flags & PRINT_OBJ_COMPACT) == 0):
                                 print >> out
                             else:
                                 print >> out, ",",
             print >> out, " "*indent, "}",
     elif (hasattr(object, "__dict__")):
-        if ((exclude != None) and object in exclude):
-            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed) = ", toDiffableString(object),
+        if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
+            print >> out, " "*indent, name, " : ", typeToString(object, flags),
+        elif ((exclude != None) and ((object in exclude) or (object.__dict__ in exclude))):
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " (already printed)",
         else:
             if (exclude != None): exclude.append(object)
-            if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
-                print >> out, " "*indent, name, " : ", toTypeString(object),
-            elif ((exclude != None) and object.__dict__ in exclude):
-                print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
+            print >> out, " "*indent, name, " : ", typeToString(object, flags),
+            if ((flags & PRINT_OBJ_GETATTR) == 0):
+                if ((flags & PRINT_OBJ_COMPACT) == 0):
+                    print >> out
+                printObject(out, object.__dict__, indent=indent, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
             else:
-                print >> out, " "*indent, name, " : ", toTypeString(object),
-                if ((flags & PRINT_OBJ_GETATTR) == 0):
-                    if ((flags & PRINT_OBJ_COMPACT) == 0):
+                if ((flags & PRINT_OBJ_COMPACT) == 0):
+                    print >> out
+##                    indent += 2
+                print >> out, " "*indent, "{",
+                keys = object.__dict__.keys()
+                keys.sort()
+                printed = True
+                for key in keys:
+                    if ((exclude != None) and (key in exclude)):
+                        continue
+                    if (printed and ((flags & PRINT_OBJ_COMPACT) == 0)):
                         print >> out
-                    printObject(out, object.__dict__, indent=indent, flags=flags, exclude=exclude, maxIndent=maxIndent)
-                else:
-                    keys = object.__dict__.keys()
-                    keys.sort()
-                    for n in keys:
-                        if ((flags & PRINT_OBJ_COMPACT) == 0):
-                            print >> out
-                        printObject(out, getattr(object, n), name=n, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
+                    n = nameToString(key, flags)
+                    printed = printObject(out, getattr(object, n), name=n, indent=indent+2, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
+                if ((flags & PRINT_OBJ_COMPACT) == 0):
+                    print >> out
+                print >> out, " "*indent, "}",
     elif (indent < 0):
         print >> out, object,
     elif isinstance(object, basestring):
         if ((exclude != None) and name in exclude):
-            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
+            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (excluded)",
         elif (len(object) > 100):
-            print >> out, " "*indent, name, ":", toTypeString(object), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
+            object = toString(object, flags)
+            print >> out, " "*indent, name, ":", typeToString(object, flags), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
         else:
-            print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
+            print >> out, " "*indent, name, ":", typeToString(object, flags), "=", toString(object, flags),
 ##    elif (isinstance(object, float)):
 ##        val = str(object)
 ##        if (len(val) > 17):
 ##            val = val[:17]
 ##        print >> out, " "*indent, name, ":", type(object), "=", val,
     else:
-        print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
+        print >> out, " "*indent, name, ":", typeToString(object, flags), "=", toString(object, flags),
     if (finalNewLine):
         print >> out
     return printed
diff --git a/wxPython/samples/ide/activegrid/util/strutils.py b/wxPython/samples/ide/activegrid/util/strutils.py
new file mode 100644 (file)
index 0000000..b79bd2a
--- /dev/null
@@ -0,0 +1,23 @@
+#----------------------------------------------------------------------------
+# Name:         strutils.py
+# Purpose:      String Utilities
+#
+# Author:       Morgan Hua
+#
+# Created:      11/3/05
+# CVS-ID:       $Id$
+# Copyright:    (c) 2005 ActiveGrid, Inc.
+# License:      wxWindows License
+#----------------------------------------------------------------------------
+
+
+def caseInsensitiveCompare(s1, s2):
+    """ Method used by sort() to sort values in case insensitive order """
+    s1L = s1.lower()
+    s2L = s2.lower()
+    if s1L == s2L:
+        return 0
+    elif s1L < s2L:
+        return -1
+    else:
+        return 1
diff --git a/wxPython/samples/ide/activegrid/util/sysutils.py b/wxPython/samples/ide/activegrid/util/sysutils.py
new file mode 100644 (file)
index 0000000..eb8bbf0
--- /dev/null
@@ -0,0 +1,87 @@
+#----------------------------------------------------------------------------
+# Name:         sysutils.py
+# Purpose:      System Utilities
+#
+# Author:       Joel Hare
+#
+# Created:      7/28/04
+# CVS-ID:       $Id$
+# Copyright:    (c) 2004-2005 ActiveGrid, Inc.
+# License:      wxWindows License
+#----------------------------------------------------------------------------
+
+import sys
+import os
+
+# this will be set to true in IDE.py when we are running release builds.
+isRelease = False
+
+# Commented out for now.....
+# Required for Unicode support with python
+# Put over here because of py2exe problems
+# Python suggests modifying site.py 
+#if hasattr(sys,"setdefaultencoding"):
+#    sys.setdefaultencoding("UTF-8")
+
+
+MAINMODULE_DIR = "AG_MAINMODULE_DIR"
+IS_RELEASE = "AG_IS_RELEASE"
+def isRelease():
+    return 'true' == (str(os.getenv(IS_RELEASE)).lower())
+    
+def setRelease(value):
+    if value:
+        os.environ[IS_RELEASE]= "TRUE"
+    else:
+        os.environ[IS_RELEASE]= "FALSE"
+
+def isWindows():
+    return os.name == 'nt'
+
+
+def _generateMainModuleDir():
+    mainModuleDir = os.getenv(MAINMODULE_DIR)
+    if mainModuleDir:  # if environment variable set, return it
+        return mainModuleDir
+    
+    # On Mac, the python executable sometimes has a capital "P" so we need to 
+    # lower the string first
+    sysExecLower = sys.executable.lower()
+    if sysExecLower == "/" or sysExecLower.find('python') != -1 or sysExecLower.find('apache') != -1:
+        utilModuleDir = os.path.dirname(__file__)
+        if not os.path.isabs(utilModuleDir):
+            utilModuleDir = os.path.join(os.getcwd(), utilModuleDir)
+        mainModuleDir = os.path.normpath(os.path.join(utilModuleDir, os.path.join(os.path.pardir, os.path.pardir)))
+        if mainModuleDir.endswith('.zip'):
+            mainModuleDir = os.path.dirname(mainModuleDir) # Get rid of library.zip
+    else:
+        mainModuleDir = os.path.dirname(sys.executable)
+        
+    os.environ[MAINMODULE_DIR] = mainModuleDir  # pythonBug: os.putenv doesn't work, set environment variable
+    
+    return mainModuleDir
+
+mainModuleDir = _generateMainModuleDir()
+    
+def _generatePythonExecPath():
+    # On Mac, the python executable sometimes has a capital "P" so we need to 
+    # lower the string first
+    sysExecLower = sys.executable.lower()
+    if sysExecLower.find('python') != -1 or sysExecLower.find('apache') != -1:
+        pythonExecPath = sys.executable
+    else:
+        # this is where py2app puts the Python executable
+        if sys.platform == "darwin":
+            pythonExecPath = os.path.join(os.path.dirname(sys.executable), "../Frameworks/Python.Framework/Versions/2.4/Python/bin")
+        else:
+            pythonExecPath = os.path.join(os.path.dirname(sys.executable), '3rdparty\python2.4\python')
+    return pythonExecPath
+
+pythonExecPath = _generatePythonExecPath()
+
+def getCommandNameForExecPath(execPath):
+    if isWindows():
+        return '"%s"' % execPath
+    return execPath
+
index 266418a1ebd73dfb9594f31fc9bf527091a923a2..6a74d2c486bd2805438516918170f6f2d33f6900 100644 (file)
@@ -2,21 +2,23 @@
 # Name:         xmlmarshaller.py
 # Purpose:
 #
-# Author:       John Spurling
+# Authors:       John Spurling, Joel Hare, Alan Mullendore
 #
 # Created:      7/28/04
 # CVS-ID:       $Id$
 # Copyright:    (c) 2004-2005 ActiveGrid, Inc.
 # License:      wxWindows License
 #----------------------------------------------------------------------------
-import __builtin__
 import sys
 from types import *
+from activegrid.util.lang import *
 import logging
+ifDefPy()
 import xml.sax
 import xml.sax.handler
+endIfDef()
 import xml.sax.saxutils as saxutils
-from activegrid.util.lang import *
+import activegrid.util.objutils as objutils
 import activegrid.util.aglogging as aglogging
 
 MODULE_PATH = "__main__"
@@ -96,6 +98,13 @@ within it. e.g.
 
 __xmlattrgroups__ = {"name": ["firstName", "lastName"], "address": ["addressLine1", "city", "state", "zip"]}
 
+name: __xmlcdatacontent__
+type: string
+description: value is the name of a string attribute that should be assigned CDATA content from the
+source document and that should be marshalled as CDATA.
+
+__xmlcdatacontent__ = "messyContent"
+
 """
 
 global xmlMarshallerLogger
@@ -104,8 +113,6 @@ xmlMarshallerLogger.setLevel(aglogging.LEVEL_WARN)
 # INFO  : low-level info
 # DEBUG : debugging info
 
-global knownGlobalTypes
-
 ################################################################################
 #
 # module exceptions
@@ -139,6 +146,9 @@ class XMLAttributeIsNotStringType(Error):
         string.""" % (self.attrname, self.typename)
 
 class MarshallerException(Exception):
+    pass
+
+class UnmarshallerException(Exception):
     pass 
 
 ################################################################################
@@ -150,6 +160,10 @@ class MarshallerException(Exception):
 XMLNS = "xmlns"
 XMLNS_PREFIX = XMLNS + ":"
 XMLNS_PREFIX_LENGTH = len(XMLNS_PREFIX)
+DEFAULT_NAMESPACE_KEY = "__DEFAULTNS__"
+TYPE_QNAME = "QName"
+XMLSCHEMA_XSD_URL = "http://www.w3.org/2001/XMLSchema"
+AG_URL = "http://www.activegrid.com/ag.xsd"
 
 BASETYPE_ELEMENT_NAME = "item"
 DICT_ITEM_NAME = "qqDictItem"
@@ -183,69 +197,31 @@ def getComplexType(obj):
         return obj.__xsdcomplextype__
     return None
 
-def _objectfactory(objname, objargs=None, xsname=None):
+def _objectfactory(objname, objargs=None, objclass=None):
     "dynamically create an object based on the objname and return it."
-
+##    print "[objectfactory] objname [%s]" % (objname)
     if not isinstance(objargs, list):
         objargs = [objargs]
-
-##    print "[objectfactory] xsname [%s]; objname [%s]" % (xsname, objname)
-
-    # (a) deal with tagName:knownTypes mappings
-    if (xsname != None):
-        objclass = knownGlobalTypes.get(xsname)
-        if (objclass != None):
-            if (objargs != None):
-                return objclass(*objargs)
-            else:
-                return objclass()                
-
-    # (b) next with intrinisic types
-    if objname == "str" or objname == "unicode": # don"t strip: blanks are significant
-        if len(objargs) > 0:
-            return saxutils.unescape(objargs[0]).encode()
-        else:
-            return ""
-    elif objname == "bool":
-        return not objargs[0].lower() == "false"
-    elif objname in ("float", "int", "long"):
-##        objargs = [x.strip() for x in objargs]
-        return __builtin__.__dict__[objname](*objargs)
-    elif objname == "None":
-        return None
-
-    # (c) objtype=path...module.class   
-    # split the objname into the typename and module path,
-    # importing the module if need be.
-##    print "[objectfactory] creating an object of type %s and value %s, xsname=%s" % (objname, objargs, xsname)
-    objtype = objname.split(".")[-1]
-    pathlist = objname.split(".")
-    modulename = ".".join(pathlist[0:-1])
-##    print "[objectfactory] object [%s] %s(%r)" % (objname, objtype, objargs)
-
-    try:
-        if modulename:
-            module = __import__(modulename)
-            for name in pathlist[1:-1]:
-                module = module.__dict__[name]
-        elif __builtin__.__dict__.has_key(objname):
-            module = __builtin__
-        else:
-            raise MarshallerException("Could not find class %s" % objname)
-        if objargs:
-            return module.__dict__[objtype](*objargs)
+    if (objclass != None):
+        if (len(objargs) > 0):
+            if (hasattr(objclass, "__xmlcdatacontent__")):
+                obj = objclass()
+                contentAttr = obj.__xmlcdatacontent__
+                obj.__dict__[contentAttr] = str(objargs[0])
+                return obj
+            return objclass(*objargs)
         else:
-            return module.__dict__[objtype]()
-    except KeyError:
-        raise MarshallerException("Could not find class %s" % objname)
+            return objclass()
+    return objutils.newInstance(objname, objargs)
 
 class Element:
-    
-    def __init__(self, name, attrs=None):
+    def __init__(self, name, attrs=None, xsname=None):
         self.name = name
         self.attrs = attrs
         self.content = ""
         self.children = []
+        self.objclass = None
+        self.xsname = xsname
         
     def getobjtype(self):
         objtype = self.attrs.get("objtype")
@@ -256,58 +232,177 @@ class Element:
                 objtype = "str"
         return objtype
             
-    def __str__(self):
-        print "    name = ", self.name, "; attrs = ", self.attrs, "number of children = ", len(self.children)
-        i = -1
-        for child in self.children:
-            i = i + 1
-            childClass = child.__class__.__name__
-            print "    Child ", i, " class: ",childClass
-
+class NsElement(object):
+    def __init__(self):
+        self.nsMap = {}
+        self.targetNS = None
+        self.defaultNS = None
+        self.prefix = None
+        
+    def isEmpty(self):
+        return ((self.nsMap == {}) and (self.targetNS == None) and (self.defaultNS == None))
+
+    def setKnownTypes(self, masterKnownTypes, masterKnownNamespaces, parentNSE):
+        # if we're a nested element, extend our parent element's mapping
+        if parentNSE != None:
+            self.knownTypes = parentNSE.knownTypes.copy()
+            # but if we have a different default namespace, replace the parent's default mappings
+            if parentNSE.defaultNS != self.defaultNS:
+                newKT = self.knownTypes.copy()
+                for tag in newKT:
+                    if tag.find(':') < 0:
+                        del self.knownTypes[tag]
+            newMap = parentNSE.nsMap.copy()
+            if self.nsMap != {}:
+                for k, v in self.nsMap.iteritems():
+                    newMap[k] = v
+            self.nsMap = newMap
+        else:
+            self.knownTypes = {}
+        reversedKNS = {}
+        # TODO: instead of starting with the knownNamespaces, start with the "xmlms" mappings
+        # for this element. Then we'd only process the namespaces and tags we need to.
+        # But for now, this works.
+        for long, short in masterKnownNamespaces.iteritems():
+            reversedKNS[short] = long
+        mapLongs = self.nsMap.values()
+        for tag, mapClass in masterKnownTypes.iteritems():
+            i = tag.rfind(':')
+            if i >= 0:                                      # e.g. "wsdl:description"
+                knownTagShort = tag[:i]                     # "wsdl"
+                knownTagName = tag[i+1:]                    # "description"
+                knownTagLong  = reversedKNS[knownTagShort]  # e.g. "http://schemas.xmlsoap.org/wsdl"
+                if (knownTagLong in mapLongs):
+                    for mShort, mLong in self.nsMap.iteritems():
+                        if mLong == knownTagLong:
+                            actualShort = mShort  # e.g. "ws"
+                            actualTag = '%s:%s' % (actualShort, knownTagName)
+                            self.knownTypes[actualTag] = mapClass
+                            break
+                if self.defaultNS == knownTagLong:
+                    self.knownTypes[knownTagName] = mapClass
+            else:                                           # e.g. "ItemSearchRequest"
+                self.knownTypes[tag] = mapClass
+##                print 'mapping <%s> to class "%s"' % (tag, mapClass.__name__)
+
+    def expandQName(self, eName, attrName, attrValue):
+        bigValue = attrValue
+        i = attrValue.rfind(':')
+        if (i < 0):
+            if self.defaultNS != None:
+                bigValue = '%s:%s' % (self.defaultNS, attrValue)
+        else:
+            attrNS = attrValue[:i]
+            attrNCName = attrValue[i+1:]
+            for shortNs, longNs in self.nsMap.iteritems():
+                if shortNs == attrNS:
+                    bigValue = '%s:%s' % (longNs, attrNCName)
+                    break
+##        print '[expandQName] input attrName = "%s" and attrValue "%s"; output = "%s"' % (attrName, attrValue, bigValue)
+        return bigValue
 
 class XMLObjectFactory(xml.sax.ContentHandler):
-    def __init__(self):
+    def __init__(self, knownTypes=None, knownNamespaces=None):
         self.rootelement = None
+        if (knownTypes == None):
+            self.knownTypes = {}
+        else:
+            self.knownTypes = knownTypes
+        if (knownNamespaces == None):
+            self.knownNamespaces = {}
+        else:
+            self.knownNamespaces = knownNamespaces
+        self.skipper = False
         self.elementstack = []
+        self.nsstack = []
+        self.collectContent = None
         xml.sax.handler.ContentHandler.__init__(self)
 
-    def __str__(self):
-        print "-----XMLObjectFactory Dump-------------------------------"
-        if (self.rootelement == None):
-            print "rootelement is None"
+    def appendElementStack(self, newElement, newNS):
+        self.elementstack.append(newElement)
+        if (newNS.isEmpty()):
+            if (len(self.nsstack) > 0):
+                newNS = self.nsstack[-1]
+            else:
+                newNS.knownTypes = self.knownTypes.copy()
         else:
-            print "rootelement is an object"
-        i = -1
-        print "length of elementstack is: ", len(self.elementstack)
-        for e in self.elementstack:
-            i = i + 1
-            print "elementstack[", i, "]: "
-            str(e)
-        print "-----end XMLObjectFactory--------------------------------"
+            if (len(self.nsstack) > 0):
+                newNS.setKnownTypes(self.knownTypes, self.knownNamespaces, self.nsstack[-1])
+            else:
+                newNS.setKnownTypes(self.knownTypes, self.knownNamespaces, None)
+        self.nsstack.append(newNS)
+        return newNS
+    
+    def popElementStack(self):
+        element = self.elementstack.pop()
+        nse = self.nsstack.pop()
+        return element, nse
         
     ## ContentHandler methods
     def startElement(self, name, attrs):
-##        print "startElement for name: ", name
-        if name.find(":") > -1:  # Strip namespace prefixes for now until actually looking them up in xsd
-            name = name[name.find(":") + 1:]
-##        for attrname in attrs.getNames():
-##            print "%s: %s" % (attrname, attrs.getValue(attrname))
-        element = Element(name, attrs.copy())
-        self.elementstack.append(element)
-##        print self.elementstack
+##        print '[startElement] <%s>' % (name)
+        if name == 'xs:annotation' or name == 'xsd:annotation': # should use namespace mapping here
+            self.skipper = True
+            self.appendElementStack(Element(name, attrs.copy()), NsElement())
+        if self.skipper:
+            return
+        if self.collectContent != None:
+            strVal = '<%s' % (name)
+            for aKey, aVal in attrs.items():
+                strVal += (' %s="%s"' % (aKey, aVal))
+            strVal += '>'
+            self.collectContent.content += strVal
+        xsname = name
+        if name.find(':') > -1:  # Strip namespace prefixes for now until actually looking them up in xsd
+            name = name[name.rfind(":") + 1:]
+        element = Element(name, attrs.copy(), xsname=xsname)
+        # if the element has namespace attributes, process them and add them to our stack
+        nse = NsElement()
+        for k in attrs.getNames():
+            if k.startswith('xmlns'):
+                longNs = attrs[k]
+                eLongNs = longNs + '/'
+                if str(eLongNs) in asDict(self.knownNamespaces):
+                    longNs = eLongNs
+                if k == 'xmlns':
+                    nse.defaultNS = longNs
+                else:
+                    shortNs = k[6:]
+                    nse.nsMap[shortNs] = longNs
+            elif k == 'targetNamespace':
+                nse.targetNS = attrs.getValue(k)
+        nse = self.appendElementStack(element, nse)
+        element.objclass = nse.knownTypes.get(xsname)
+        if (hasattr(element.objclass, "__xmlcontent__")):
+            self.collectContent = element
 
     def characters(self, content):
-##        print "got content: %s (%s)" % (content, type(content))
+##        print '[characters] "%s" (%s)' % (content, type(content))
         if (content != None):
-            self.elementstack[-1].content += content
+            if self.collectContent != None:
+                self.collectContent.content += content
+            else:
+                self.elementstack[-1].content += content
 
     def endElement(self, name):
-##        print "[endElement] name of element we"re at the end of: %s" % name
+##        print "[endElement] </%s>" % name
         xsname = name
         if name.find(":") > -1:  # Strip namespace prefixes for now until actually looking them up in xsd
             name = name[name.find(":") + 1:]
+        if self.skipper:
+            if xsname == "xs:annotation" or xsname == "xsd:annotation":     # here too
+                self.skipper = False
+                self.popElementStack()
+            return
+        if self.collectContent != None:
+            if xsname != self.collectContent.xsname:
+                self.collectContent.content += ('</%s>' % (xsname))
+                self.popElementStack()
+                return
+            else:
+                self.collectContent = None
         oldChildren = self.elementstack[-1].children
-        element = self.elementstack.pop()
+        element, nse = self.popElementStack()
         if ((len(self.elementstack) > 1) and (self.elementstack[-1].getobjtype() == "None")):
             parentElement = self.elementstack[-2]
 ##            print "[endElement] %s: found parent with objtype==None: using its grandparent" % name
@@ -323,8 +418,7 @@ class XMLObjectFactory(xml.sax.ContentHandler):
             strippedElementContent = element.content.strip()
             if (len(strippedElementContent) > 0):
                 constructorarglist.append(element.content)
-##        print "[endElement] calling objectfactory"
-        obj = _objectfactory(objtype, constructorarglist, xsname)
+        obj = _objectfactory(objtype, constructorarglist, element.objclass)
         complexType = getComplexType(obj)
         if (obj != None):
             if (hasattr(obj, "__xmlname__") and getattr(obj, "__xmlname__") == "sequence"):
@@ -338,13 +432,14 @@ class XMLObjectFactory(xml.sax.ContentHandler):
                         ns = attrname[XMLNS_PREFIX_LENGTH:]
                     else:
                         ns = ""
-                    if not hasattr(obj, "__xmlnamespaces__"):
-                        obj.__xmlnamespaces__ = {ns:attr}
-                    elif ns not in obj.__xmlnamespaces__:
-                        if (hasattr(obj.__class__, "__xmlnamespaces__") 
-                            and (obj.__xmlnamespaces__ is obj.__class__.__xmlnamespaces__)):
-                            obj.__xmlnamespaces__ = dict(obj.__xmlnamespaces__)
-                        obj.__xmlnamespaces__[ns] = attr
+                    if complexType != None:
+                        if not hasattr(obj, "__xmlnamespaces__"):
+                            obj.__xmlnamespaces__ = {ns:attr}
+                        elif ns not in obj.__xmlnamespaces__:
+                            if (hasattr(obj.__class__, "__xmlnamespaces__") 
+                                and (obj.__xmlnamespaces__ is obj.__class__.__xmlnamespaces__)):
+                                obj.__xmlnamespaces__ = dict(obj.__xmlnamespaces__)
+                            obj.__xmlnamespaces__[ns] = attr
                 elif not attrname == "objtype":
                     if attrname.find(":") > -1:  # Strip namespace prefixes for now until actually looking them up in xsd
                         attrname = attrname[attrname.find(":") + 1:]
@@ -352,7 +447,10 @@ class XMLObjectFactory(xml.sax.ContentHandler):
                         xsdElement = complexType.findElement(attrname)
                         if (xsdElement != None):
                             type = xsdElement.type
+##                            print 'Unmarshalling element "%s", attribute "%s" with type "%s"' % (name, xsdElement.name, type)
                             if (type != None):
+                                if (type == TYPE_QNAME):
+                                    attr = nse.expandQName(name, attrname, attr)
                                 type = xsdToLangType(type)
                                 ### ToDO remove maxOccurs hack after bug 177 is fixed
                                 if attrname == "maxOccurs" and attr == "unbounded":
@@ -361,15 +459,14 @@ class XMLObjectFactory(xml.sax.ContentHandler):
                     try:
                         setattrignorecase(obj, _toAttrName(obj, attrname), attr)
                     except AttributeError:
-                        raise MarshallerException("Error unmarshalling attribute \"%s\" of XML element \"%s\": object type not specified or known" % (attrname, name))
+                        errorString = 'Error unmarshalling XML document at line %i, column %i: The object type of attribute "%s" of XML element "%s": not specified or known' % (self._locator.getLineNumber(), self._locator.getColumnNumber(), attrname, name)
+                        raise UnmarshallerException(errorString)
 ##                    obj.__dict__[_toAttrName(obj, attrname)] = attr
         # stuff any child attributes meant to be in a sequence via the __xmlflattensequence__
         flattenDict = {}
         if hasattr(obj, "__xmlflattensequence__"):
             flatten = obj.__xmlflattensequence__
-##            print "[endElement] %s: obj has __xmlflattensequence__" % name
             if (isinstance(flatten, dict)):
-##                print "[endElement]  dict with flatten.items: ", flatten.items()
                 for sequencename, xmlnametuple in flatten.items():
                     if (xmlnametuple == None):
                         flattenDict[sequencename] = sequencename
@@ -377,19 +474,17 @@ class XMLObjectFactory(xml.sax.ContentHandler):
                         flattenDict[str(xmlnametuple)] = sequencename
                     else:
                         for xmlname in xmlnametuple:
-    ##                        print "[endElement]: adding flattenDict[%s] = %s" % (xmlname, sequencename)
+##                            print "[endElement]: adding flattenDict[%s] = %s" % (xmlname, sequencename)
                             flattenDict[xmlname] = sequencename
             else:
-                raise "Invalid type for __xmlflattensequence___ : it must be a dict"
+                raise Exception("Invalid type for __xmlflattensequence___ : it must be a dict")
 
         # reattach an object"s attributes to it
         for childname, child in element.children:
 ##            print "[endElement] childname is: ", childname, "; child is: ", child
             if (childname in flattenDict):
                 sequencename = _toAttrName(obj, flattenDict[childname])
-##                print "[endElement] sequencename is: ", sequencename
                 if (not hasattr(obj, sequencename)):
-##                    print "[endElement] obj.__dict__ is: ", obj.__dict__
                     obj.__dict__[sequencename] = []
                 sequencevalue = getattr(obj, sequencename)
                 if (sequencevalue == None):
@@ -454,6 +549,7 @@ __typeMappingXsdToLang = {
     "boolean": "bool",
     "decimal": "float", # ToDO Does python have a better fixed point type?
     "int": "int",
+    "integer":"int",
     "long": "long",
     "float": "float",
     "bool": "bool",
@@ -464,13 +560,25 @@ __typeMappingXsdToLang = {
     "datetime": "str", # see above (date)
     "time": "str", # see above (date)
     "double": "float",
+    "QName" : "str",
+    "blob" : "str",         # ag:blob
+    "currency" : "str",     # ag:currency
     }    
 
 def xsdToLangType(xsdType):
+    if xsdType.startswith(XMLSCHEMA_XSD_URL):
+        xsdType = xsdType[len(XMLSCHEMA_XSD_URL)+1:]
+    elif xsdType.startswith(AG_URL):
+        xsdType = xsdType[len(AG_URL)+1:]        
     langType = __typeMappingXsdToLang.get(xsdType)
     if (langType == None):
         raise Exception("Unknown xsd type %s" % xsdType)
     return langType
+    
+def langToXsdType(langType):
+    if langType in asDict(__typeMappingXsdToLang):
+        return '%s:%s' % (XMLSCHEMA_XSD_URL, langType)
+    return langType
 
 def _getXmlValue(langValue):
     if (isinstance(langValue, bool)):
@@ -480,19 +588,23 @@ def _getXmlValue(langValue):
     else:
         return str(langValue)
 
-def unmarshal(xmlstr, knownTypes=None):
-    global knownGlobalTypes
-    if (knownTypes == None):
-        knownGlobalTypes = {}
-    else:
-        knownGlobalTypes = knownTypes
-    objectfactory = XMLObjectFactory()
-    xml.sax.parseString(xmlstr, objectfactory)
+def unmarshal(xmlstr, knownTypes=None, knownNamespaces=None, xmlSource=None):
+    objectfactory = XMLObjectFactory(knownTypes, knownNamespaces)
+    try:
+        xml.sax.parseString(xmlstr, objectfactory)
+    except xml.sax.SAXParseException, errorData:
+        if xmlSource == None:
+            xmlSource = 'unknown'
+        errorString = 'SAXParseException ("%s") detected at line %d, column %d in XML document from source "%s" ' % (errorData.getMessage(), errorData.getLineNumber(), errorData.getColumnNumber(), xmlSource)
+        raise UnmarshallerException(errorString)
     return objectfactory.getRootObject()
 
-
-def marshal(obj, elementName=None, prettyPrint=False, indent=0, knownTypes=None, encoding=-1):
-    xmlstr = "".join(_marshal(obj, elementName, prettyPrint=prettyPrint, indent=indent, knownTypes=knownTypes))
+def marshal(obj, elementName=None, prettyPrint=False, marshalType=True, indent=0, knownTypes=None, knownNamespaces=None, encoding=-1):
+##    print '[marshal] entered with elementName = "%s"' % (elementName)
+    worker = XMLMarshalWorker(prettyPrint=prettyPrint, marshalType=marshalType, knownTypes=knownTypes, knownNamespaces=knownNamespaces)    
+    if obj != None and hasattr(obj, '__xmldeepexclude__'):
+        worker.xmldeepexclude = obj.__xmldeepexclude__
+    xmlstr = "".join(worker._marshal(obj, elementName, indent=indent))
     if (isinstance(encoding, basestring)):
         return '<?xml version="1.0" encoding="%s"?>\n%s' % (encoding, xmlstr.encode(encoding))
     elif (encoding == None):
@@ -500,271 +612,421 @@ def marshal(obj, elementName=None, prettyPrint=False, indent=0, knownTypes=None,
     else:
         return '<?xml version="1.0" encoding="%s"?>\n%s' % (sys.getdefaultencoding(), xmlstr)
 
-def _marshal(obj, elementName=None, nameSpacePrefix="", nameSpaces=None, prettyPrint=False, indent=0, knownTypes=None):
-    xmlMarshallerLogger.debug("--> _marshal: elementName=%s, type=%s, obj=%s" % (elementName, type(obj), str(obj)))
-    xmlString = None
-    if prettyPrint or indent:
-        prefix = " "*indent
-        newline = "\n"
-        increment = 4
-    else:
-        prefix = ""
-        newline = ""
-        increment = 0
-
-    ## Determine the XML element name. If it isn"t specified in the
-    ## parameter list, look for it in the __xmlname__ Lang
-    ## attribute, else use the default generic BASETYPE_ELEMENT_NAME.
-    if not nameSpaces: nameSpaces = {}  # Need to do this since if the {} is a default parameter it gets shared by all calls into the function
-    nameSpaceAttrs = ""
-    if knownTypes == None:
-        knownTypes = {}
-    if hasattr(obj, "__xmlnamespaces__"):
-        for nameSpaceKey, nameSpaceUrl in getattr(obj, "__xmlnamespaces__").items():
-            if nameSpaceUrl in asDict(nameSpaces):
-                nameSpaceKey = nameSpaces[nameSpaceUrl]
-            else:
-##                # TODO: Wait to do this until there is shared for use when going through the object graph
-##                origNameSpaceKey = nameSpaceKey  # Make sure there is no key collision, ie: same key referencing two different URL"s
-##                i = 1
-##                while nameSpaceKey in nameSpaces.values():
-##                    nameSpaceKey = origNameSpaceKey + str(i)
-##                    i += 1
-                nameSpaces[nameSpaceUrl] = nameSpaceKey
-                if nameSpaceKey == "":
-                    nameSpaceAttrs += ' xmlns="%s" ' % (nameSpaceUrl)
-                else:
-                    nameSpaceAttrs += ' xmlns:%s="%s" ' % (nameSpaceKey, nameSpaceUrl)
-        nameSpaceAttrs = nameSpaceAttrs.rstrip()
-    if hasattr(obj, "__xmldefaultnamespace__"):
-        nameSpacePrefix = getattr(obj, "__xmldefaultnamespace__") + ":"        
-    if not elementName:
-        if hasattr(obj, "__xmlname__"):
-            elementName = nameSpacePrefix + obj.__xmlname__
+class XMLMarshalWorker(object):
+    def __init__(self, marshalType=True, prettyPrint=False, knownTypes=None, knownNamespaces=None):
+        if knownTypes == None:
+            self.knownTypes = {}
         else:
-            elementName = nameSpacePrefix + BASETYPE_ELEMENT_NAME
-    else:
-        elementName = nameSpacePrefix + elementName
-    if hasattr(obj, "__xmlsequencer__"):
-        elementAdd = obj.__xmlsequencer__
-    else:
-        elementAdd = None
-               
-##    print "marshal: entered with elementName: ", elementName
-    members_to_skip = []
-    ## Add more members_to_skip based on ones the user has selected
-    ## via the __xmlexclude__ attribute.
-    if hasattr(obj, "__xmlexclude__"):
-##        print "marshal: found __xmlexclude__"
-        members_to_skip.extend(obj.__xmlexclude__)
-    # Marshal the attributes that are selected to be XML attributes.
-    objattrs = ""
-    className = ag_className(obj)
-    classNamePrefix = "_" + className
-    if hasattr(obj, "__xmlattributes__"):
-##        print "marshal: found __xmlattributes__"
-        xmlattributes = obj.__xmlattributes__
-        members_to_skip.extend(xmlattributes)
-        for attr in xmlattributes:
-            internalAttrName = attr
-            ifDefPy()
-            if (attr.startswith("__") and not attr.endswith("__")): 
-                internalAttrName = classNamePrefix + attr
-            endIfDef()
-            # Fail silently if a python attribute is specified to be
-            # an XML attribute but is missing.
-##            print "marshal:   processing attribute ", internalAttrName
-            attrs = obj.__dict__
-            value = attrs.get(internalAttrName)
-            xsdElement = None
-            complexType = getComplexType(obj)
-            if (complexType != None):
-##                print "marshal: found __xsdcomplextype__"
-                xsdElement = complexType.findElement(attr)
-            if (xsdElement != None):
-                default = xsdElement.default
-                if (default != None):
-                    if ((default == value) or (default == _getXmlValue(value))):
-                        continue
+            self.knownTypes = knownTypes
+        if knownNamespaces == None:
+            self.knownNamespaces = {}
+        else:
+            self.knownNamespaces = knownNamespaces
+        self.prettyPrint = prettyPrint
+        self.marshalType = marshalType
+        self.xmldeepexclude = []
+        self.nsstack = []
+
+    def getNSPrefix(self):
+        if len(self.nsstack) > 0:
+            return self.nsstack[-1].prefix
+        return ''
+
+    def isKnownType(self, elementName):
+        tagLongNs = None
+        nse = self.nsstack[-1]
+        i = elementName.rfind(':')
+        if i > 0:
+            prefix = elementName[:i]
+            name = elementName[i+1:]
+        else:
+            prefix = DEFAULT_NAMESPACE_KEY
+            name = elementName
+        for shortNs, longNs in nse.nameSpaces.iteritems():
+            if shortNs == prefix:
+                tagLongNs = longNs
+                break
+        if tagLongNs == None:
+            knownTagName = elementName
+        else:
+            knownShortNs = self.knownNamespaces[tagLongNs]
+            knownTagName = knownShortNs + ':' + name
+        if (knownTagName in asDict(self.knownTypes)):
+            knownClass = self.knownTypes[knownTagName]
+            return True
+        return False
+                      
+    def popNSStack(self):
+        self.nsstack.pop()
+
+    def appendNSStack(self, obj):
+        nameSpaces = {}
+        defaultLongNS = None
+        for nse in self.nsstack:
+            for k, v in nse.nsMap.iteritems():
+                nameSpaces[k] = v
+                if k == DEFAULT_NAMESPACE_KEY:
+                    defaultLongNS = v
+        newNS = NsElement()
+        nameSpaceAttrs = ""
+        if hasattr(obj, "__xmlnamespaces__"):
+            ns = getattr(obj, "__xmlnamespaces__")
+            keys = ns.keys()
+            keys.sort()
+            for nameSpaceKey in keys:
+                nameSpaceUrl = ns[nameSpaceKey]
+                if nameSpaceUrl in nameSpaces.values():
+                    for k, v in nameSpaces.iteritems():
+                        if v == nameSpaceUrl:
+                            nameSpaceKey = k
+                            break
                 else:
-                    if (value == None):
-                        continue
-            elif value == None:
-                continue
-
-            # ToDO remove maxOccurs hack after bug 177 is fixed
-            if attr == "maxOccurs" and value == -1:
-                value = "unbounded"
-
-            if isinstance(value, bool):
-               if value == True:
-                   value = "true"
-               else:
-                   value = "false"
-
-            attrNameSpacePrefix = ""
-            if hasattr(obj, "__xmlattrnamespaces__"):
-##                print "marshal: found __xmlattrnamespaces__"
-                for nameSpaceKey, nameSpaceAttributes in getattr(obj, "__xmlattrnamespaces__").iteritems():
-                    if nameSpaceKey == nameSpacePrefix[:-1]: # Don't need to specify attribute namespace if it is the same as its element
-                        continue
-                    if attr in nameSpaceAttributes:
-                        attrNameSpacePrefix = nameSpaceKey + ":"
-                        break
-##            if attr.startswith("_"):
-##                attr = attr[1:]
-            if (hasattr(obj, "__xmlrename__") and attr in asDict(obj.__xmlrename__)):
-##                print "marshal: found __xmlrename__ (and its attribute)"
-                attr = obj.__xmlrename__[attr]
-
-            objattrs += ' %s%s="%s"' % (attrNameSpacePrefix, attr, str(value))
-##            print "marshal:   new objattrs is: ", objattrs
-
-    if (obj == None):
-        xmlString = [""]
-    elif isinstance(obj, bool):
-        xmlString = ['%s<%s objtype="bool">%s</%s>%s' % (prefix, elementName, obj, elementName, newline)]
-    elif isinstance(obj, int):
-        xmlString = ['%s<%s objtype="int">%s</%s>%s' % (prefix, elementName, str(obj), elementName, newline)]
-    elif isinstance(obj, long):
-        xmlString = ['%s<%s objtype="long">%s</%s>%s' % (prefix, elementName, str(obj), elementName, newline)]
-    elif isinstance(obj, float):
-        xmlString = ['%s<%s objtype="float">%s</%s>%s' % (prefix, elementName, str(obj), elementName, newline)]
-    elif isinstance(obj, unicode): # have to check before basestring - unicode is instance of base string
-        xmlString = ['%s<%s>%s</%s>%s' % (prefix, elementName, saxutils.escape(obj.encode()), elementName, newline)]
-    elif isinstance(obj, basestring):
-        xmlString = ['%s<%s>%s</%s>%s' % (prefix, elementName, saxutils.escape(obj), elementName, newline)]
-    elif isinstance(obj, list):
-        if len(obj) < 1:
-            xmlString = ""
+                    if nameSpaceKey == "":
+                        defaultLongNS = nameSpaceUrl
+                        nameSpaces[DEFAULT_NAMESPACE_KEY] = nameSpaceUrl
+                        newNS.nsMap[DEFAULT_NAMESPACE_KEY] = nameSpaceUrl
+                        nameSpaceAttrs += ' xmlns="%s" ' % (nameSpaceUrl)
+                    else:
+                        nameSpaces[nameSpaceKey] = nameSpaceUrl
+                        newNS.nsMap[nameSpaceKey] = nameSpaceUrl
+                        nameSpaceAttrs += ' xmlns:%s="%s" ' % (nameSpaceKey, nameSpaceUrl)
+            nameSpaceAttrs = nameSpaceAttrs.rstrip()
+        if len(self.nsstack) > 0:
+            newNS.prefix = self.nsstack[-1].prefix
         else:
-            xmlString = ['%s<%s objtype="list">%s' % (prefix, elementName, newline)]
-            for item in obj:
-                xmlString.extend(_marshal(item, nameSpaces=nameSpaces, indent=indent+increment, knownTypes=knownTypes))
-            xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
-    elif isinstance(obj, tuple):
-        if len(obj) < 1:
-            xmlString = ""
+            newNS.prefix = ''
+        if hasattr(obj, "__xmldefaultnamespace__"):
+            longPrefixNS = getattr(obj, "__xmldefaultnamespace__")
+            if longPrefixNS == defaultLongNS:
+                newNS.prefix = ''
+            else:
+                try:
+                    for k, v in nameSpaces.iteritems():
+                        if v == longPrefixNS:
+                            newNS.prefix = k + ':'
+                            break;
+##                    print '[appendNSStack] found longPrefixNS in nameSpaces = "%s"' % (newNS.prefix)
+                except:
+                    if (longPrefixNS in asDict(self.knownNamespaces)):
+                        newNS.prefix = self.knownNamespaces[longPrefixNS] + ':'
+                    else:
+                        raise MarshallerException('Error marshalling __xmldefaultnamespace__ ("%s") not defined in namespace stack' % (longPrefixNS))
+        if hasattr(obj, "targetNamespace"):
+            newNS.targetNS = obj.targetNamespace
+        elif len(self.nsstack) > 0:
+            newNS.targetNS = self.nsstack[-1].targetNS
+        newNS.nameSpaces = nameSpaces
+        self.nsstack.append(newNS)
+        return nameSpaceAttrs       
+
+    def contractQName(self, value, obj, attr):
+        value = langToXsdType(value)
+        i = value.rfind(':')
+        if i >= 0:
+            longNS = value[:i]
         else:
-            xmlString = ['%s<%s objtype="list" mutable="false">%s' % (prefix, elementName, newline)]
-            for item in obj:
-                xmlString.extend(_marshal(item, nameSpaces=nameSpaces, indent=indent+increment, knownTypes=knownTypes))
-            xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
-    elif isinstance(obj, dict):
-        xmlString = ['%s<%s objtype="dict">%s' % (prefix, elementName, newline)]
-        subprefix = prefix + " "*increment
-        subindent = indent + 2*increment
-        for key, val in obj.iteritems():
-##            if (isinstance(key, basestring) and key is legal identifier):
-##                xmlString.extend(_marshal(val, elementName=key, nameSpaces=nameSpaces, indent=subindent, knownTypes=knownTypes))
-##            else:
-            xmlString.append("%s<%s>%s" % (subprefix, DICT_ITEM_NAME, newline))
-            xmlString.extend(_marshal(key, elementName=DICT_ITEM_KEY_NAME, indent=subindent, knownTypes=knownTypes))
-            xmlString.extend(_marshal(val, elementName=DICT_ITEM_VALUE_NAME, nameSpaces=nameSpaces, indent=subindent, knownTypes=knownTypes))
-            xmlString.append("%s</%s>%s" % (subprefix, DICT_ITEM_NAME, newline))
-        xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
-    else:
-        # Only add the objtype if the element tag is unknown to us.
-        objname = knownTypes.get(elementName)
-        if (objname != None):
-            xmlString = ["%s<%s%s%s" % (prefix, elementName, nameSpaceAttrs, objattrs)]
+            # the value doesn't have a namespace and we couldn't map it to an XSD type...what to do?
+            # (a) just write it, as is, and hope it's in the default namespace (for now)
+            # (b) throw an exception so we can track down the bad code (later)
+            return value
+        if (longNS in self.nsstack[-1].nameSpaces.values()):
+            for kShort, vLong in self.nsstack[-1].nameSpaces.iteritems():
+                if vLong == longNS:
+                    shortNS = kShort
+                    break
+        else:
+            shortNS = longNS    # if we can't find the long->short mappping, just use longNS
+        if shortNS == DEFAULT_NAMESPACE_KEY:
+            value = value[i+1:]
         else:
-            xmlString = ['%s<%s%s%s objtype="%s.%s"' % (prefix, elementName, nameSpaceAttrs, objattrs, obj.__class__.__module__, className)]
-        # get the member, value pairs for the object, filtering out the types we don"t support
-        if (elementAdd != None):
-            prefix += increment*" "
-            indent += increment
+            value = shortNS + ':' + value[i+1:]
+        return value
+
+    def _genObjTypeStr(self, typeString):
+        if self.marshalType:
+            return ' objtype="%s"' % typeString
+        return ""
             
-        xmlMemberString = []
-        if hasattr(obj, "__xmlbody__"):
-            xmlbody = getattr(obj, obj.__xmlbody__)
-            if xmlbody != None:
-                xmlMemberString.append(xmlbody)           
+    def _marshal(self, obj, elementName=None, nameSpacePrefix="", indent=0):
+        if (obj != None):
+            xmlMarshallerLogger.debug("--> _marshal: elementName=%s%s, type=%s, obj=%s, indent=%d" % (nameSpacePrefix, elementName, type(obj), str(obj), indent))
+        else:
+            xmlMarshallerLogger.debug("--> _marshal: elementName=%s%s, obj is None, indent=%d" % (nameSpacePrefix, elementName, indent))
+        excludeAttrs = []
+        excludeAttrs.extend(self.xmldeepexclude)
+        if hasattr(obj, "__xmlexclude__"):
+            excludeAttrs.extend(obj.__xmlexclude__)
+        prettyPrint = self.prettyPrint
+        knownTypes = self.knownTypes
+        xmlString = None
+        if self.prettyPrint or indent:
+            prefix = " "*indent
+            newline = "\n"
+            increment = 2
         else:
-            if hasattr(obj, "__xmlattrgroups__"):
-                attrGroups = obj.__xmlattrgroups__.copy()
-                if (not isinstance(attrGroups, dict)):
-                    raise "__xmlattrgroups__ is not a dict, but must be"
-                for n in attrGroups.iterkeys():
-                    members_to_skip.extend(attrGroups[n])
+            prefix = ""
+            newline = ""
+            increment = 0
+        ## Determine the XML element name. If it isn"t specified in the
+        ## parameter list, look for it in the __xmlname__ Lang
+        ## attribute, else use the default generic BASETYPE_ELEMENT_NAME.
+        nameSpaceAttrs = self.appendNSStack(obj)
+        nameSpacePrefix = self.getNSPrefix()       
+        if not elementName:
+            if hasattr(obj, "__xmlname__"):
+                elementName = nameSpacePrefix + obj.__xmlname__
             else:
-                attrGroups = {}
-            # add the list of all attributes to attrGroups
-            eList = obj.__dict__.keys()
-            eList.sort()
-            attrGroups["__nogroup__"] = eList
-            
-            for eName, eList in attrGroups.iteritems():
-                if (eName != "__nogroup__"):
-                    prefix += increment*" "
-                    indent += increment
-                    xmlMemberString.append('%s<%s objtype="None">%s' % (prefix, eName, newline))
-                for name in eList:
-                    value = obj.__dict__[name]
-                    if eName == "__nogroup__" and name in members_to_skip: continue
-                    if name.startswith("__") and name.endswith("__"): continue
-                    subElementNameSpacePrefix = nameSpacePrefix
-                    if hasattr(obj, "__xmlattrnamespaces__"):
-                        for nameSpaceKey, nameSpaceValues in getattr(obj, "__xmlattrnamespaces__").iteritems():
-                            if name in nameSpaceValues:
-                                subElementNameSpacePrefix = nameSpaceKey + ":"
-                                break
-                    # handle sequences listed in __xmlflattensequence__
-                    # specially: instead of listing the contained items inside
-                    # of a separate list, as God intended, list them inside
-                    # the object containing the sequence.
-                    if (hasattr(obj, "__xmlflattensequence__") and (value != None) and (name in asDict(obj.__xmlflattensequence__))):
-                        xmlnametuple = obj.__xmlflattensequence__[name]
-                        if (xmlnametuple == None):
-                            xmlnametuple = [name]
-                        elif (not isinstance(xmlnametuple, (tuple,list))):
-                            xmlnametuple = [str(xmlnametuple)]
-                        xmlname = None
-                        if (len(xmlnametuple) == 1):
-                            xmlname = xmlnametuple[0]
-##                        ix = 0
-                        for seqitem in value:
-##                            xmlname = xmlnametuple[ix]
-##                            ix += 1
-##                            if (ix >= len(xmlnametuple)):
-##                                ix = 0
-                            xmlMemberString.extend(_marshal(seqitem, xmlname, subElementNameSpacePrefix, nameSpaces=nameSpaces, indent=indent+increment, knownTypes=knownTypes))
+                elementName = nameSpacePrefix + BASETYPE_ELEMENT_NAME
+        else:
+            elementName = nameSpacePrefix + elementName
+##        print '[XMLMarshalWorker._marshal] elementName "%s"; nameSpaceAttrs is "%s"' % (elementName, nameSpaceAttrs)
+    
+        if (hasattr(obj, "__xmlsequencer__")) and (obj.__xmlsequencer__ != None):
+            if (XMLSCHEMA_XSD_URL in self.nsstack[-1].nameSpaces.values()):
+                for kShort, vLong in self.nsstack[-1].nameSpaces.iteritems():
+                    if vLong == XMLSCHEMA_XSD_URL:
+                        xsdPrefix = kShort + ':'
+                        break
+            else:
+                xsdPrefix = 'xs:'
+            elementAdd = xsdPrefix + obj.__xmlsequencer__
+        else:
+            elementAdd = None
+                   
+    ##    print "marshal: entered with elementName: ", elementName
+        members_to_skip = []
+        ## Add more members_to_skip based on ones the user has selected
+        ## via the __xmlexclude__ and __xmldeepexclude__ attributes.
+        members_to_skip.extend(excludeAttrs)
+        # Marshal the attributes that are selected to be XML attributes.
+        objattrs = ""
+        className = ag_className(obj)
+        classNamePrefix = "_" + className
+        if hasattr(obj, "__xmlattributes__"):
+            xmlattributes = obj.__xmlattributes__
+            members_to_skip.extend(xmlattributes)
+            for attr in xmlattributes:
+##                print 'Processing element "%s"; attribute "%s"' % (elementName, attr)
+                internalAttrName = attr
+                ifDefPy()
+                if (attr.startswith("__") and not attr.endswith("__")): 
+                    internalAttrName = classNamePrefix + attr
+                endIfDef()
+                # Fail silently if a python attribute is specified to be
+                # an XML attribute but is missing.
+##            print "marshal:   processing attribute ", internalAttrName
+                attrNameSpacePrefix = ""
+                if hasattr(obj, "__xmlattrnamespaces__"):
+                    for nameSpaceKey, nameSpaceAttributes in getattr(obj, "__xmlattrnamespaces__").iteritems():
+                        if nameSpaceKey == nameSpacePrefix[:-1]: # Don't need to specify attribute namespace if it is the same as its element
+                            continue
+                        if attr in nameSpaceAttributes:
+                            attrNameSpacePrefix = nameSpaceKey + ":"
+                            break
+                attrs = obj.__dict__
+                value = attrs.get(internalAttrName)
+                if (hasattr(obj, "__xmlrename__") and attr in asDict(obj.__xmlrename__)):
+                    attr = obj.__xmlrename__[attr]
+                xsdElement = None
+                complexType = getComplexType(obj)
+                if (complexType != None):
+                    xsdElement = complexType.findElement(attr)
+                if (xsdElement != None):
+                    default = xsdElement.default
+                    if (default != None):
+                        if ((default == value) or (default == _getXmlValue(value))):
+                            continue
                     else:
-                        if (hasattr(obj, "__xmlrename__") and name in asDict(obj.__xmlrename__)):
-                            xmlname = obj.__xmlrename__[name]
-                        else:
-                            xmlname = name
-                        xmlMemberString.extend(_marshal(value, xmlname, subElementNameSpacePrefix, nameSpaces=nameSpaces, indent=indent+increment, knownTypes=knownTypes))
-                if (eName != "__nogroup__"):
-                    xmlMemberString.append("%s</%s>%s" % (prefix, eName, newline))
-                    prefix = prefix[:-increment]
-                    indent -= increment
-
-        # if we have nested elements, add them here, otherwise close the element tag immediately.
-        newList = []
-        for s in xmlMemberString:
-            if (len(s) > 0): newList.append(s)
-        xmlMemberString = newList
-        if len(xmlMemberString) > 0:
-            xmlString.append(">")
-            if hasattr(obj, "__xmlbody__"):
-                xmlString.extend(xmlMemberString)
-                xmlString.append("</%s>%s" % (elementName, newline))
+                        if (value == None):
+                            continue
+                        elif xsdElement.type == TYPE_QNAME:
+                            value = self.contractQName(value, obj, attr)
+                elif value == None:
+                    continue
+    
+                # ToDO remove maxOccurs hack after bug 177 is fixed
+                if attr == "maxOccurs" and value == -1:
+                    value = "unbounded"
+    
+                if isinstance(value, bool):
+                   if value == True:
+                       value = "true"
+                   else:
+                       value = "false"
+                else:
+                    value = objutils.toDiffableRepr(value)
+    
+                objattrs += ' %s%s="%s"' % (attrNameSpacePrefix, attr, saxutils.escape(value))
+    ##            print "marshal:   new objattrs is: ", objattrs
+        if (obj == None):
+            xmlString = [""]
+        elif isinstance(obj, bool):
+            objTypeStr = self._genObjTypeStr("bool")
+            xmlString = ['%s<%s%s>%s</%s>%s' % (prefix, elementName, objTypeStr, obj, elementName, newline)]
+        elif isinstance(obj, int):
+            objTypeStr = self._genObjTypeStr("int")
+            xmlString = ['%s<%s%s>%s</%s>%s' % (prefix, elementName, objTypeStr, str(obj), elementName, newline)]
+        elif isinstance(obj, long):
+            objTypeStr = self._genObjTypeStr("long")
+            xmlString = ['%s<%s%s>%s</%s>%s' % (prefix, elementName, objTypeStr, str(obj), elementName, newline)]
+        elif isinstance(obj, float):
+            objTypeStr = self._genObjTypeStr("float")
+            xmlString = ['%s<%s%s>%s</%s>%s' % (prefix, elementName, objTypeStr, str(obj), elementName, newline)]
+        elif isinstance(obj, unicode): # have to check before basestring - unicode is instance of base string
+            xmlString = ['%s<%s>%s</%s>%s' % (prefix, elementName, saxutils.escape(obj.encode()), elementName, newline)]
+        elif isinstance(obj, basestring):
+            xmlString = ['%s<%s>%s</%s>%s' % (prefix, elementName, saxutils.escape(obj), elementName, newline)]
+        elif isinstance(obj, list):
+            if len(obj) < 1:
+                xmlString = ""
+            else:
+                objTypeStr = self._genObjTypeStr("list")
+                xmlString = ['%s<%s%s>%s' % (prefix, elementName, objTypeStr, newline)]
+                for item in obj:
+                    xmlString.extend(self._marshal(item, indent=indent+increment))
+                xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
+        elif isinstance(obj, tuple):
+            if len(obj) < 1:
+                xmlString = ""
             else:
-                xmlString.append(newline)
-                if (elementAdd != None):
-                    xmlString.append("%s<%s>%s" % (prefix, elementAdd, newline))
-                xmlString.extend(xmlMemberString)
-                if (elementAdd != None):
-                    xmlString.append("%s</%s>%s" % (prefix, elementAdd, newline))
-                    prefix = prefix[:-increment]
-                    indent -= increment
+                objTypeStr = self._genObjTypeStr("list")
+                xmlString = ['%s<%s%s mutable="false">%s' % (prefix, elementName, objTypeStr, newline)]
+                for item in obj:
+                    xmlString.extend(self._marshal(item, indent=indent+increment))
                 xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
+        elif isinstance(obj, dict):
+            objTypeStr = self._genObjTypeStr("dict")
+            xmlString = ['%s<%s%s>%s' % (prefix, elementName, objTypeStr, newline)]
+            subprefix = prefix + " "*increment
+            subindent = indent + 2*increment
+            keys = obj.keys()
+            keys.sort()
+            for key in keys:
+                xmlString.append("%s<%s>%s" % (subprefix, DICT_ITEM_NAME, newline))
+                xmlString.extend(self._marshal(key, elementName=DICT_ITEM_KEY_NAME, indent=subindent))
+                xmlString.extend(self._marshal(obj[key], elementName=DICT_ITEM_VALUE_NAME, indent=subindent))
+                xmlString.append("%s</%s>%s" % (subprefix, DICT_ITEM_NAME, newline))
+            xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
+        elif hasattr(obj, "__xmlcontent__"):
+            contentValue = getattr(obj, obj.__xmlcontent__)
+            if contentValue == None: 
+                contentValue = ''
+            else:
+                contentValue = saxutils.escape(contentValue)
+            xmlString = ["%s<%s%s%s>%s</%s>%s" % (prefix, elementName, nameSpaceAttrs, objattrs, contentValue, elementName, newline)]        
         else:
-            xmlString.append("/>%s" % newline)
-##        return xmlString
-    xmlMarshallerLogger.debug("<-- _marshal: %s" % str(xmlString))
-    return xmlString
+            # Only add the objtype if the element tag is unknown to us.
+            if (self.isKnownType(elementName) == True): 
+                objTypeStr = ""
+            else:
+                objTypeStr = self._genObjTypeStr("%s.%s" % (obj.__class__.__module__, className))
+            xmlString = ['%s<%s%s%s%s' % (prefix, elementName, nameSpaceAttrs, objattrs, objTypeStr)]
+            # get the member, value pairs for the object, filtering out the types we don"t support
+            if (elementAdd != None):
+                prefix += increment*" "
+                indent += increment
+            xmlMemberString = []
+            if hasattr(obj, "__xmlbody__"):
+                xmlbody = getattr(obj, obj.__xmlbody__)
+                if xmlbody != None:
+                    xmlMemberString.append(xmlbody)           
+            else:
+                if hasattr(obj, "__xmlattrgroups__"):
+                    attrGroups = obj.__xmlattrgroups__.copy()
+                    if (not isinstance(attrGroups, dict)):
+                        raise "__xmlattrgroups__ is not a dict, but must be"
+                    for n in attrGroups.iterkeys():
+                        members_to_skip.extend(attrGroups[n])
+                else:
+                    attrGroups = {}
+                # add the list of all attributes to attrGroups
+                eList = obj.__dict__.keys()    
+                eList.sort()
+                attrGroups["__nogroup__"] = eList
+                
+                for eName, eList in attrGroups.iteritems():
+                    if (eName != "__nogroup__"):
+                        prefix += increment*" "
+                        indent += increment
+                        objTypeStr = self._genObjTypeStr("None")
+                        xmlMemberString.append('%s<%s%s>%s' % (prefix, eName, objTypeStr, newline))
+                    for name in eList:
+                        value = obj.__dict__[name]
+                        if eName == "__nogroup__" and name in members_to_skip: continue
+                        if name.startswith("__") and name.endswith("__"): continue
+                        if (hasattr(obj, "__xmlcdatacontent__") and (obj.__xmlcdatacontent__ == name)):
+                            continue
+                        subElementNameSpacePrefix = nameSpacePrefix
+                        if hasattr(obj, "__xmlattrnamespaces__"):
+                            for nameSpaceKey, nameSpaceValues in getattr(obj, "__xmlattrnamespaces__").iteritems():
+                                if name in nameSpaceValues:
+                                    subElementNameSpacePrefix = nameSpaceKey + ":"
+                                    break
+                        # handle sequences listed in __xmlflattensequence__
+                        # specially: instead of listing the contained items inside
+                        # of a separate list, as God intended, list them inside
+                        # the object containing the sequence.
+                        if (hasattr(obj, "__xmlflattensequence__") and (value != None) and (name in asDict(obj.__xmlflattensequence__))):
+                            xmlnametuple = obj.__xmlflattensequence__[name]
+                            if (xmlnametuple == None):
+                                xmlnametuple = [name]
+                            elif (not isinstance(xmlnametuple, (tuple,list))):
+                                xmlnametuple = [str(xmlnametuple)]
+                            xmlname = None
+                            if (len(xmlnametuple) == 1):
+                                xmlname = xmlnametuple[0]
+    ##                        ix = 0
+                            if not isinstance(value, (list, tuple)):
+                              value = [value]
+                            for seqitem in value:
+    ##                            xmlname = xmlnametuple[ix]
+    ##                            ix += 1
+    ##                            if (ix >= len(xmlnametuple)):
+    ##                                ix = 0
+                                xmlMemberString.extend(self._marshal(seqitem, xmlname, subElementNameSpacePrefix, indent=indent+increment))
+                        else:
+                            if (hasattr(obj, "__xmlrename__") and name in asDict(obj.__xmlrename__)):
+                                xmlname = obj.__xmlrename__[name]
+                            else:
+                                xmlname = name
+                            xmlMemberString.extend(self._marshal(value, xmlname, subElementNameSpacePrefix, indent=indent+increment))
+                    if (eName != "__nogroup__"):
+                        xmlMemberString.append("%s</%s>%s" % (prefix, eName, newline))
+                        prefix = prefix[:-increment]
+                        indent -= increment
+    
+            # if we have nested elements, add them here, otherwise close the element tag immediately.
+            newList = []
+            for s in xmlMemberString:
+                if (len(s) > 0): newList.append(s)
+            xmlMemberString = newList
+            if len(xmlMemberString) > 0:
+                xmlString.append(">")
+                if hasattr(obj, "__xmlbody__"):
+                    xmlString.extend(xmlMemberString)
+                    xmlString.append("</%s>%s" % (elementName, newline))
+                else:
+                    xmlString.append(newline)
+                    if (elementAdd != None):
+                        xmlString.append("%s<%s>%s" % (prefix, elementAdd, newline))
+                    xmlString.extend(xmlMemberString)
+                    if (elementAdd != None):
+                        xmlString.append("%s</%s>%s" % (prefix, elementAdd, newline))
+                        prefix = prefix[:-increment]
+                        indent -= increment
+                    xmlString.append("%s</%s>%s" % (prefix, elementName, newline))
+            else:
+                if hasattr(obj, "__xmlcdatacontent__"):
+                    cdataAttr = obj.__xmlcdatacontent__
+                    cdataContent = obj.__dict__[cdataAttr]
+                    xmlString.append("><![CDATA[%s]]></%s>%s" % (cdataContent, elementName, newline))
+                else:
+                    xmlString.append("/>%s" % newline)
+    ##        return xmlString
+        xmlMarshallerLogger.debug("<-- _marshal: %s" % str(xmlString))
+        #print "<-- _marshal: %s" % str(xmlString)
+        self.popNSStack()
+        return xmlString
 
 # A simple test, to be executed when the xmlmarshaller is run standalone
 class MarshallerPerson:
index 97d74130cd837ef10293559fb929d31065b6c6a1..4290c71693a1129ca0ffbfe257bf9af109cc25d9 100644 (file)
@@ -9,8 +9,10 @@
 # Copyright:    (c) 2004-2005 ActiveGrid, Inc.
 # License:      wxWindows License
 #----------------------------------------------------------------------------
-import xml.sax
 from activegrid.util.lang import *
+ifDefPy()
+import xml.sax
+endIfDef()
 
 class XMLPrettyPrinter(xml.sax.ContentHandler):
     def __init__(self, indentationChar='    ', newlineChar='\n'):
index ac0ed7c6cf20f62d89512651dab038bc72f01971..02c0c8b2ca890acdcd3b612f77f63af8963ab734 100644 (file)
 # License:      wxWindows License
 #----------------------------------------------------------------------------
 
+from activegrid.util.lang import *
 import os
+import time
+import urllib
+import logging
+from activegrid.util.lang import *
 import activegrid.util.objutils as objutils
 import activegrid.util.xmlmarshaller as xmlmarshaller
+import activegrid.util.aglogging as aglogging
 
-agKnownTypes = None
+xmlLogger = logging.getLogger("activegrid.util.xml")
+    
+def load(fileName, knownTypes=None, knownNamespaces=None):
+    loadedObject = None
+    fileObject = file(fileName)
+    timeStart = time.time()
+    try:
+        xml = fileObject.read()
+        loadedObject = unmarshal(xml, knownTypes=knownTypes, knownNamespaces=knownNamespaces, xmlSource=fileName)
+        loadedObject.fileName = os.path.abspath(fileName)
+        if hasattr(loadedObject, 'initialize'):
+            loadedObject.initialize()
+    finally:
+        fileObject.close()
+        timeDone = time.time()
+        aglogging.info(xmlLogger, ('Load statistics for file %s: elapsed time = %f secs' % (fileName, timeDone-timeStart)))
+    return loadedObject
 
-def defaultLoad(fileObject, knownTypes=None):
-    xml = fileObject.read()
-    loadedObject = unmarshal(xml, knownTypes=knownTypes)
-    if hasattr(fileObject, 'name'):
-        loadedObject.fileName = os.path.abspath(fileObject.name)
-    loadedObject.initialize()
+def loadURI(uri, knownTypes=None, knownNamespaces=None, xmlSource=None):
+    loadedObject = None
+    xml = urllib.urlopen(uri).read()
+    loadedObject = unmarshal(xml, knownTypes=knownTypes, knownNamespaces=knownNamespaces, xmlSource=xmlSource)
+    loadedObject.fileName = uri
+    if hasattr(loadedObject, 'initialize'):
+        loadedObject.initialize()
     return loadedObject
 
-def unmarshal(xml, knownTypes=None):
-    if not knownTypes: knownTypes = getAgKnownTypes()
-    return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)    
+def unmarshal(xml, knownTypes=None, knownNamespaces=None, xmlSource=None):
+    if (knownTypes == None): 
+        knownTypes, knownNamespaces = getAgKnownTypes()
+    return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes, knownNamespaces=knownNamespaces, xmlSource=xmlSource)    
 
-def defaultSave(fileObject, objectToSave, prettyPrint=True, knownTypes=None, encoding='utf-8'):
-    xml = marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, encoding=encoding)
-    fileObject.write(xml)
-    fileObject.flush()
+def save(fileName, objectToSave, prettyPrint=True, marshalType=True, knownTypes=None, knownNamespaces=None, encoding='utf-8'):
+    if hasattr(objectToSave, '_xmlReadOnly') and objectToSave._xmlReadOnly == True:
+        raise xmlmarshaller.MarshallerException('Error marshalling object to file "%s": object is marked "readOnly" and cannot be written' % (fileName))        
+    timeStart = time.time()
+    xml = marshal(objectToSave, prettyPrint=prettyPrint, marshalType=marshalType, knownTypes=knownTypes, knownNamespaces=knownNamespaces, encoding=encoding)
+    fileObject = file(fileName, 'w')
+    try:
+        fileObject.write(xml)
+        fileObject.flush()
+    except Exception, errorData:
+        fileObject.close()
+        raise xmlmarshaller.MarshallerException('Error marshalling object to file "%s": %s' % (fileName, str(errorData)))
+    fileObject.close()
+    timeDone = time.time()
+    aglogging.info(xmlLogger, ('Save statistics for file %s: elapsed time = %f secs' % (fileName, timeDone-timeStart)))
+    
+def marshal(objectToSave, prettyPrint=True, marshalType=True, knownTypes=None, knownNamespaces=None, encoding='utf-8'):
+    if (knownTypes == None): 
+        knownTypes, knownNamespaces = getAgKnownTypes()
+    return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, marshalType=marshalType, knownTypes=knownTypes, knownNamespaces=knownNamespaces, encoding=encoding)
+    
+def addNSAttribute(xmlDoc, shortNamespace, longNamespace):
+    if not hasattr(xmlDoc, "__xmlnamespaces__"):
+        xmlDoc.__xmlnamespaces__ = {shortNamespace:longNamespace}
+    elif shortNamespace not in xmlDoc.__xmlnamespaces__:
+        if (hasattr(xmlDoc.__class__, "__xmlnamespaces__") 
+            and (xmlDoc.__xmlnamespaces__ is xmlDoc.__class__.__xmlnamespaces__)):
+            xmlDoc.__xmlnamespaces__ = dict(xmlDoc.__xmlnamespaces__)
+        xmlDoc.__xmlnamespaces__[shortNamespace] = longNamespace
 
-def marshal(objectToSave, prettyPrint=True, knownTypes=None, encoding='utf-8'):
-    if not knownTypes: knownTypes = getAgKnownTypes()
-    return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, encoding=encoding)
+def genShortNS(xmlDoc, longNamespace=None):
+    if not hasattr(xmlDoc, "__xmlnamespaces__"):
+        return "ns1"
+    elif longNamespace != None and longNamespace in xmlDoc.__xmlnamespaces__.items():
+        for key, value in xmlDoc.__xmlnamespaces__.iteritems():
+            if value == longNamespace:
+                return key
+    i = 1
+    while ("ns%d" % i) in xmlDoc.__xmlnamespaces__:
+        i += 1
+    return ("ns%d" % i)
     
-def cloneObject(objectToClone, knownTypes=None, encoding='utf-8'):
-    if not knownTypes: knownTypes = getAgKnownTypes()
-    xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, knownTypes=knownTypes, encoding=encoding)
-    clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
+def genTargetNS(fileName, applicationName=None, type=None):
+    if (applicationName != None):
+        if (type != None):
+            tns = "urn:%s:%s:%s" % (applicationName, type, fileName)
+        else:
+            tns = "urn:%s:%s" % (applicationName, fileName)
+    else:
+        tns = "urn:%s" % fileName
+    return tns
+    
+def splitType(typeName):
+    index = typeName.rfind(':')
+    if index != -1:
+        ns = typeName[:index]
+        complexTypeName = typeName[index+1:]
+    else:
+        ns = None
+        complexTypeName = typeName
+    return (ns, complexTypeName)
+        
+def cloneObject(objectToClone, knownTypes=None, marshalType=True, knownNamespaces=None, encoding='utf-8'):
+    if (knownTypes == None): 
+        knownTypes, knownNamespaces = getAgKnownTypes()
+    xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, marshalType=marshalType, knownTypes=knownTypes, knownNamespaces=knownNamespaces, encoding=encoding)
+    clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes, knownNamespaces=knownNamespaces)
     if hasattr(objectToClone, 'fileName'):
         clonedObject.fileName = objectToClone.fileName
+    if hasattr(objectToClone, "_parentDoc"):
+        clonedObject._parentDoc = objectToClone._parentDoc
     try:
         clonedObject.initialize()
     except AttributeError:
         pass
     return clonedObject
 
-def getAgKnownTypes():
-    import activegrid.model.processmodel
-    import activegrid.model.schema
-    import activegrid.data.dataservice
-    import activegrid.server.deployment
-    global agKnownTypes
-    if agKnownTypes == None:
-        tmpAgKnownTypes = {} 
-        AG_TYPE_MAPPING = { 
+def getAgVersion(fileName):
+    fileObject = file(fileName)
+    try:
+        xml = fileObject.read()
+    finally:
+        fileObject.close()
+    i = xml.find(' ag:version=')
+    if i >= 0:
+        i += 12
+    else:
+        i2 = xml.find('<ag:')
+        if i2 >= 0:
+            i = xml.find(' version=', i2)
+            if i > 0:
+                i += 9
+        elif xml.find('<project version="10"') >= 0:
+            return "10"
+        else:
+            return None
+    version = None
+    if xml[i:i+1] == '"':
+        j = xml.find('"', i+1)
+        if (j > i+1):
+            version = xml[i+1:j]
+    return version
+
+def escape(data):
+    """Escape ', ", &, <, and > in a string of data.
+
+    Basically, everything that saxutils.escape does (and this calls that, at
+    least for now), but with " added as well.
+
+    XXX TODO make this faster; saxutils.escape() is really slow
+    """
+
+    import xml.sax.saxutils as saxutils
+
+    data=saxutils.escape(data)
+    data=data.replace("\"", "&quot;")
+
+    # IE doesn't support &apos;
+    # data=data.replace("\'", "&apos;")
+    data=data.replace("\'", "&#039;")
+
+    return data
+
+def unescape(data):
+    """Unescape ', ", &, <, and > in a string of data.
+
+    Basically, everything that saxutils.unescape does (and this calls that, at
+    least for now), but with " added as well.
+
+    XXX TODO make this faster; saxutils.unescape() is really slow
+    """
+
+    import xml.sax.saxutils as saxutils
+
+    data=data.replace("&quot;", "\"")
+    data=data.replace("&apos;", "\'")
+    return saxutils.unescape(data)
+
+    
+AG_NS_URL = "http://www.activegrid.com/ag.xsd"
+BPEL_NS_URL = "http://schemas.xmlsoap.org/ws/2003/03/business-process"
+HTTP_WSDL_NS_URL = "http://schemas.xmlsoap.org/wsdl/http/"
+MIME_WSDL_NS_URL = "http://schemas.xmlsoap.org/wsdl/mime/"
+SOAP_NS_URL = "http://schemas.xmlsoap.org/wsdl/soap/"
+SOAP12_NS_URL = "http://schemas.xmlsoap.org/wsdl/soap12/"
+WSDL_NS_URL = "http://schemas.xmlsoap.org/wsdl/"
+XFORMS_NS_URL = "http://www.w3c.org/xform.xsd"
+XMLSCHEMA_NS_URL = "http://www.w3.org/2001/XMLSchema"
+XSI_NS_URL = "http://www.w3.org/2001/XMLSchema-instance"
+XACML_NS_URL = "urn:oasis:names:tc:xacml:2.0:policy:schema:os"
+
+KNOWN_NAMESPACES = { AG_NS_URL          :  "ag",
+                     BPEL_NS_URL        :  "bpws",
+                     HTTP_WSDL_NS_URL   :  "http",
+                     MIME_WSDL_NS_URL   :  "mime",
+                     SOAP_NS_URL        :  "soap",
+                     SOAP12_NS_URL      :  "soap12",
+                     WSDL_NS_URL        :  "wsdl", 
+                     XFORMS_NS_URL      :  "xforms",                             
+                     XMLSCHEMA_NS_URL   :  "xs",
+                     XACML_NS_URL       :  "xacml",
+                   }
+    
+global agXsdToClassName
+agXsdToClassName = None
+def getAgXsdToClassName():
+    global agXsdToClassName
+    if (agXsdToClassName == None):
+        agXsdToClassName = {
             "ag:append"          : "activegrid.model.processmodel.AppendOperation",
+            "ag:attribute"       : "activegrid.model.identitymodel.Attribute",
             "ag:body"            : "activegrid.model.processmodel.Body",
+            "ag:category_substitutions"    : "activegrid.server.layoutrenderer.CategorySubstitutions",
+            "ag:command"         : "activegrid.model.wsdl.Command",
+            "ag:css"             : "activegrid.server.layoutrenderer.CSS", 
             "ag:cssRule"         : "activegrid.model.processmodel.CssRule",
+            "ag:databaseService" : "activegrid.server.deployment.DatabaseService",
             "ag:datasource"      : "activegrid.data.dataservice.DataSource",
+            "ag:dataObjectList"  : "activegrid.data.datalang.DataObjectList",
             "ag:debug"           : "activegrid.model.processmodel.DebugOperation",
             "ag:deployment"      : "activegrid.server.deployment.Deployment",
-            "ag:glue"            : "activegrid.model.processmodel.Glue",
+            "ag:generator"       : "activegrid.server.layoutrenderer.SerializableGenerator", 
+            "ag:head"            : "activegrid.server.layoutrenderer.Head", 
             "ag:hr"              : "activegrid.model.processmodel.HorizontalRow",
+            "ag:identity"        : "activegrid.model.identitymodel.Identity",
+            "ag:identityref"     : "activegrid.server.deployment.IdentityRef",
             "ag:image"           : "activegrid.model.processmodel.Image",
-            "ag:inputs"          : "activegrid.model.processmodel.Inputs",
             "ag:label"           : "activegrid.model.processmodel.Label",
-            "ag:processmodel"    : "activegrid.model.processmodel.ProcessModel",
-            "ag:processmodelref" : "activegrid.server.deployment.ProcessModelRef",
+            "ag:layout"          : "activegrid.server.layoutrenderer.Layout", 
+            "ag:layouts"         : "activegrid.server.layoutrenderer.Layouts", 
+            "ag:ldapsource"      : "activegrid.model.identitymodel.LDAPSource",
+            "ag:localService"    : "activegrid.server.deployment.LocalService",
+            "ag:parameter"       : "activegrid.server.layoutrenderer.Parameter",
+            "ag:parameters"      : "activegrid.server.layoutrenderer.Parameters",
+            "ag:processref"      : "activegrid.server.deployment.ProcessRef",
             "ag:query"           : "activegrid.model.processmodel.Query",
-            "ag:restParameter"   : "activegrid.server.deployment.RestParameter",
+            "ag:soapService"     : "activegrid.server.deployment.SoapService",
+            "ag:requiredFile"    : "activegrid.server.layoutrenderer.RequiredFile", 
+            "ag:resource"        : "activegrid.model.identitymodel.IDResource",
             "ag:restService"     : "activegrid.server.deployment.RestService",
+            "ag:rewrite"         : "activegrid.model.wsdl.Rewrite",
+            "ag:role"            : "activegrid.model.identitymodel.IDRole",
+            "ag:roledefn"        : "activegrid.model.identitymodel.RoleDefn",
+            "ag:rssService"      : "activegrid.server.deployment.RssService",
+            "ag:rule"            : "activegrid.model.identitymodel.IDRule",
             "ag:schemaOptions"   : "activegrid.model.schema.SchemaOptions",
             "ag:schemaref"       : "activegrid.server.deployment.SchemaRef",
+            "ag:serviceCache"    : "activegrid.server.deployment.ServiceCache",
+            "ag:serviceExtension": "activegrid.model.wsdl.ServiceExtension",
+            "ag:serviceExtensions": "activegrid.model.wsdl.ServiceExtensions",
+            "ag:serviceParameter": "activegrid.server.deployment.ServiceParameter",
             "ag:serviceref"      : "activegrid.server.deployment.ServiceRef",
             "ag:set"             : "activegrid.model.processmodel.SetOperation",
+            "ag:skinref"         : "activegrid.server.deployment.SkinRef",
+            "ag:skin"            : "activegrid.server.layoutrenderer.Skin",
+            "ag:skin_element_ref": "activegrid.server.layoutrenderer.SkinElementRef",
+            "ag:skin_element"    : "activegrid.server.layoutrenderer.SkinElement",
+            "ag:skins"           : "activegrid.server.layoutrenderer.Skins",
+            "ag:substitution"    : "activegrid.server.layoutrenderer.Substitution", 
             "ag:text"            : "activegrid.model.processmodel.Text",
             "ag:title"           : "activegrid.model.processmodel.Title",
-            "ag:view"            : "activegrid.model.processmodel.View",
+            "ag:usertemplate"    : "activegrid.model.identitymodel.UserTemplate",
+            "ag:xformref"        : "activegrid.server.deployment.XFormRef",
             "bpws:case"          : "activegrid.model.processmodel.BPELCase",
             "bpws:catch"         : "activegrid.model.processmodel.BPELCatch",
             "bpws:faultHandlers" : "activegrid.model.processmodel.BPELFaultHandlers",
+            "bpws:flow"          : "activegrid.model.processmodel.BPELFlow",
             "bpws:invoke"        : "activegrid.model.processmodel.BPELInvoke",
             "bpws:onMessage"     : "activegrid.model.processmodel.BPELOnMessage",
             "bpws:otherwise"     : "activegrid.model.processmodel.BPELOtherwise",
@@ -98,31 +293,117 @@ def getAgKnownTypes():
             "bpws:variable"      : "activegrid.model.processmodel.BPELVariable",
             "bpws:variables"     : "activegrid.model.processmodel.BPELVariables",
             "bpws:while"         : "activegrid.model.processmodel.BPELWhile",
-            "wsdl:message"       : "activegrid.model.processmodel.WSDLMessage",
-            "wsdl:part"          : "activegrid.model.processmodel.WSDLPart",
+            "http:address"       : "activegrid.model.wsdl.HttpAddress",
+            "http:binding"       : "activegrid.model.wsdl.HttpBinding",
+            "http:operation"     : "activegrid.model.wsdl.HttpOperation",
+            "http:urlEncoded"    : "activegrid.model.wsdl.HttpUrlEncoded",
+            "mime:content"       : "activegrid.model.wsdl.MimeContent",
+            "mime:mimeXml"       : "activegrid.model.wsdl.MimeMimeXml",
+            "soap:address"       : "activegrid.model.wsdl.SoapAddress",
+            "soap:binding"       : "activegrid.model.wsdl.SoapBinding",
+            "soap:body"          : "activegrid.model.wsdl.SoapBody",
+            "soap:fault"         : "activegrid.model.wsdl.SoapFault",
+            "soap:header"        : "activegrid.model.wsdl.SoapHeader",
+            "soap:operation"     : "activegrid.model.wsdl.SoapOperation",
+            "soap12:address"     : "activegrid.model.wsdl.Soap12Address",
+            "soap12:binding"     : "activegrid.model.wsdl.Soap12Binding",
+            "soap12:body"        : "activegrid.model.wsdl.Soap12Body",
+            "soap12:fault"       : "activegrid.model.wsdl.Soap12Fault",
+            "soap12:header"      : "activegrid.model.wsdl.Soap12Header",
+            "soap12:operation"   : "activegrid.model.wsdl.Soap12Operation",
+            "wsdl:binding"       : "activegrid.model.wsdl.WsdlBinding",
+            "wsdl:definitions"   : "activegrid.model.wsdl.WsdlDocument",
+            "wsdl:documentation" : "activegrid.model.wsdl.WsdlDocumentation",
+            "wsdl:fault"         : "activegrid.model.wsdl.WsdlFault",
+            "wsdl:import"        : "activegrid.model.wsdl.WsdlImport",
+            "wsdl:input"         : "activegrid.model.wsdl.WsdlInput",
+            "wsdl:message"       : "activegrid.model.wsdl.WsdlMessage",
+            "wsdl:operation"     : "activegrid.model.wsdl.WsdlOperation",
+            "wsdl:output"        : "activegrid.model.wsdl.WsdlOutput",
+            "wsdl:part"          : "activegrid.model.wsdl.WsdlPart",
+            "wsdl:port"          : "activegrid.model.wsdl.WsdlPort",
+            "wsdl:portType"      : "activegrid.model.wsdl.WsdlPortType",
+            "wsdl:service"       : "activegrid.model.wsdl.WsdlService",
+            "wsdl:types"         : "activegrid.model.wsdl.WsdlTypes",
+            "xacml:Action"       : "activegrid.model.identitymodel.XACMLAction",
+            "xacml:ActionAttributeDesignator" : "activegrid.model.identitymodel.XACMLActionAttributeDesignator",
+            "xacml:ActionMatch"  : "activegrid.model.identitymodel.XACMLActionMatch",
+            "xacml:Actions"      : "activegrid.model.identitymodel.XACMLActions",
+            "xacml:AttributeValue" : "activegrid.model.identitymodel.XACMLAttributeValue",
+            "xacml:Policy"       : "activegrid.model.identitymodel.XACMLPolicy",
+            "xacml:Resource"     : "activegrid.model.identitymodel.XACMLResource",
+            "xacml:ResourceAttributeDesignator" : "activegrid.model.identitymodel.XACMLResourceAttributeDesignator",
+            "xacml:ResourceMatch" : "activegrid.model.identitymodel.XACMLResourceMatch",
+            "xacml:Resources"    : "activegrid.model.identitymodel.XACMLResources",
+            "xacml:Rule"         : "activegrid.model.identitymodel.XACMLRule",
+            "xacml:Target"       : "activegrid.model.identitymodel.XACMLTarget",
+            "xforms:copy"        : "activegrid.model.processmodel.XFormsCopy",
             "xforms:group"       : "activegrid.model.processmodel.XFormsGroup",
+            "xforms:include"     : "activegrid.model.processmodel.XFormsInclude",
             "xforms:input"       : "activegrid.model.processmodel.XFormsInput",
+            "xforms:item"        : "activegrid.model.processmodel.XFormsItem",
+            "xforms:itemset"     : "activegrid.model.processmodel.XFormsItemset",
             "xforms:label"       : "activegrid.model.processmodel.XFormsLabel",
+            "xforms:model"       : "activegrid.model.processmodel.XFormsModel",
             "xforms:output"      : "activegrid.model.processmodel.XFormsOutput",
             "xforms:secret"      : "activegrid.model.processmodel.XFormsSecret",
+            "xforms:select1"     : "activegrid.model.processmodel.XFormsSelect1",
+            "xforms:submission"  : "activegrid.model.processmodel.XFormsSubmission",
             "xforms:submit"      : "activegrid.model.processmodel.XFormsSubmit",
+            "xforms:value"       : "activegrid.model.processmodel.XFormsValue",
+            "xforms:xform"       : "activegrid.model.processmodel.View",
+            "xforms:xforms"      : "activegrid.model.processmodel.XFormsRoot",
             "xs:all"             : "activegrid.model.schema.XsdSequence",
+            "xs:any"             : "activegrid.model.schema.XsdAny",
+            "xs:attribute"       : "activegrid.model.schema.XsdAttribute",
+            "xs:complexContent"  : "activegrid.model.schema.XsdComplexContent",
             "xs:complexType"     : "activegrid.model.schema.XsdComplexType",
             "xs:element"         : "activegrid.model.schema.XsdElement",
+            "xs:enumeration"     : "activegrid.model.schema.XsdEnumeration",
+            "xs:extension"       : "activegrid.model.schema.XsdExtension",
             "xs:field"           : "activegrid.model.schema.XsdKeyField",
+            "xs:import"          : "activegrid.model.schema.XsdInclude",
+            "xs:include"         : "activegrid.model.schema.XsdInclude",
             "xs:key"             : "activegrid.model.schema.XsdKey",
             "xs:keyref"          : "activegrid.model.schema.XsdKeyRef",
+            "xs:length"          : "activegrid.model.schema.XsdLength",
+            "xs:list"            : "activegrid.model.schema.XsdList",
+            "xs:maxLength"       : "activegrid.model.schema.XsdMaxLength",
+            "xs:restriction"     : "activegrid.model.schema.XsdRestriction",
             "xs:schema"          : "activegrid.model.schema.Schema",
             "xs:selector"        : "activegrid.model.schema.XsdKeySelector",              
             "xs:sequence"        : "activegrid.model.schema.XsdSequence",
-          }
-                   
-        for keyName, className in AG_TYPE_MAPPING.iteritems():
-            try:
-                tmpAgKnownTypes[keyName] = objutils.classForName(className)
-            except KeyError:
-                print "Error mapping knownType", className
-                pass
-        if len(tmpAgKnownTypes) > 0:
-            agKnownTypes = tmpAgKnownTypes
-    return agKnownTypes
+            "xs:simpleContent"   : "activegrid.model.schema.XsdSimpleContent",
+            "xs:simpleType"      : "activegrid.model.schema.XsdSimpleType",
+            "xs:totalDigits"     : "activegrid.model.schema.XsdTotalDigits",
+        }
+    return agXsdToClassName
+    
+global agKnownTypes
+agKnownTypes = None
+def getAgKnownTypes():
+    global agKnownTypes
+    if agKnownTypes == None:
+        try:
+            tmpAgKnownTypes = {}
+            import activegrid.model.processmodel
+            import activegrid.model.schema
+            import activegrid.server.deployment
+            import activegrid.model.wsdl
+            ifDefPy()
+            import activegrid.data.dataservice
+            endIfDef()
+            for keyName, className in getAgXsdToClassName().iteritems():
+                classType = objutils.classForName(className)
+                if (classType == None):
+                    raise Exception("Cannot get class type for %s" % className)
+                else:
+                    tmpAgKnownTypes[keyName] = classType
+            if len(tmpAgKnownTypes) > 0:
+                agKnownTypes = tmpAgKnownTypes
+        except ImportError:
+            agKnownTypes = {}
+    if len(agKnownTypes) == 0:     # standalone IDE and XmlMarshaller don't contain known AG types
+        noKnownNamespaces = {}
+        return agKnownTypes, noKnownNamespaces            
+    return agKnownTypes, KNOWN_NAMESPACES
index aa0d2f02b697422f7109fa6babd89c8b788d5e1b..a2a6d56684a12e3f3627badc94e4faef5728c90e 100644 (file)
 
 
 import sys
+import os.path
 import wx
 import wx.lib.docview as docview
 import wx.lib.pydocview as pydocview
 import TextEditor
 import FindService
-import os.path
 _ = wx.GetTranslation
 
 
@@ -90,7 +90,7 @@ class TextEditorApplication(pydocview.DocApp):
         if os.path.exists("tips.txt"):
             wx.CallAfter(self.ShowTip, wx.GetApp().GetTopWindow(), wx.CreateFileTipProvider("tips.txt", 0))
 
-        wx.UpdateUIEvent.SetUpdateInterval(400)  # Overhead of updating menus was too much.  Change to update every 400 milliseconds.
+        wx.UpdateUIEvent.SetUpdateInterval(1000)  # Overhead of updating menus was too much.  Change to update every N milliseconds.
 
         # Tell the framework that everything is great
         return True
index 6a1b7fe998fbafe2f5c901f0307fbc3a608485be..051bbdb6e8690c2473a269d416afccdf15f8aab6 100755 (executable)
@@ -34,8 +34,9 @@ import sys, os
 # We happen to be doing that here in this script, so make sure to
 # remove the build_options.py file, so that config.py will recreate it.
 
-if os.path.exists("build_options.py"):
-    os.remove("build_options.py")
+for bo_name in ["build_options.py", "build_options.pyc"]:
+    if os.path.exists(bo_name):
+        os.remove(bo_name)
 
 sys.setup_is_main =  __name__ == "__main__"  # an icky hack!
 from config import *
index a440c6d8f76fee759950f5390ad4b6cffb02c89d..0253f1abc674c77a963121996b1561814963fa85 100644 (file)
@@ -91,6 +91,7 @@
 %rename(SIZE_AUTO)                          wxSIZE_AUTO;
 %rename(SIZE_USE_EXISTING)                  wxSIZE_USE_EXISTING;
 %rename(SIZE_ALLOW_MINUS_ONE)               wxSIZE_ALLOW_MINUS_ONE;
+%rename(SIZE_FORCE)                         wxSIZE_FORCE;
 %rename(PORTRAIT)                           wxPORTRAIT;
 %rename(LANDSCAPE)                          wxLANDSCAPE;
 %rename(PRINT_QUALITY_HIGH)                 wxPRINT_QUALITY_HIGH;
 %rename(PRINT_QUALITY_DRAFT)                wxPRINT_QUALITY_DRAFT;
 %rename(ID_ANY)                             wxID_ANY;
 %rename(ID_SEPARATOR)                       wxID_SEPARATOR;
+%rename(ID_NONE)                            wxID_NONE;
 %rename(ID_LOWEST)                          wxID_LOWEST;
 %rename(ID_OPEN)                            wxID_OPEN;
 %rename(ID_CLOSE)                           wxID_CLOSE;
 %rename(MOD_NONE)                           wxMOD_NONE;
 %rename(MOD_ALT)                            wxMOD_ALT;
 %rename(MOD_CONTROL)                        wxMOD_CONTROL;
+%rename(MOD_ALTGR)                          wxMOD_ALTGR;
 %rename(MOD_SHIFT)                          wxMOD_SHIFT;
+%rename(MOD_META)                           wxMOD_META;
 %rename(MOD_WIN)                            wxMOD_WIN;
+%rename(MOD_CMD)                            wxMOD_CMD;
+%rename(MOD_ALL)                            wxMOD_ALL;
 %rename(UPDATE_UI_NONE)                     wxUPDATE_UI_NONE;
 %rename(UPDATE_UI_RECURSE)                  wxUPDATE_UI_RECURSE;
 %rename(UPDATE_UI_FROMIDLE)                 wxUPDATE_UI_FROMIDLE;
 %rename(IMAGE_ALPHA_THRESHOLD)              wxIMAGE_ALPHA_THRESHOLD;
 %rename(IMAGE_ALPHA_OPAQUE)                 wxIMAGE_ALPHA_OPAQUE;
 %rename(ImageHandler)                       wxImageHandler;
+%rename(PyImageHandler)                     wxPyImageHandler;
 %rename(ImageHistogram)                     wxImageHistogram;
 %rename(Image_RGBValue)                     wxImage_RGBValue;
 %rename(Image_HSVValue)                     wxImage_HSVValue;
index 268743472dbc75703e6dd7c5e888e2115e8d92c2..48c940867e975cff938821bef7c036e3bf69de0f 100644 (file)
@@ -283,10 +283,13 @@ the ``type`` parameter.", "");
     
 #ifdef __WXMSW__
     bool CopyFromCursor(const wxCursor& cursor);
+
 // WXWIN_COMPATIBILITY_2_4
   #if 0
     int GetQuality();
     void SetQuality(int q);
+    %pythoncode { GetQuality = wx._deprecated(GetQuality) }
+    %pythoncode { SetQuality = wx._deprecated(SetQuality) }
   #endif
 #endif
 
index d50d06a3c213a7a372bb8c81f31945a49b4bf716..365dda2c5a3e33cb2db503752a10b68f60307fa3 100644 (file)
@@ -73,6 +73,15 @@ public:
     List choices=EmptyList, long style=0, Validator validator=DefaultValidator,
     String name=ChoiceNameStr) -> bool",
         "Actually create the GUI Choice control for 2-phase creation", "");
+
+    DocDeclStr(
+        int , GetCurrentSelection() const,
+        "Unlike `GetSelection` which only returns the accepted selection value,
+i.e. the selection in the control once the user closes the dropdown
+list, this function returns the current selection.  That is, while the
+dropdown list is shown, it returns the currently selected item in
+it. When it is not shown, its result is the same as for the other
+function.", "");
     
 
     static wxVisualAttributes
index 1c262b38884f324ae074584eef6fa4f717fa1a62..53a040abed3f82a2fe63b5a2adf63b9c7fb62a76 100644 (file)
@@ -142,7 +142,8 @@ normal clipboard, if primary is True.", "");
             self._instance = None
         def _checkInstance(self):
             if self._instance is None:
-                self._instance = self._initfunc(*self._args, **self._kwargs)        
+                if wx.GetApp():
+                    self._instance = self._initfunc(*self._args, **self._kwargs)        
         def __getattr__(self, name):
             self._checkInstance()
             return getattr(self._instance, name)
index 9359f75dfb108a84718ae1703f2689a777d6cb0c..d842914b93de0665f2e8eb5efe71f4c9f5b20ffe 100644 (file)
@@ -166,6 +166,15 @@ the combobox text field.", "",
         GetMark);
 #endif
 
+    DocDeclStr(
+        int , GetCurrentSelection() const,
+        "Unlike `GetSelection` which only returns the accepted selection value,
+i.e. the selection in the control once the user closes the dropdown
+list, this function returns the current selection.  That is, while the
+dropdown list is shown, it returns the currently selected item in
+it. When it is not shown, its result is the same as for the other
+function.", "");
+    
     DocDeclStr(
         bool , SetStringSelection(const wxString& string),
         "Select the item with the specifed string", "");
index 940ec32ba3cab9540fd7faafd91c97c07cc60d3b..3ca6ae08f11c7bb66fe0334f701e8b22ed7a5951 100644 (file)
@@ -122,6 +122,33 @@ PyObject* wxPyMakeSwigPtr(void* ptr, const wxChar* className) {
 }
 
 
+// Python's PyInstance_Check does not return True for instances of new-style
+// classes.  This should get close enough for both new and old classes but I
+// should re-evaluate the need for doing instance checks...
+bool wxPyInstance_Check(PyObject* obj) {
+    return PyObject_HasAttrString(obj, "__class__") != 0;
+}
+
+
+
+// This one checks if the object is an instance of a SWIG proxy class (it has
+// a .this attribute, and the .this attribute is a PySwigObject.)
+bool wxPySwigInstance_Check(PyObject* obj) {
+    static PyObject* this_str = NULL;
+    if (this_str == NULL)
+        this_str = PyString_FromString("this");
+    
+    PyObject* this_attr = PyObject_GetAttr(obj, this_str);
+    if (this_attr) {
+        bool retval = (PySwigObject_Check(this_attr) != 0);
+        Py_DECREF(this_attr);
+        return retval;
+    }
+
+    PyErr_Clear();
+    return false;
+}
 
 
 // Export a C API in a struct.  Other modules will be able to load this from
index 84ecb3802abdc16dfecace34d83d2c1fafca9cf0..24296df053c135aee3ed051c073cad2544307e06 100644 (file)
@@ -248,8 +248,7 @@ in the given direction.", "");
             for (size_t i=0; i<count; i++) {
                 wxDataFormat* format = new wxDataFormat(formats[i]);
                 PyObject* obj = wxPyConstructObject((void*)format, wxT("wxDataFormat"), true);
-                PyList_Append(list, obj);
-                Py_DECREF(obj);
+                PyList_SET_ITEM(list, i, obj); // PyList_SET_ITEM steals a reference
             }            
             wxPyEndBlockThreads(blocked);
             delete [] formats;
index f0284ce688763161d28a33be8f8e9f3d146bba06..702c6ff32d78227d7f37cdcd2c24db52f9d5573a 100644 (file)
@@ -586,10 +586,22 @@ public:
     wxDateTime ToTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
     wxDateTime& MakeTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
 
-        // transform to GMT/UTC
-    wxDateTime ToGMT(bool noDST = false);
+        // interpret current value as being in another timezone and transform
+        // it to local one
+    wxDateTime FromTimezone(const wxDateTime::TimeZone& tz, bool noDST = false) const;
+    wxDateTime& MakeFromTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
+
+        // transform to/from GMT/UTC
+    wxDateTime ToUTC(bool noDST = false) const;
+    wxDateTime& MakeUTC(bool noDST = false);
+
+    wxDateTime ToGMT(bool noDST = false) const;
     wxDateTime& MakeGMT(bool noDST = false);
 
+    wxDateTime FromUTC(bool noDST = false) const;
+    wxDateTime& MakeFromUTC(bool noDST = false);
+
+    
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
         //
index 2247a50ce3fc43d0221ea4e1f458a7a476decb35..8585089903327fafd24f1f9943b6db74143d1b9b 100644 (file)
@@ -497,6 +497,7 @@ enum {
     wxSIZE_AUTO,
     wxSIZE_USE_EXISTING,
     wxSIZE_ALLOW_MINUS_ONE,
+    wxSIZE_FORCE,
     wxPORTRAIT,
     wxLANDSCAPE,
     wxPRINT_QUALITY_HIGH,
@@ -506,6 +507,7 @@ enum {
 
     wxID_ANY,
     wxID_SEPARATOR,
+    wxID_NONE,
 
     wxID_LOWEST,
     wxID_OPEN,
index 5331cb0fc8a3930d60803182e8f94e422b3687ee..ce01fce0c949a97818220411d529e91127dd384f 100644 (file)
@@ -99,8 +99,16 @@ wxEventType wxNewEventType();
 %constant wxEventType wxEVT_NAVIGATION_KEY;
 %constant wxEventType wxEVT_KEY_DOWN;
 %constant wxEventType wxEVT_KEY_UP;
+
+%{
+#if ! wxUSE_HOTKEY
+#define wxEVT_HOTKEY -9999
+#endif
+%}
+
 %constant wxEventType wxEVT_HOTKEY;
-    
+
+
 // Set cursor event
 %constant wxEventType wxEVT_SET_CURSOR;
 
@@ -2234,8 +2242,15 @@ public:
 
 
 DocStr(wxWindowDestroyEvent,
-       "The EVT_WINDOW_DESTROY event is sent right before the window is
-destroyed.", "");
+       "The EVT_WINDOW_DESTROY event is sent from the `wx.Window` destructor
+when the GUI window is destroyed.
+
+When a class derived from `wx.Window` is destroyed its destructor will
+have already run by the time this event is sent. Therefore this event
+will not usually be received at all by the window itself.  Since it is
+received after the destructor has run, an object should not try to
+handle its own wx.WindowDestroyEvent, but it can be used to get
+notification of the destruction of another window.", "");
 class wxWindowDestroyEvent : public wxCommandEvent
 {
 public:
index b54b16dc4113ad99f4655768d68aabf3a3409292..0e1922ad52c8bec8f215849c71a39f0eed14ad2c 100644 (file)
@@ -345,7 +345,7 @@ public:
 
     // return instance of the wxFontMapper singleton
     static wxFontMapper *Get();
-    // set the sigleton to 'mapper' instance and return previous one
+    // set the singleton to 'mapper' instance and return previous one
     static wxFontMapper *Set(wxFontMapper *mapper);
 
 
@@ -364,10 +364,13 @@ public:
     // get the n-th supported encoding
     static wxFontEncoding GetEncoding(size_t n);
 
-    // return internal string identifier for the encoding (see also
-    // GetEncodingDescription())
+    // return canonical name of this encoding (this is a short string,
+    // GetEncodingDescription() returns a longer one)
     static wxString GetEncodingName(wxFontEncoding encoding);
 
+//     // return a list of all names of this encoding (see GetEncodingName)
+//     static const wxChar** GetAllEncodingNames(wxFontEncoding encoding);
+    
     // return user-readable string describing the given encoding
     //
     // NB: hard-coded now, but might change later (read it from config?)
@@ -380,9 +383,6 @@ public:
     static wxFontEncoding GetEncodingFromName(const wxString& name);
 
 
-    // set the config object to use (may be NULL to use default)
-    void SetConfig(wxConfigBase *config);
-
     // set the root config path to use (should be an absolute path)
     void SetConfigPath(const wxString& prefix);
 
index 9d6186ad639f732061d1ea5d43ccf53ad6fbcb6d..e39ac0b9c04375dd7c702a8639e30692717e0c2b 100644 (file)
@@ -214,7 +214,9 @@ long wxGetNumberFromUser(const wxString& message,
                          long min = 0, long max = 100,
                          wxWindow *parent = NULL,
                          const wxPoint& pos = wxDefaultPosition);
+%pythoncode { GetNumberFromUser = wx._deprecated(GetNumberFromUser) }
 #endif
+
 // GDI Functions
 
 MustHaveApp(wxColourDisplay);
index aceb32f72f642f81873f9af42a8ad4afc2f0e10e..bc320ba24d80558b02b6b97f5c75fd0cd0454927 100644 (file)
@@ -59,6 +59,43 @@ public:
 
 //---------------------------------------------------------------------------
 
+
+DocStr(wxPyImageHandler,
+"This is the base class for implementing image file loading/saving, and
+image creation from data, all written in Python.  To create a custom
+image handler derive a new class from wx.PyImageHandler and provide
+the following methods::
+
+    def DoCanRead(self, stream) --> bool
+        '''Check if this handler can read the image on the stream'''
+
+    def LoadFile(self, image, stream, verbose, index) --> bool
+        '''Load image data from the stream and load it into image.'''
+
+    def SaveFile(self, image, stream, verbose) --> bool
+        '''Save the iamge data in image to the stream using
+           this handler's image file format.'''
+
+    def GetImageCount(self, stream) --> int
+        '''If this image format can hold more than one image,
+           how many does the image on the stream have?'''
+
+To activate your handler create an instance of it and pass it to
+`wx.Image_AddHandler`.  Be sure to call `SetName`, `SetType`, and
+`SetExtension` from your constructor.
+", "");
+
+class wxPyImageHandler: public wxImageHandler {
+public:
+    %pythonAppend wxPyImageHandler() "self._SetSelf(self)"
+    wxPyImageHandler();
+    void _SetSelf(PyObject *self);
+};
+
+
+//---------------------------------------------------------------------------
+
+
 class wxImageHistogram /* : public wxImageHistogramBase */
 {
 public:
@@ -155,25 +192,41 @@ Unlike RGB data, not all images have an alpha channel and before using
 with `HasAlpha`. Note that currently only images loaded from PNG files
 with transparency information will have an alpha channel.", "");
 
+
 %{
 // Pull the nested class out to the top level for SWIG's sake
 #define wxImage_RGBValue wxImage::RGBValue
 #define wxImage_HSVValue wxImage::HSVValue
 %}
+
+DocStr(wxImage_RGBValue,
+"An object that contains values for red, green and blue which represent
+the value of a color. It is used by `wx.Image.HSVtoRGB` and
+`wx.Image.RGBtoHSV`, which converts between HSV color space and RGB
+color space.", "");       
 class wxImage_RGBValue
 {
 public:
-    wxImage_RGBValue(byte r=0, byte g=0, byte b=0);    
+    DocCtorStr(
+        wxImage_RGBValue(byte r=0, byte g=0, byte b=0),
+        "Constructor.", "");
     byte red;  
     byte green;
     byte blue;
 };
-    
+
+
+DocStr(wxImage_HSVValue,
+"An object that contains values for hue, saturation and value which
+represent the value of a color.  It is used by `wx.Image.HSVtoRGB` and
+`wx.Image.RGBtoHSV`, which +converts between HSV color space and RGB
+color space.", "");
 class wxImage_HSVValue
 {
 public:
-    wxImage_HSVValue(double h=0.0, double s=0.0, double v=0.0);
+    DocCtorStr(
+        wxImage_HSVValue(double h=0.0, double s=0.0, double v=0.0),
+        "Constructor.", "");
     double hue;  
     double saturation;
     double value;
@@ -919,8 +972,14 @@ MustHaveApp(ConvertToMonoBitmap);
         "Rotates the hue of each pixel of the image. Hue is a double in the
 range -1.0..1.0 where -1.0 is -360 degrees and 1.0 is 360 degrees", "");
         
-    static wxImage_HSVValue RGBtoHSV(wxImage_RGBValue rgb);
-    static wxImage_RGBValue HSVtoRGB(wxImage_HSVValue hsv);
+    DocDeclStr(
+        static wxImage_HSVValue , RGBtoHSV(wxImage_RGBValue rgb),
+        "Converts a color in RGB color space to HSV color space.", "");
+    
+    DocDeclStr(
+        static wxImage_RGBValue , HSVtoRGB(wxImage_HSVValue hsv),
+        "Converts a color in HSV color space to RGB color space.", "");
+    
 
     %pythoncode { def __nonzero__(self): return self.Ok() }
 };
index dbb9a971433894cc7e66b05dd6df0b11f4388045..0b88af7a3da1f6f87882df7b1840086b3dde1c2a 100644 (file)
@@ -693,6 +693,9 @@ details in the second return value (see wx.LIST_HITTEST flags.)", "");
     void SetItemBackgroundColour( long item, const wxColour &col);
     wxColour GetItemBackgroundColour( long item ) const;
 
+    // Font of an item.
+    void SetItemFont( long item, const wxFont &f);
+    wxFont GetItemFont( long item ) const;
 
     %pythoncode {
     %#
index 1846e410d001fe63a6e97cd9b3757f413c65a5b7..ae97bc0d15b1aedae7c0c8b589370fca9c82de1f 100644 (file)
@@ -318,14 +318,14 @@ static wxPySizerItemInfo wxPySizerItemTypeHelper(PyObject* item, bool checkSize,
     if ( !(info.window || info.sizer || (checkSize && info.gotSize) || (checkIdx && info.gotPos)) ) {
         // no expected type, figure out what kind of error message to generate
         if ( !checkSize && !checkIdx )
-            PyErr_SetString(PyExc_TypeError, "wxWindow or wxSizer expected for item");
+            PyErr_SetString(PyExc_TypeError, "wx.Window or wx.Sizer expected for item");
         else if ( checkSize && !checkIdx )
-            PyErr_SetString(PyExc_TypeError, "wxWindow, wxSizer, wxSize, or (w,h) expected for item");
+            PyErr_SetString(PyExc_TypeError, "wx.Window, wx.Sizer, wx.Size, or (w,h) expected for item");
         else if ( !checkSize && checkIdx)
-            PyErr_SetString(PyExc_TypeError, "wxWindow, wxSizer or int (position) expected for item");
+            PyErr_SetString(PyExc_TypeError, "wx.Window, wx.Sizer or int (position) expected for item");
         else
             // can this one happen?
-            PyErr_SetString(PyExc_TypeError, "wxWindow, wxSizer, wxSize, or (w,h) or int (position) expected for item");
+            PyErr_SetString(PyExc_TypeError, "wx.Window, wx.Sizer, wx.Size, or (w,h) or int (position) expected for item");
     }
 
     return info;
index a22abfe080a3904543ac01b8842782584b0ba773..240cc738778cc35c0aa8dc5e44ebfcf5454c867b 100644 (file)
@@ -114,6 +114,14 @@ public:
                  long style = 0,
                  const wxString& name = wxPyStaticTextNameStr);
 
+    DocDeclStr(
+        void , Wrap(int width),
+        "This functions wraps the control's label so that each of its lines
+becomes at most ``width`` pixels wide if possible (the lines are
+broken at words boundaries so it might not be the case if words are
+too long). If ``width`` is negative, no wrapping is done.", "");
+    
+    
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 };
index ad60823e50f482ab4c16dce13aa5e90651e8ddf0..de89a749cf39a37a5091ccb82a504d27133f6ccb 100644 (file)
@@ -436,13 +436,13 @@ window's *best size* values.  Also set's the minsize for use with sizers.", "");
     
     DocDeclStr(
         virtual void , Raise(),
-        "Raises the window to the top of the window hierarchy if it is a
-managed window (dialog or frame).", "");
+        "Raises the window to the top of the window hierarchy.  In current
+version of wxWidgets this works both for manage and child windows.", "");
     
     DocDeclStr(
         virtual void , Lower(),
-        "Lowers the window to the bottom of the window hierarchy if it is a
-managed window (dialog or frame).", "");
+        "Lowers the window to the bottom of the window hierarchy.  In current
+version of wxWidgets this works both for manage and child windows.", "");
     
 
     
@@ -2060,7 +2060,8 @@ wxWindow* wxFindWindowByLabel( const wxString& label,
         WXHWND hWnd = (WXHWND)_hWnd;
         long id = wxGetWindowId(hWnd);
         wxWindow* win = new wxWindow;
-        parent->AddChild(win);
+        if (parent)
+            parent->AddChild(win);
         win->SetEventHandler(win);
         win->SetHWND(hWnd);
         win->SetId(id);
index 79ffbc711ae3b6db190abc07f7bf1140b4eae762..e99138573a40d07ac1c7b86703c6a7413a6a4ead 100644 (file)
@@ -91,6 +91,9 @@ public:
         }
     }
 
+    // Unload resource from the given XML file (wildcards not allowed)
+    bool Unload(const wxString& filename);
+    
     // Initialize handlers for all supported controls/windows. 
     void InitAllHandlers();
 
index a1a20b66fa7113e7549e295c15205ce3c4559cec..13f89c15e60b565c1673d0dd0d1287f1282f0d13 100644 (file)
@@ -701,21 +701,6 @@ PyObject* __wxPySetDictionary(PyObject* /* self */, PyObject* args)
 }
 
 
-//---------------------------------------------------------------------------
-
-// Python's PyInstance_Check does not return True for instances of new-style
-// classes.  This should get close enough for both new and old classes but I
-// should re-evaluate the need for doing instance checks...
-bool wxPyInstance_Check(PyObject* obj) {
-    return PyObject_HasAttrString(obj, "__class__") != 0;
-}
-
-
-// This one checks if the object is an instance of a SWIG proxy class (it has
-// a .this attribute)
-bool wxPySwigInstance_Check(PyObject* obj) {
-    return PyObject_HasAttrString(obj, "this") != 0;
-}
 
 //---------------------------------------------------------------------------
 
@@ -2725,6 +2710,145 @@ PyObject* wxArrayInt2PyList_helper(const wxArrayInt& arr) {
 }
 
 
+//----------------------------------------------------------------------
+// wxPyImageHandler methods
+//
+// TODO: Switch these to use wxPython's standard macros and helper classes
+//       for calling callbacks.
+
+PyObject* wxPyImageHandler::m_DoCanRead_Name = NULL;
+PyObject* wxPyImageHandler::m_GetImageCount_Name = NULL;
+PyObject* wxPyImageHandler::m_LoadFile_Name = NULL;
+PyObject* wxPyImageHandler::m_SaveFile_Name = NULL;
+
+PyObject* wxPyImageHandler::py_InputStream(wxInputStream* stream) {
+    return wxPyConstructObject(new wxPyInputStream(stream),
+                               wxT("wxPyInputStream"), 0);
+}
+
+PyObject* wxPyImageHandler::py_Image(wxImage* image) {
+    return wxPyConstructObject(image, wxT("wxImage"), 0);
+}
+
+PyObject* wxPyImageHandler::py_OutputStream(wxOutputStream* stream) {
+    return wxPyConstructObject(stream, wxT("wxOutputStream"), 0);
+}
+
+wxPyImageHandler::wxPyImageHandler():
+    m_self(NULL)
+{
+    if (!m_DoCanRead_Name) {
+        m_DoCanRead_Name = PyString_FromString("DoCanRead");
+        m_GetImageCount_Name = PyString_FromString("GetImageCount");
+        m_LoadFile_Name = PyString_FromString("LoadFile");
+        m_SaveFile_Name = PyString_FromString("SaveFile");
+    }
+}
+
+wxPyImageHandler::~wxPyImageHandler() {
+    if (m_self) {
+        Py_DECREF(m_self);
+        m_self = NULL;
+    }
+}
+
+void wxPyImageHandler::_SetSelf(PyObject *self) {
+    // should check here for isinstance(PyImageHandler) ??
+    m_self = self;
+    Py_INCREF(m_self);
+}
+
+bool wxPyImageHandler::DoCanRead(wxInputStream& stream) {
+    // check if our object has this method
+    wxPyBlock_t blocked = wxPyBeginBlockThreads();
+    if (!m_self || !PyObject_HasAttr(m_self, m_DoCanRead_Name)) {
+        wxPyEndBlockThreads(blocked);
+        return false;
+    }
+
+    PyObject* res = PyObject_CallMethodObjArgs(m_self, m_DoCanRead_Name,
+                                               py_InputStream(&stream), NULL);
+    bool retval = false;
+    if (res) {
+        retval = PyInt_AsLong(res);
+        Py_DECREF(res);
+        PyErr_Clear();
+    }
+    else
+        PyErr_Print();
+    wxPyEndBlockThreads(blocked);
+    return retval;
+}
+
+bool wxPyImageHandler::LoadFile( wxImage* image, wxInputStream& stream,
+                                 bool verbose, int index ) {
+    // check if our object has this method
+    wxPyBlock_t blocked = wxPyBeginBlockThreads();
+    if (!m_self || !PyObject_HasAttr(m_self, m_LoadFile_Name)) {
+        wxPyEndBlockThreads(blocked);
+        return false;
+    }
+    PyObject* res = PyObject_CallMethodObjArgs(m_self, m_LoadFile_Name,
+                                               py_Image(image),
+                                               py_InputStream(&stream),
+                                               PyInt_FromLong(verbose),
+                                               PyInt_FromLong(index),
+                                               NULL);
+    bool retval = false;
+    if (res) {
+        retval = PyInt_AsLong(res);
+        Py_DECREF(res);
+        PyErr_Clear();
+    } else
+        PyErr_Print();
+    wxPyEndBlockThreads(blocked);
+    return retval;
+}
+
+bool wxPyImageHandler::SaveFile( wxImage* image, wxOutputStream& stream,
+                                 bool verbose ) {
+    wxPyBlock_t blocked = wxPyBeginBlockThreads();
+    if (!m_self || !PyObject_HasAttr(m_self, m_SaveFile_Name)) {
+        wxPyEndBlockThreads(blocked);
+        return false;
+    }
+    PyObject* res = PyObject_CallMethodObjArgs(m_self, m_SaveFile_Name,
+                                               py_Image(image),
+                                               py_OutputStream(&stream),
+                                               PyInt_FromLong(verbose),
+                                               NULL);
+    bool retval = false;
+    if(res) {
+        retval=PyInt_AsLong(res);
+        Py_DECREF(res);
+        PyErr_Clear();
+    } else
+        PyErr_Print();
+    wxPyEndBlockThreads(blocked);
+    return retval;
+}
+
+int wxPyImageHandler::GetImageCount( wxInputStream& stream ) {
+    wxPyBlock_t blocked = wxPyBeginBlockThreads();
+    if (!m_self || !PyObject_HasAttr(m_self, m_GetImageCount_Name)) {
+        wxPyEndBlockThreads(blocked);
+        return 1;
+    }
+    PyObject *res=PyObject_CallMethodObjArgs(m_self, m_GetImageCount_Name,
+                                             py_InputStream(&stream),
+                                             NULL);
+    int retval = 1;
+    if(res) {
+        retval=PyInt_AsLong(res);
+        Py_DECREF(res);
+        PyErr_Clear();
+    } else
+        PyErr_Print();
+    wxPyEndBlockThreads(blocked);
+    return retval;
+}
+
+
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
index d2db77b6671297354980db74c5242d4d280cc967..d811acb598203aaff7316c7a0b8271dac4c97892 100644 (file)
@@ -55,7 +55,15 @@ enum wxMediaState
     wxMEDIASTATE_PLAYING=0
 };
 
+enum wxMediaCtrlPlayerControls
+{
+    wxMEDIACTRLPLAYERCONTROLS_NONE,
+    wxMEDIACTRLPLAYERCONTROLS_STEP,
+    wxMEDIACTRLPLAYERCONTROLS_VOLUME,
+    wxMEDIACTRLPLAYERCONTROLS_DEFAULT
+};
 
+    
 class wxMediaEvent : public wxNotifyEvent
 {
 public:
@@ -89,9 +97,6 @@ public:
     bool Pause() { return false; }
     bool Stop() { return false; }
 
-    bool Load(const wxString& fileName) { return false; }
-    bool Load(const wxURI& location) { return false; }
-
     wxMediaState GetState() { return wxMEDIASTATE_STOPPED; }
 
     double GetPlaybackRate()  { return 0.0; }
@@ -105,6 +110,14 @@ public:
 
     double GetVolume() { return 0.0; }
     bool   SetVolume(double dVolume) { return false; }
+
+    bool    ShowPlayerControls(
+        wxMediaCtrlPlayerControls flags = wxMEDIACTRLPLAYERCONTROLS_DEFAULT)
+        { return false; }
+
+    bool Load(const wxString& fileName) { return false; }
+    bool LoadURI(const wxString& fileName) { return false; }
+    bool LoadURIWithProxy(const wxString& fileName, const wxString& proxy) { return false; }
 };
 
 const wxEventType wxEVT_MEDIA_FINISHED = 0;
@@ -180,16 +193,6 @@ public:
     bool Pause();
     bool Stop();
 
-    double GetVolume();                 //DirectShow only
-    bool   SetVolume(double dVolume);   //DirectShow only
-
-    bool Load(const wxString& fileName);
-    %extend {
-        bool LoadFromURI(const wxString& location) {
-            return self->Load(wxURI(location));
-        }
-    }
-
     wxMediaState GetState();
 
     double GetPlaybackRate();
@@ -198,6 +201,17 @@ public:
     wxFileOffset Seek(wxFileOffset where, wxSeekMode mode = wxFromStart);    
     wxFileOffset Tell();
     wxFileOffset Length();
+
+    double GetVolume();
+    bool   SetVolume(double dVolume);
+
+    bool    ShowPlayerControls(
+        wxMediaCtrlPlayerControls flags = wxMEDIACTRLPLAYERCONTROLS_DEFAULT);
+
+    bool Load(const wxString& fileName);
+    bool LoadURI(const wxString& fileName);
+    bool LoadURIWithProxy(const wxString& fileName, const wxString& proxy);
+    %pythoncode { LoadFromURI = LoadURI }
 };
 
 
index 4c8c3b4a4890f3f8b370e2847d45c256ce7f59ac..78071e666b6517489d400cac9a2094be52e861ee 100644 (file)
@@ -854,6 +854,7 @@ class Calendar( wx.PyControl ):
 
     def SetDayValue(self, day):
         self.set_day = day
+        self.day = day
 
     def SetMonth(self, month):
         if month >= 1 and month <= 12:
index 075a3732257542aa6fbc3314d6c240d57e0dde92..2c47b8d0cbf50db0f776a34639ae0e4a51e264de 100644 (file)
@@ -28,10 +28,12 @@ DOC_MDI = 2
 DOC_NEW = 4
 DOC_SILENT = 8
 DOC_OPEN_ONCE = 16
+DOC_NO_VIEW = 32
 DEFAULT_DOCMAN_FLAGS = DOC_SDI & DOC_OPEN_ONCE
 
 TEMPLATE_VISIBLE = 1
 TEMPLATE_INVISIBLE = 2
+TEMPLATE_NO_CREATE = (4 | TEMPLATE_VISIBLE)
 DEFAULT_TEMPLATE_FLAGS = TEMPLATE_VISIBLE
 
 MAX_FILE_HISTORY = 9
@@ -680,8 +682,10 @@ class Document(wx.EvtHandler):
         """
         The default implementation calls DeleteContents (an empty
         implementation) sets the modified flag to false. Override this to
-        supply additional behaviour when the document is closed with Close.
+        supply additional behaviour when the document is opened with Open.
         """
+        if flags & DOC_NO_VIEW:
+            return True
         return self.GetDocumentTemplate().CreateView(self, flags)
 
 
@@ -1193,6 +1197,16 @@ class DocTemplate(wx.Object):
         return (self._flags & TEMPLATE_VISIBLE) == TEMPLATE_VISIBLE
 
 
+    def IsNewable(self):
+        """
+        Returns true if the document template can be shown in "New" dialogs,
+        false otherwise.
+        
+        This method has been added to wxPython and is not in wxWindows.
+        """
+        return (self._flags & TEMPLATE_NO_CREATE) != TEMPLATE_NO_CREATE
+        
+
     def GetDocumentName(self):
         """
         Returns the document type name, as passed to the document template
@@ -1250,8 +1264,9 @@ class DocTemplate(wx.Object):
         """
         ext = FindExtension(path)
         if not ext: return False
-        return ext in self.GetFileFilter()
-        # return self.GetDefaultExtension() == FindExtension(path)
+        
+        extList = self.GetFileFilter().replace('*','').split(';')
+        return ext in extList
 
 
 class DocManager(wx.EvtHandler):
@@ -1802,7 +1817,13 @@ class DocManager(wx.EvtHandler):
         will delete the oldest currently loaded document before creating a new
         one.
 
-        wxPython version supports the document manager's wx.lib.docview.DOC_OPEN_ONCE flag.
+        wxPython version supports the document manager's wx.lib.docview.DOC_OPEN_ONCE
+        and wx.lib.docview.DOC_NO_VIEW flag.
+        
+        if wx.lib.docview.DOC_OPEN_ONCE is present, trying to open the same file multiple 
+        times will just return the same document.
+        if wx.lib.docview.DOC_NO_VIEW is present, opening a file will generate the document,
+        but not generate a corresponding view.
         """
         templates = []
         for temp in self._templates:
@@ -1817,16 +1838,13 @@ class DocManager(wx.EvtHandler):
                return None
 
         if flags & DOC_NEW:
+            for temp in templates[:]:
+                if not temp.IsNewable():
+                    templates.remove(temp)
             if len(templates) == 1:
                 temp = templates[0]
-                newDoc = temp.CreateDocument(path, flags)
-                if newDoc:
-                    newDoc.SetDocumentName(temp.GetDocumentName())
-                    newDoc.SetDocumentTemplate(temp)
-                    newDoc.OnNewDocument()
-                return newDoc
-
-            temp = self.SelectDocumentType(templates)
+            else:
+                temp = self.SelectDocumentType(templates)
             if temp:
                 newDoc = temp.CreateDocument(path, flags)
                 if newDoc:
@@ -1865,7 +1883,12 @@ class DocManager(wx.EvtHandler):
                             document.SetDocumentModificationDate()
 
                     firstView = document.GetFirstView()
-                    if firstView and firstView.GetFrame():
+                    if not firstView and not (flags & DOC_NO_VIEW):
+                        document.GetDocumentTemplate().CreateView(document, flags)
+                        document.UpdateAllViews()
+                        firstView = document.GetFirstView()
+                        
+                    if firstView and firstView.GetFrame() and not (flags & DOC_NO_VIEW):
                         firstView.GetFrame().SetFocus()  # Not in wxWindows code but useful nonetheless
                         if hasattr(firstView.GetFrame(), "IsIconized") and firstView.GetFrame().IsIconized():  # Not in wxWindows code but useful nonetheless
                             firstView.GetFrame().Iconize(False)
@@ -1878,7 +1901,9 @@ class DocManager(wx.EvtHandler):
                 newDoc.SetDocumentTemplate(temp)
                 if not newDoc.OnOpenDocument(path):
                     newDoc.DeleteAllViews()  # Implicitly deleted by DeleteAllViews
-                    newDoc.GetFirstView().GetFrame().Destroy() # DeleteAllViews doesn't get rid of the frame, so we'll explicitly destroy it.
+                    frame = newDoc.GetFirstView().GetFrame()
+                    if frame:
+                        Destroy() # DeleteAllViews doesn't get rid of the frame, so we'll explicitly destroy it.
                     return None
                 self.AddFileToHistory(path)
             return newDoc
@@ -2117,41 +2142,32 @@ class DocManager(wx.EvtHandler):
         This function is used in wxDocManager.CreateDocument.
         """
         if wx.Platform == "__WXMSW__" or wx.Platform == "__WXGTK__" or wx.Platform == "__WXMAC__":
-            allfilter = ''
             descr = ''
             for temp in templates:
                 if temp.IsVisible():
                     if len(descr) > 0:
                         descr = descr + _('|')
-                        allfilter = allfilter + _(';')
                     descr = descr + temp.GetDescription() + _(" (") + temp.GetFileFilter() + _(") |") + temp.GetFileFilter()  # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
-                    allfilter = allfilter + temp.GetFileFilter()
-            descr = _("All (%s)|%s|%s|Any (*.*) | *.*") %  (allfilter, allfilter, descr)  # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
+            descr = _("All (*.*)|*.*|%s") % descr  # spacing is important, make sure there is no space after the "|", it causes a bug on wx_gtk
         else:
             descr = _("*.*")
 
-        path = wx.FileSelector(_("Select a File"),
-                               self._lastDirectory,
-                               _(""),
-                               wildcard = descr,
-                               flags = wx.HIDE_READONLY,
-                               parent = self.FindSuitableParent())
-        if path:
-            if not FileExists(path):
-                msgTitle = wx.GetApp().GetAppName()
-                if not msgTitle:
-                    msgTitle = _("File Error")
-                    wx.MessageBox("Could not open '%s'." % FileNameFromPath(path),
-                          msgTitle,
-                          wx.OK | wx.ICON_EXCLAMATION,
-                          parent)
-                    return (None, None)
-            self._lastDirectory = PathOnly(path)
-
+        dlg = wx.FileDialog(self.FindSuitableParent(),
+                               _("Select a File"),
+                               wildcard=descr,
+                               style=wx.OPEN|wx.FILE_MUST_EXIST|wx.CHANGE_DIR)
+        # dlg.CenterOnParent()  # wxBug: caused crash with wx.FileDialog
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetPath()
+        else:
+            path = None
+        dlg.Destroy()
+            
+        if path:  
             theTemplate = self.FindTemplateForPath(path)
             return (theTemplate, path)
-
-        return (None, None)
+        
+        return (None, None)           
 
 
     def OnOpenFileFailure(self):
@@ -3151,8 +3167,10 @@ class CommandProcessor(wx.Object):
         the history list.
         """
         done = command.Do()
-        if done and storeIt:
-            self._commands.append(command)
+        if done:
+            del self._redoCommands[:]
+            if storeIt:
+                self._commands.append(command)
         if self._maxCommands > -1:
             if len(self._commands) > self._maxCommands:
                 del self._commands[0]
index ca3338f462ee0b82c4c6339decdefd2da5934d35..0620161d112d03ea2c4d20da5c5b0fb1bb24c14e 100644 (file)
@@ -242,8 +242,8 @@ class FileBrowseButtonWithHistory( FileBrowseButton ):
         textControl.SetToolTipString( self.toolTip )
         textControl.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
         if self.changeCallback:
-            textControl.Bind(wx.EVT_TEXT, self.changeCallback)
-            textControl.Bind(wx.EVT_COMBOBOX, self.changeCallback)
+            textControl.Bind(wx.EVT_TEXT, self.OnChanged)
+            textControl.Bind(wx.EVT_COMBOBOX, self.OnChanged)
         if self.history:
             history=self.history
             self.history=None
index 4cc6c907e23cc5c6eb6b962f0ea53f93c55d63b2..66a5ab2a159e559ebf362e272accf8450456b2c7 100644 (file)
@@ -3,7 +3,7 @@
 # Ported From Jorgen Bodde & Julian Smart (Extended Demo) C++ Code By:
 #
 # Andrea Gavana, @ 23 Mar 2005
-# Latest Revision: 28 Mar 2005, 22.30 CET
+# Latest Revision: 05 Nov 2005, 23.30 CET
 #
 #
 # TODO List
 # TODO: A Smart Way To Check Wether The Old - New Width Of The
 # Panel Changed, If So No Need To Resize The Fold Panel Items
 #
-# 5. Implementing Styles Like FPB_SINGLE_FOLD and FPB_EXCLUSIVE_FOLD
-# TODO: Jorgen Has Left Undone These Jobs. I Don't Really Get What They
-# Should Supposed To Do, So If Someone Could Enlight Me, Please Let Me Know.
+#
+# DONE List:
+#
+# 1. Implemented Styles Like FPB_SINGLE_FOLD and FPB_EXCLUSIVE_FOLD
+# Thanks To E. A. Tacao For His Nice Suggestions.
+#
+# 2. Added Some Maquillage To FoldPanelBar: When The Mouse Enters The Icon
+# Region, It Is Changed To wx.CURSOR_HAND.
 #
 #
 # For The Original TODO List From Jorgen, Please Refer To:
@@ -106,7 +111,7 @@ FoldPanelBar is supported on the following platforms:
   * Mac OSX (Thanks To Robin Dunn For The CaptionBar Size Patch)
 
 
-Latest Revision: Andrea Gavana @ 30 Mar 2005, 22.30 CET
+Latest Revision: Andrea Gavana @ 05 Nov 2005, 23.30 CET
 
 """
 
@@ -179,7 +184,7 @@ FPB_EXTRA_Y = 4
 # pixels of the bmp to be aligned from the right filled with space
 FPB_BMP_RIGHTSPACE = 2
 
-# Not yet supported but added for future reference. Single fold forces
+# Now supported! Single fold forces
 # other panels to close when they are open, and only opens the current panel.
 # This will allow the open panel to gain the full size left in the client area
 FPB_SINGLE_FOLD = 0x0001
@@ -188,9 +193,9 @@ FPB_SINGLE_FOLD = 0x0001
 # show up at the top
 FPB_COLLAPSE_TO_BOTTOM = 0x0002
 
-# Not yet supported, but added for future reference. Single fold plus panels
+# Now supported! Single fold plus panels
 # will be stacked at the bottom
-FPB_EXCLUSIVE_FOLD = FPB_SINGLE_FOLD | FPB_COLLAPSE_TO_BOTTOM
+FPB_EXCLUSIVE_FOLD = 0x0004
 
 # Orientation Flag 
 FPB_HORIZONTAL = wx.HORIZONTAL
@@ -669,12 +674,13 @@ class CaptionBar(wx.Window):
         dc = wx.PaintDC(self)
         wndRect = self.GetRect()
         vertical = self.IsVertical()
-
+        
         # TODO: Maybe first a memory DC should draw all, and then paint it on
         # the caption. This way a flickering arrow during resize is not visible
         
         self.FillCaptionBackground(dc)
         dc.SetFont(self._style.GetCaptionFont())
+        dc.SetTextForeground(self._style.GetCaptionColour())
 
         if vertical:
             dc.DrawText(self._caption, 4, FPB_EXTRA_Y/2)
@@ -734,27 +740,52 @@ class CaptionBar(wx.Window):
         """
         Catches the mouse click-double click.
         
-        If clicked on the arrow (single) or double on the caption we
-        change state and an event must be fired to let this panel
-        collapse or expand.
+        If clicked on the arrow (single) or double on the caption we change state
+        and an event must be fired to let this panel collapse or expand.
         """
-        
-        send_event = False
 
+        send_event = False
+        vertical = self.IsVertical()
+        
         if event.LeftDown() and self._foldIcons:
 
             pt = event.GetPosition()
             rect = self.GetRect()
-            vertical = self.IsVertical()
-
+            
             drw = (rect.GetWidth() - self._iconWidth - self._rightIndent)
             if vertical and pt.x > drw or not vertical and \
                pt.y < (self._iconHeight + self._rightIndent):
                 send_event = True
 
         elif event.LeftDClick():
+            self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
             send_event = True
 
+        elif event.Entering() and self._foldIcons:
+            pt = event.GetPosition()
+            rect = self.GetRect()
+
+            drw = (rect.GetWidth() - self._iconWidth - self._rightIndent)
+            if vertical and pt.x > drw or not vertical and \
+               pt.y < (self._iconHeight + self._rightIndent):
+                self.SetCursor(wx.StockCursor(wx.CURSOR_HAND))
+            else:
+                self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
+
+        elif event.Leaving():
+            self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
+
+        elif event.Moving():
+            pt = event.GetPosition()
+            rect = self.GetRect()
+
+            drw = (rect.GetWidth() - self._iconWidth - self._rightIndent)           
+            if vertical and pt.x > drw or not vertical and \
+               pt.y < (self._iconHeight + self._rightIndent):
+                self.SetCursor(wx.StockCursor(wx.CURSOR_HAND))
+            else:
+                self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
+                
         # send the collapse, expand event to the parent
         
         if send_event:
@@ -1172,7 +1203,7 @@ class FoldPanelBar(wx.Panel):
 
         self._foldPanel.SetSize(foldrect[2:])
         
-        if self._extraStyle & FPB_COLLAPSE_TO_BOTTOM:
+        if self._extraStyle & FPB_COLLAPSE_TO_BOTTOM or self._extraStyle & FPB_EXCLUSIVE_FOLD:
             rect = self.RepositionCollapsedToBottom()
             vertical = self.IsVertical()
             if vertical and rect.GetHeight() > 0 or not vertical and rect.GetWidth() > 0:
@@ -1212,7 +1243,7 @@ class FoldPanelBar(wx.Panel):
         # should be drawn at the bottom. All panels that are expanded
         # are drawn on top. The last expanded panel gets all the extra space
 
-        if self._extraStyle & FPB_COLLAPSE_TO_BOTTOM:
+        if self._extraStyle & FPB_COLLAPSE_TO_BOTTOM or self._extraStyle & FPB_EXCLUSIVE_FOLD:
         
             offset = 0
 
@@ -1353,9 +1384,22 @@ class FoldPanelBar(wx.Panel):
         the bottom and the order where the panel originally was placed
         is restored.
         """
+
+        fpbextrastyle = 0
         
+        if self._extraStyle & FPB_SINGLE_FOLD or self._extraStyle & FPB_EXCLUSIVE_FOLD:
+            fpbextrastyle = 1
+            for panel in self._panels:
+                panel.Collapse()
+
         foldpanel.Expand()
-        self.RefreshPanelsFrom(foldpanel)
+        
+        if fpbextrastyle:
+            if self._extraStyle & FPB_EXCLUSIVE_FOLD:
+                self.RepositionCollapsedToBottom()
+            self.RefreshPanelsFrom(self._panels[0])
+        else:
+            self.RefreshPanelsFrom(foldpanel)
 
 
     def ApplyCaptionStyle(self, foldpanel, cbstyle):
index adc746316d28dd4ae99a10b7c93eee0177fadc5e..1795e46c6f049874f95777dc92c04a0215027788 100644 (file)
@@ -3,7 +3,7 @@
 # Ported From Angelo Mandato C++ Code By:
 #
 # Andrea Gavana, @ 27 Mar 2005
-# Latest Revision: 27 Apr 2005, 22.30 CET
+# Latest Revision: 05 Nov 2005, 22.30 CET
 #
 #
 # Original Web Site (For The C++ Code):
@@ -11,6 +11,8 @@
 # http://www.spaceblue.com/codedetail.php?CodeID=7
 #
 #
+# Thanks to E. A. Tacao for his nice suggestions and improvements of the code.
+#
 # For all kind of problems, requests of enhancements and bug reports, please
 # write to me at:
 #
@@ -33,7 +35,7 @@ browser window.
 Special thanks to Robin Dunn for the event binder for the 3 mouse buttons.
 
 
-Latest Revision: Andrea Gavana @ 11 May 2005, 21.00 CET
+Latest Revision: Andrea Gavana @ 05 Nov 2005, 22.30 CET
 
 """
 
@@ -212,15 +214,24 @@ class HyperLinkCtrl(StaticText):
             self.SetCursor(self._CursorHand)
 
             if self._EnableRollover:
-                self.SetForegroundColour(self._LinkRolloverColor)
                 fontTemp = self.GetFont()
                 fontTemp.SetUnderlined(self._RolloverUnderline)
                 if self._Bold:
                     fontTemp.SetWeight(wx.BOLD)
+                    
+                needRefresh = False
+
+                if self.GetFont() != fontTemp:
+                    self.SetFont(fontTemp)
+                    needRefresh = True
 
-                self.SetFont(fontTemp)
-                self.Refresh()
+                if self.GetForegroundColour() != self._LinkRolloverColor:
+                    self.SetForegroundColour(self._LinkRolloverColor)
+                    needRefresh = True
 
+                if needRefresh:
+                    self.Refresh()
+            
         else:            
             # Restore The Original Cursor            
             self.SetCursor(wx.NullCursor)
@@ -301,12 +312,12 @@ class HyperLinkCtrl(StaticText):
             self.SetForegroundColour(self._LinkColour)
             fontTemp.SetUnderlined(self._LinkUnderline)
 
-
         if self._Bold:
             fontTemp.SetWeight(wx.BOLD)
 
-        self.SetFont(fontTemp)
-        self.Refresh(OnRefresh)
+        if self.GetFont() != fontTemp:
+            self.SetFont(fontTemp)
+            self.Refresh(OnRefresh)            
 
 
     def DisplayError(self, ErrorMessage, ReportErrors=True):
index be2753eb8b8a19b0f8bcb50d6cdab4d1b0195b52..d2be65e91ddfdc4c4dcb3c7e6da9e283a9fa1c9b 100644 (file)
@@ -696,6 +696,8 @@ Event Handling
                             self._SetKeycodeHandler(WXK_UP, self.IncrementValue)
                             self._SetKeyHandler('-', self._OnChangeSign)
 
+        (Setting a func of None removes any keyhandler for the given key.)
+        
         "Navigation" keys are assumed to change the cursor position, and
         therefore don't cause automatic motion of the cursor as insertable
         characters do.
@@ -2106,7 +2108,10 @@ class MaskedEditMixin:
         used by the control.  <func> should take the event as argument
         and return False if no further action on the key is necessary.
         """
-        self._keyhandlers[keycode] = func
+        if func:
+            self._keyhandlers[keycode] = func
+        elif self._keyhandlers.has_key(keycode):
+            del self._keyhandlers[keycode]
 
 
     def _SetKeyHandler(self, char, func):
@@ -2126,6 +2131,9 @@ class MaskedEditMixin:
         self._nav.append(keycode)
         if handler:
             self._keyhandlers[keycode] = handler
+        elif self.keyhandlers.has_key(keycode):
+            del self._keyhandlers[keycode]
+
 
 
     def _AddNavKey(self, char, handler=None):
@@ -2154,6 +2162,8 @@ class MaskedEditMixin:
             self._nav.append(keycode)
             if func:
                 self._keyhandlers[keycode] = func
+            elif self.keyhandlers.has_key(keycode):
+                del self._keyhandlers[keycode]
 
 
     def _processMask(self, mask):
@@ -2611,6 +2621,12 @@ class MaskedEditMixin:
                 keycode = ord(key)
                 if not self._keyhandlers.has_key(keycode):
                     self._SetKeyHandler(key, self._OnChangeSign)
+        elif self._isInt or self._isFloat:
+            signkeys = ['-', '+', ' ', '(', ')']
+            for key in signkeys:
+                keycode = ord(key)
+                if self._keyhandlers.has_key(keycode) and self._keyhandlers[keycode] == self._OnChangeSign:
+                    self._SetKeyHandler(key, None)
 
 
 
@@ -2674,14 +2690,15 @@ class MaskedEditMixin:
                 self._SetKeycodeHandler(wx.WXK_UP, self._OnUpNumeric)  # (adds "shift" to up arrow, and calls _OnChangeField)
 
             # On ., truncate contents right of cursor to decimal point (if any)
-            # leaves cusor after decimal point if floating point, otherwise at 0.
-            if not self._keyhandlers.has_key(ord(self._decimalChar)):
+            # leaves cursor after decimal point if floating point, otherwise at 0.
+            if not self._keyhandlers.has_key(ord(self._decimalChar)) or self._keyhandlers[ord(self._decimalChar)] != self._OnDecimalPoint:
                 self._SetKeyHandler(self._decimalChar, self._OnDecimalPoint)
-            if not self._keyhandlers.has_key(ord(self._shiftDecimalChar)):
+    
+            if not self._keyhandlers.has_key(ord(self._shiftDecimalChar)) or self._keyhandlers[ord(self._shiftDecimalChar)] != self._OnChangeField:
                 self._SetKeyHandler(self._shiftDecimalChar, self._OnChangeField)   # (Shift-'.' == '>' on US keyboards)
 
             # Allow selective insert of groupchar in numbers:
-            if not self._keyhandlers.has_key(ord(self._fields[0]._groupChar)):
+            if not self._keyhandlers.has_key(ord(self._fields[0]._groupChar)) or self._keyhandlers[ord(self._fields[0]._groupChar)] != self._OnGroupChar:
                 self._SetKeyHandler(self._fields[0]._groupChar, self._OnGroupChar)
 
 ##        dbg(indent=0, suspend=0)
@@ -3784,13 +3801,17 @@ class MaskedEditMixin:
         value = self._eraseSelection()
         integer = self._fields[0]
         start, end = integer._extent
+        sel_start, sel_to = self._GetSelection()
 
 ####        dbg('adjusted pos:', pos)
         if chr(key) in ('-','+','(', ')') or (chr(key) == " " and pos == self._signpos):
             cursign = self._isNeg
 ##            dbg('cursign:', cursign)
             if chr(key) in ('-','(', ')'):
-                self._isNeg = (not self._isNeg)   ## flip value
+                if sel_start <= self._signpos:
+                    self._isNeg = True
+                else:
+                    self._isNeg = (not self._isNeg)   ## flip value
             else:
                 self._isNeg = False
 ##            dbg('isNeg?', self._isNeg)
@@ -4098,7 +4119,7 @@ class MaskedEditMixin:
         # first space for sign, and last one if using parens.
         if( self._signOk
             and ((pos == self._signpos and key in (ord('-'), ord('+'), ord(' ')) )
-                 or self._useParens and pos == self._masklength -1)):
+                 or (self._useParens and pos == self._masklength -1))):
 ##            dbg('adjusted pos:', pos, indent=0)
             return pos
 
@@ -4106,6 +4127,7 @@ class MaskedEditMixin:
             field = self._FindField(pos)
 
 ##            dbg('field._insertRight?', field._insertRight)
+##            if self._signOk: dbg('self._signpos:', self._signpos)
             if field._insertRight:              # if allow right-insert
                 start, end = field._extent
                 slice = self._GetValue()[start:end].strip()
@@ -4140,12 +4162,14 @@ class MaskedEditMixin:
 ##                        # restore selection
 ##                        self._SetSelection(sel_start, pos)
 
-                    elif self._signOk and sel_start == 0:   # if selected to beginning and signed,
+                    # if selected to beginning and signed, and not changing sign explicitly:
+                    elif self._signOk and sel_start == 0 and key not in (ord('-'), ord('+'), ord(' ')):
                         # adjust to past reserved sign position:
                         pos = self._fields[0]._extent[0]
+##                        dbg('adjusting field to ', pos)
                         self._SetInsertionPoint(pos)
-                        # restore selection
-                        self._SetSelection(pos, sel_to)
+                        # but keep original selection, to allow replacement of any sign: 
+                        self._SetSelection(0, sel_to)
                     else:
                         pass    # leave position/selection alone
 
@@ -4526,11 +4550,11 @@ class MaskedEditMixin:
         if self._signOk:
             text, signpos, right_signpos = self._getSignedValue()
 ##            dbg('text: "%s", signpos:' % text, signpos)
+            if text and signpos != self._signpos:
+                self._signpos = signpos
             if not text or text[signpos] not in ('-','('):
                 self._isNeg = False
 ##                dbg('no valid sign found; new sign:', self._isNeg)
-                if text and signpos != self._signpos:
-                    self._signpos = signpos
             elif text and self._valid and not self._isNeg and text[signpos] in ('-', '('):
 ##                dbg('setting _isNeg to True')
                 self._isNeg = True
@@ -5352,6 +5376,8 @@ class MaskedEditMixin:
             field = self._FindField(self._GetInsertionPoint())
             edit_start, edit_end = field._extent
             if field._selectOnFieldEntry:
+                if self._isFloat or self._isInt and field == self._fields[0]:
+                    edit_start = 0
                 self._SetInsertionPoint(edit_start)
                 self._SetSelection(edit_start, edit_end)
 
@@ -5368,8 +5394,8 @@ class MaskedEditMixin:
 
                 if integer._selectOnFieldEntry:
 ##                    dbg('select on field entry:')
-                    self._SetInsertionPoint(edit_start)
-                    self._SetSelection(edit_start, edit_end)
+                    self._SetInsertionPoint(0)
+                    self._SetSelection(0, edit_end)
 
                 elif integer._insertRight:
 ##                    dbg('moving insertion point to end')
@@ -6546,6 +6572,22 @@ __i=0
 
 ## CHANGELOG:
 ## ====================
+##  Version 1.9
+##  1. Now ignores kill focus events when being destroyed.
+##  2. Added missing call to set insertion point on changing fields.
+##  3. Modified SetKeyHandler() to accept None as means of removing one.
+##  4. Fixed keyhandler processing for group and decimal character changes.
+##  5. Fixed a problem that prevented input into the integer digit of a 
+##     integerwidth=1 numctrl, if the current value was 0.
+##  6. Fixed logic involving processing of "_signOk" flag, to remove default
+##     sign key handlers if false, so that SetAllowNegative(False) in the
+##     NumCtrl works properly.
+##  7. Fixed selection logic for numeric controls so that if selectOnFieldEntry
+##     is true, and the integer portion of an integer format control is selected
+##     and the sign position is selected, the sign keys will always result in a
+##     negative value, rather than toggling the previous sign.
+##
+##
 ##  Version 1.8
 ##  1. Fixed bug involving incorrect variable name, causing combobox autocomplete to fail.
 ##  2. Added proper support for unicode version of wxPython
index e48eacd7b7a5b07984fbe9103edd215e7750ec63..1256ee078095baba0a2016dbb6e80d46ab4ebbdd 100644 (file)
@@ -762,12 +762,6 @@ class NumCtrl(BaseMaskedTextCtrl, NumCtrlAccessorsMixin):
         if maskededit_kwargs.keys():
             self.SetCtrlParameters(**maskededit_kwargs)
 
-        # Record end of integer and place cursor there:
-        integerEnd = self._fields[0]._extent[1]
-        self.SetInsertionPoint(0)
-        self.SetInsertionPoint(integerEnd)
-        self.SetSelection(integerEnd, integerEnd)
-
         # Go ensure all the format codes necessary are present:
         orig_intformat = intformat = self.GetFieldParameter(0, 'formatcodes')
         if 'r' not in intformat:
@@ -780,6 +774,17 @@ class NumCtrl(BaseMaskedTextCtrl, NumCtrlAccessorsMixin):
             else:
                 self.SetCtrlParameters(formatcodes=intformat)
 
+        # Record end of integer and place cursor there unless selecting, or select entire field:
+        integerStart, integerEnd = self._fields[0]._extent
+        if not self._fields[0]._selectOnFieldEntry:
+            self.SetInsertionPoint(0)
+            self.SetInsertionPoint(integerEnd)
+            self.SetSelection(integerEnd, integerEnd)
+        else:
+            self.SetInsertionPoint(0)   # include any sign
+            self.SetSelection(0, integerEnd)
+
+
         # Set min and max as appropriate:
         if kwargs.has_key('min'):
             min = kwargs['min']
index f24b65058f62e9a92415bdf7a01c0b9ad3e3eb99..586d24eee5d27c7bec6dfd622a3d7f6ea3ddd954 100644 (file)
@@ -1,5 +1,5 @@
 #----------------------------------------------------------------------------
-# Name:        wxPython.lib.mixins.grid
+# Name:        wx.lib.mixins.grid
 # Purpose:     Helpful mix-in classes for wx.Grid
 #
 # Author:      Robin Dunn
@@ -34,20 +34,15 @@ class GridAutoEditMixin:
     """
 
     def __init__(self):
-        self.__enableEdit = 0
-        self.Bind(wx.EVT_IDLE, self.__OnIdle)
         self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.__OnSelectCell)
 
 
-    def __OnIdle(self, evt):
-        if self.__enableEdit:
-            if self.CanEnableCellControl():
-                self.EnableCellEditControl()
-            self.__enableEdit = 0
-        evt.Skip()
+    def __DoEnableEdit(self):
+        if self.CanEnableCellControl():
+            self.EnableCellEditControl()
 
 
     def __OnSelectCell(self, evt):
-        self.__enableEdit = 1
+        wx.CallAfter(self.__DoEnableEdit)
         evt.Skip()
 
index 69028630a8a35fcb873530ee5b8410c794954993..5ebf3287ca8d2a305e01dd0ed2a239937f1c3d27 100644 (file)
@@ -289,8 +289,7 @@ class Shape(ShapeEvtHandler):
 
     def Delete(self):
         if self._parent:
-            i = self._parent.GetChildren().index(self)
-            self._parent.GetChildren(i).remove(self)
+            self._parent.GetChildren().remove(self)
 
         self.ClearText()
         self.ClearRegions()
@@ -301,7 +300,8 @@ class Shape(ShapeEvtHandler):
         if self._canvas:
             self.RemoveFromCanvas(self._canvas)
 
-        self.GetEventHandler().OnDelete()
+        if self.GetEventHandler():
+            self.GetEventHandler().OnDelete()
         self._eventHandler = None
         
     def __del__(self):
index 086a6c1fc08c188c941baff284ed22cd0cf9bb6a..32f3eac88c03c2d8195db09b4ed3c704fad15ce3 100644 (file)
 # add index to data list after parsing total pages for paging
 #----------------------------------------------------------------------------
 # 12/10/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
 # o 2.5 compatability update.
-#
-
+#----------------------------------------------------------------------------
+# 11/23/2004 - Vernon Cole (wnvcole@peppermillcas.com)
+# o Generalize for non-2-dimensional sequences and non-text data
+#   (can use as a simple text printer by supplying a list of strings.)
+# o Add a small _main_ for self test
 import  copy
-import  os
-import  sys
-
+import  types
 import  wx
 
 class PrintBase:
@@ -268,10 +269,47 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
         pos_x = self.left_margin * self.pwidth + self.horizontal_offset     # left margin
         self.column.append(pos_x)
 
+        #module logic expects two dimensional data -- fix input if needed
+        if isinstance(self.data,types.StringTypes):
+            self.data = [[copy.copy(self.data)]] # a string becomes a single cell
+        try:
+            rows = len(self.data)
+        except TypeError:
+            self.data = [[str(self.data)]] # a non-iterable becomes a single cell
+            rows = 1
+        first_value = self.data[0]
+
+        if isinstance(first_value, types.StringTypes): # a sequence of strings
+            if self.label == [] and self.set_column == []:
+                data = []
+                for x in self.data:     #becomes one column
+                    data.append([x])
+            else:
+                data = [self.data]      #becames one row
+            self.data = data
+            first_value = data[0]
+        try:
+            column_total = len(first_value)
+        except TypeError:    # a sequence of non-iterables
+            if self.label == [] and self.set_column == []:
+                data = []       #becomes one column
+                for x in self.data:
+                    data.append([str(x)])
+                column_total = 1
+            else:
+                data = [self.data] #becomes one row
+                column_total = len(self.data)
+            self.data = data
+            first_value = data[0]
+
         if self.set_column == []:
             table_width = self.page_width - self.left_margin - self.right_margin
-            width = table_width/(len(self.label))
-            for val in self.label:
+            if self.label == []:
+                temp = first_value
+            else:
+                temp = self.label
+            width = table_width/(len(temp))
+            for val in temp:
                 column_width = width * self.pwidth
                 pos_x = pos_x + column_width
                 self.column.append(pos_x)   # position of each column
@@ -290,13 +328,10 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
                 print "Column Settings Incorrect", "\nColumn Value: " + str(self.column), "\nLabel Value: " + str(self.label)
                 return
 
-        first_value = self.data[0]
-        column_total = len(first_value)
         if column_total != len(self.column) -1:
-            print "Column Settings Incorrect", first_value, self.column
+            print "Cannot fit", first_value, 'in', len(self.column)-1, 'columns.'
             return
 
-        col = 0
         for col in range(column_total):
             try:
                 align = set_column_align[col]       # check if custom column alignment
@@ -314,10 +349,8 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
                 colour = set_column_txtcolour[col]     # check if custom column text colour
             except:
                 colour = self.GetFontColour(self.parent.text_font)
-
             self.column_txtcolour.append(colour)
 
-            col = col + 1
 
     def SetPointAdjust(self):
         f = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)     # setup using 10 point
@@ -526,12 +559,14 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
         self.col = 0
         max_y = 0
         for vtxt in row_val:
+            if not isinstance(vtxt,types.StringTypes):
+                vtxt = str(vtxt)
             self.region = self.column[self.col+1] - self.column[self.col]
             self.indent = self.column[self.col]
             self.align = self.column_align[self.col]
 
             fcolour = self.column_txtcolour[self.col]       # set font colour
-            celltext = self.GetCellText(self.data_cnt, self.col)
+            celltext = self.GetCellTextColour(self.data_cnt, self.col)
             if celltext is not None:
                 fcolour = celltext      # override the column colour
 
@@ -554,7 +589,7 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
         except:
             return None
 
-    def GetCellText(self, row, col):      # check if custom colour defined for the cell text
+    def GetCellTextColour(self, row, col):      # check if custom colour defined for the cell text
         try:
             set = self.cell_text[row]
         except:
@@ -570,7 +605,8 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
         self.DrawColumns()      # draw all vertical lines
 
     def DrawGridLine(self):
-        if self.draw == True:
+        if self.draw == True \
+        and len(self.column) > 2:    #supress grid lines if only one column
             try:
                 size = self.row_line_size[self.data_cnt]
             except:
@@ -588,7 +624,8 @@ class PrintTableDraw(wx.ScrolledWindow, PrintBase):
             self.DC.DrawLine(self.column[0], y_out, self.end_x, y_out)
 
     def DrawColumns(self):
-        if self.draw == True:
+        if self.draw == True \
+        and len(self.column) > 2:   #surpress grid line if only one column
             col = 0
             for val in self.column:
                 try:
@@ -720,8 +757,8 @@ class PrintTable:
         self.footer_type = "Pageof"
 
     def SetMargins(self):
-        self.left_margin = 1.0
-        self.right_margin = 1.0     # only used if no column sizes
+        self.left_margin = 0.5
+        self.right_margin = 0.5    # only used if no column sizes
 
         self.top_margin  = 0.8
         self.bottom_margin = 1.0
@@ -869,15 +906,15 @@ class PrintTable:
         self.footer.append(set)
 
     def Preview(self):
+        data = wx.PrintDialogData(self.printData)
         printout = SetPrintout(self)
         printout2 = SetPrintout(self)
-        self.preview = wx.PrintPreview(printout, printout2, self.printData)
+        self.preview = wx.PrintPreview(printout, printout2, data)
         if not self.preview.Ok():
             wxMessageBox("There was a problem printing!", "Printing", wx.OK)
             return
 
         self.preview.SetZoom(60)        # initial zoom value
-
         frame = wx.PreviewFrame(self.preview, self.parentFrame, "Print preview")
 
         frame.Initialize()
@@ -887,14 +924,13 @@ class PrintTable:
         frame.Show(True)
 
     def Print(self):
-        pdd = wx.PrintDialogData()
-        pdd.SetPrintData(self.printData)
+        pdd = wx.PrintDialogData(self.printData)
         printer = wx.Printer(pdd)
         printout = SetPrintout(self)
         if not printer.Print(self.parentFrame, printout):
             wx.MessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wx.OK)
         else:
-            self.printData = printer.GetPrintDialogData().GetPrintData()
+            self.printData = wx.PrintData( printer.GetPrintDialogData().GetPrintData() )
         printout.Destroy()
 
     def DoDrawing(self, DC):
@@ -1091,8 +1127,23 @@ class SetPrintout(wx.Printout):
         self.canvas.DoDrawing(dc)
         return True
 
-
-
-
-
-
+if __name__ == '__main__':
+    app = wx.PySimpleApp()
+    frame = wx.Frame(None, -1, "Dummy wx frame for testing printout.py")
+    frame.Show(True)
+    ptbl = PrintTable(frame)
+    ptbl.SetHeader('This is the test HEADER')
+    # a single sequence will print out as a single column with no borders ...
+    ptbl.data = (
+        'This is the first line of text.',
+        'This is the second line\nand the third. The fourth will be the number "4.0".',
+        04.00,
+        'This is the fifth line, but by design it is too long to fit in the width of a standard'\
+         ' page, so it will be forced to wrap around in order to fit without having '\
+         'some of its verbose verbage truncated.',
+        'Here we have the final line.'
+        )
+    #... but, if labels or columns are defined, a single sequence will print out as a single row
+    ##ptbl.label = ('One','Two','Three','Four','5')
+    ptbl.Preview()
+    app.MainLoop()
index 7c9f8e00c07eb14dbe52c9e38029d973fb67a773..2ac99a3e6b5cca8db710f8a2359345ec0a6d7f02 100644 (file)
@@ -194,8 +194,16 @@ class DocFrameMixIn:
         Saves all of the currently open documents.
         """
         docs = wx.GetApp().GetDocumentManager().GetDocuments()
+        
+        # save child documents first
+        for doc in docs:
+            if isinstance(doc, wx.lib.pydocview.ChildDocument):
+                doc.Save()
+                
+        # save parent and other documents later
         for doc in docs:
-            doc.Save()
+            if not isinstance(doc, wx.lib.pydocview.ChildDocument):
+                doc.Save()
 
 
     def OnAbout(self, event):
@@ -371,12 +379,13 @@ class DocMDIParentFrameMixIn:
         Create the specified embedded windows around the edges of the frame.
         """
         frameSize = self.GetSize()   # TODO: GetClientWindow.GetSize is still returning 0,0 since the frame isn't fully constructed yet, so using full frame size
-        defaultHSize = int(frameSize[0] / 6)
-        defaultVSize = int(frameSize[1] / 7)
+        MIN_SIZE = 20
+        defaultHSize = max(MIN_SIZE, int(frameSize[0] / 6))
+        defaultVSize = max(MIN_SIZE, int(frameSize[1] / 7))
         defaultSubVSize = int(frameSize[1] / 2)
         config = wx.ConfigBase_Get()
         if windows & (EMBEDDED_WINDOW_LEFT | EMBEDDED_WINDOW_TOPLEFT | EMBEDDED_WINDOW_BOTTOMLEFT):
-            self._leftEmbWindow = self._CreateEmbeddedWindow(self, (config.ReadInt("MDIEmbedLeftSize", defaultHSize), -1), wx.LAYOUT_VERTICAL, wx.LAYOUT_LEFT, visible = config.ReadInt("MDIEmbedLeftVisible", 1), sash = wx.SASH_RIGHT)
+            self._leftEmbWindow = self._CreateEmbeddedWindow(self, (max(MIN_SIZE,config.ReadInt("MDIEmbedLeftSize", defaultHSize)), -1), wx.LAYOUT_VERTICAL, wx.LAYOUT_LEFT, visible = config.ReadInt("MDIEmbedLeftVisible", 1), sash = wx.SASH_RIGHT)
         else:
             self._leftEmbWindow = None
         if windows & EMBEDDED_WINDOW_TOPLEFT:
@@ -388,7 +397,7 @@ class DocMDIParentFrameMixIn:
         else:
             self._bottomLeftEmbWindow = None
         if windows & (EMBEDDED_WINDOW_RIGHT | EMBEDDED_WINDOW_TOPRIGHT | EMBEDDED_WINDOW_BOTTOMRIGHT):
-            self._rightEmbWindow = self._CreateEmbeddedWindow(self, (config.ReadInt("MDIEmbedRightSize", defaultHSize), -1), wx.LAYOUT_VERTICAL, wx.LAYOUT_RIGHT, visible = config.ReadInt("MDIEmbedRightVisible", 1), sash = wx.SASH_LEFT)
+            self._rightEmbWindow = self._CreateEmbeddedWindow(self, (max(MIN_SIZE,config.ReadInt("MDIEmbedRightSize", defaultHSize)), -1), wx.LAYOUT_VERTICAL, wx.LAYOUT_RIGHT, visible = config.ReadInt("MDIEmbedRightVisible", 1), sash = wx.SASH_LEFT)
         else:
             self._rightEmbWindow = None
         if windows & EMBEDDED_WINDOW_TOPRIGHT:
@@ -400,11 +409,11 @@ class DocMDIParentFrameMixIn:
         else:
             self._bottomRightEmbWindow = None
         if windows & EMBEDDED_WINDOW_TOP:
-            self._topEmbWindow = self._CreateEmbeddedWindow(self, (-1, config.ReadInt("MDIEmbedTopSize", defaultVSize)), wx.LAYOUT_HORIZONTAL, wx.LAYOUT_TOP, visible = config.ReadInt("MDIEmbedTopVisible", 1), sash = wx.SASH_BOTTOM)
+            self._topEmbWindow = self._CreateEmbeddedWindow(self, (-1, max(MIN_SIZE,config.ReadInt("MDIEmbedTopSize", defaultVSize))), wx.LAYOUT_HORIZONTAL, wx.LAYOUT_TOP, visible = config.ReadInt("MDIEmbedTopVisible", 1), sash = wx.SASH_BOTTOM)
         else:
             self._topEmbWindow = None
         if windows & EMBEDDED_WINDOW_BOTTOM:
-            self._bottomEmbWindow = self._CreateEmbeddedWindow(self, (-1, config.ReadInt("MDIEmbedBottomSize", defaultVSize)), wx.LAYOUT_HORIZONTAL, wx.LAYOUT_BOTTOM, visible = config.ReadInt("MDIEmbedBottomVisible", 1), sash = wx.SASH_TOP)
+            self._bottomEmbWindow = self._CreateEmbeddedWindow(self, (-1, max(MIN_SIZE,config.ReadInt("MDIEmbedBottomSize", defaultVSize))), wx.LAYOUT_HORIZONTAL, wx.LAYOUT_BOTTOM, visible = config.ReadInt("MDIEmbedBottomVisible", 1), sash = wx.SASH_TOP)
         else:
             self._bottomEmbWindow = None
 
@@ -572,11 +581,11 @@ class DocMDIParentFrameMixIn:
         self._LayoutFrame()
 
 
-    def HideEmbeddedWindow(self):
+    def HideEmbeddedWindow(self, window):
         """
         Hides the embedded window specified by the embedded window location constant.
         """
-        self.ShowEmbeddedWindow(show = False)
+        self.ShowEmbeddedWindow(window, show=False)
 
 
 class DocTabbedChildFrame(wx.Panel):
@@ -645,7 +654,7 @@ class DocTabbedChildFrame(wx.Panel):
         """
         Returns the frame's title.
         """
-        wx.GetApp().GetTopWindow().GetNotebookPageTitle(self)
+        return wx.GetApp().GetTopWindow().GetNotebookPageTitle(self)
 
 
     def SetTitle(self, title):
@@ -769,11 +778,22 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         """
         Creates the notebook to use for the tabbed document interface.
         """     
-        self._notebook = wx.Notebook(self, wx.NewId())
+        if wx.Platform != "__WXMAC__":
+            self._notebook = wx.Notebook(self, wx.NewId())
+        else:
+            self._notebook = wx.Listbook(self, wx.NewId(), style=wx.LB_LEFT)
         # self._notebook.SetSizer(wx.NotebookSizer(self._notebook))
-        wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
+        if wx.Platform != "__WXMAC__":
+            wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
+        else:
+            wx.EVT_LISTBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
         wx.EVT_RIGHT_DOWN(self._notebook, self.OnNotebookRightClick)
-        wx.EVT_MOTION(self._notebook, self.OnNotebookMouseOver)
+        wx.EVT_MIDDLE_DOWN(self._notebook, self.OnNotebookMiddleClick)
+        
+        # wxBug: wx.Listbook does not implement HitTest the same way wx.Notebook
+        # does, so for now don't fire MouseOver events.
+        if wx.Platform != "__WXMAC__":
+            wx.EVT_MOTION(self._notebook, self.OnNotebookMouseOver)
 
         templates = wx.GetApp().GetDocumentManager().GetTemplates()
         iconList = wx.ImageList(16, 16, initialCount = len(templates))
@@ -829,6 +849,7 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
     def OnNotebookMouseOver(self, event):
         # wxBug: On Windows XP the tooltips don't automatically disappear when you move the mouse and it is on a notebook tab, has nothing to do with this code!!!
         index, type = self._notebook.HitTest(event.GetPosition())
+        
         if index > -1:
             doc = self._notebook.GetPage(index).GetView().GetDocument()
             self._notebook.SetToolTip(wx.ToolTip(doc.GetFilename()))
@@ -837,6 +858,17 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         event.Skip()
             
 
+    def OnNotebookMiddleClick(self, event):
+        """
+        Handles middle clicks for the notebook, closing the document whose tab was
+        clicked on.
+        """
+        index, type = self._notebook.HitTest(event.GetPosition())
+        if index > -1:
+            doc = self._notebook.GetPage(index).GetView().GetDocument()
+            if doc:
+                doc.DeleteAllViews()
+                
     def OnNotebookRightClick(self, event):
         """
         Handles right clicks for the notebook, enabling users to either close
@@ -902,9 +934,19 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
                     break
         if not found:
             self._notebook.SetPageImage(index, self._blankIconIndex)
+        
+        # wxBug: the wxListbook used on Mac needs its tabs list resized
+        # whenever a new tab is added, but the only way to do this is
+        # to resize the entire control
+        if wx.Platform == "__WXMAC__":
+            content_size = self._notebook.GetSize()
+            self._notebook.SetSize((content_size.x+2, -1))
+            self._notebook.SetSize((content_size.x, -1))
+        
         self._notebook.Layout()
 
 
+
     def RemoveNotebookPage(self, panel):
         """
         Removes a document page from the notebook.
@@ -925,7 +967,7 @@ class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
         
 
     def GetNotebookPageTitle(self, panel):
-        self._notebook.GetPageText(self.GetNotebookPageIndex(panel))
+        return self._notebook.GetPageText(self.GetNotebookPageIndex(panel))
         
 
     def SetNotebookPageTitle(self, panel, title):
@@ -1296,7 +1338,7 @@ class DocOptionsService(DocService):
         DocService.__init__(self)
         self.ClearOptionsPanels()
         self._supportedModes = supportedModes
-        self._toolOptionsID = wx.NewId()
+        self._toolOptionsID = wx.ID_PREFERENCES
         if showGeneralOptions:
             self.AddOptionsPanel(GeneralOptionsPanel)
 
@@ -1370,6 +1412,7 @@ class DocOptionsService(DocService):
         if len(self._optionsPanels) == 0:
             return
         optionsDialog = OptionsDialog(wx.GetApp().GetTopWindow(), self._optionsPanels, self._docManager)
+        optionsDialog.CenterOnParent()
         if optionsDialog.ShowModal() == wx.ID_OK:
             optionsDialog.OnOK(optionsDialog)  # wxBug: wxDialog should be calling this automatically but doesn't
         optionsDialog.Destroy()
@@ -1386,8 +1429,8 @@ class OptionsDialog(wx.Dialog):
         """
         Initializes the options dialog with a notebook page that contains new
         instances of the passed optionsPanelClasses.
-        """
-        wx.Dialog.__init__(self, parent, -1, _("Options"), size = (570, 365))
+        """        
+        wx.Dialog.__init__(self, parent, -1, _("Options"))
 
         self._optionsPanels = []
         self._docManager = docManager
@@ -1397,16 +1440,54 @@ class OptionsDialog(wx.Dialog):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        optionsNotebook = wx.Notebook(self, -1, size=(560, 325))
+        if wx.Platform == "__WXMAC__":
+            optionsNotebook = wx.Listbook(self, wx.NewId(), style=wx.LB_DEFAULT)
+        else:
+            optionsNotebook = wx.Notebook(self, wx.NewId(), style=wx.NB_MULTILINE)  # NB_MULTILINE is windows platform only
         sizer.Add(optionsNotebook, 0, wx.ALL | wx.EXPAND, SPACE)
-        for optionsPanelClass in optionsPanelClasses:
-            optionsPanel = optionsPanelClass(optionsNotebook, -1)
-            self._optionsPanels.append(optionsPanel)
+        
+        if wx.Platform == "__WXMAC__":
+            iconList = wx.ImageList(16, 16, initialCount = len(optionsPanelClasses))
+            self._iconIndexLookup = []
+               
+            for optionsPanelClass in optionsPanelClasses:
+                optionsPanel = optionsPanelClass(optionsNotebook, -1)
+                self._optionsPanels.append(optionsPanel)
+             
+                # We need to populate the image list before setting notebook images
+                if hasattr(optionsPanel, "GetIcon"):
+                    icon = optionsPanel.GetIcon()
+                else:
+                    icon = None
+                if icon:
+                    if icon.GetHeight() != 16 or icon.GetWidth() != 16:
+                        icon.SetHeight(16)
+                        icon.SetWidth(16)
+                        if wx.GetApp().GetDebug():
+                            print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName
+                    iconIndex = iconList.AddIcon(icon)
+                    self._iconIndexLookup.append((optionsPanel, iconIndex))
+            
+                else:
+                    # use -1 to represent that this panel has no icon
+                    self._iconIndexLookup.append((optionsPanel, -1))
+                
+            optionsNotebook.AssignImageList(iconList)
+        
+            # Add icons to notebook
+            for index in range(0, len(optionsPanelClasses)-1):
+                iconIndex = self._iconIndexLookup[index][1]
+                if iconIndex >= 0:
+                    optionsNotebook.SetPageImage(index, iconIndex)        
+        else:
+            for optionsPanelClass in optionsPanelClasses:
+                optionsPanel = optionsPanelClass(optionsNotebook, -1)
+                self._optionsPanels.append(optionsPanel)
+
         sizer.Add(self.CreateButtonSizer(wx.OK | wx.CANCEL), 0, wx.ALIGN_RIGHT | wx.RIGHT | wx.BOTTOM, HALF_SPACE)
         self.SetSizer(sizer)
         self.Layout()
-        if wx.Platform != '__WXMAC__' or len(optionsPanelClasses) < 6:  # wxBug: Notebook tabs are truncated and user can't get to them on the Mac
-            self.Fit()
+        self.Fit()
         wx.CallAfter(self.DoRefresh)
 
 
@@ -1512,6 +1593,11 @@ class GeneralOptionsPanel(wx.Panel):
             config.WriteInt("UseWinMDI", (self._documentRadioBox.GetStringSelection() == self._winMdiChoice))
 
 
+    def GetIcon(self):
+        """ Return icon for options panel on the Mac. """
+        return wx.GetApp().GetDefaultIcon()
+
+
 class DocApp(wx.PySimpleApp):
     """
     The DocApp class serves as the base class for pydocview applications and offers
@@ -1587,7 +1673,16 @@ class DocApp(wx.PySimpleApp):
                 frame = wx.lib.pydocview.DocMDIParentFrame(docManager, None, -1, self.GetAppName())                
             frame.Show(True)
 
-        
+    def MacOpenFile(self, filename):
+        self.GetDocumentManager().CreateDocument(os.path.normpath(filename), wx.lib.docview.DOC_SILENT)
+            
+        # force display of running app
+        topWindow = wx.GetApp().GetTopWindow()
+        if topWindow.IsIconized():
+            topWindow.Iconize(False)
+        else:
+            topWindow.Raise()
+                
     def DoBackgroundListenAndLoad(self):
         """
         Open any files specified in the given command line argument passed in via shared memory
@@ -1602,7 +1697,7 @@ class DocApp(wx.PySimpleApp):
             self._sharedMemory.flush()
             args = pickle.loads(data)
             for arg in args:
-                if arg[0] != '/' and arg[0] != '-' and os.path.exists(arg):
+                if (wx.Platform != "__WXMSW__" or arg[0] != "/") and arg[0] != '-' and os.path.exists(arg):
                     self.GetDocumentManager().CreateDocument(os.path.normpath(arg), wx.lib.docview.DOC_SILENT)
             
             # force display of running app
@@ -1623,7 +1718,7 @@ class DocApp(wx.PySimpleApp):
         """
         args = sys.argv[1:]
         for arg in args:
-            if arg[0] != '/' and arg[0] != '-' and os.path.exists(arg):
+            if (wx.Platform != "__WXMSW__" or arg[0] != "/") and arg[0] != '-' and os.path.exists(arg):
                 self.GetDocumentManager().CreateDocument(os.path.normpath(arg), wx.lib.docview.DOC_SILENT)
 
 
@@ -2022,7 +2117,7 @@ class DocApp(wx.PySimpleApp):
             splash_bmp = image
         else:
             splash_bmp = wx.Image(image).ConvertToBitmap()
-        self._splash = wx.SplashScreen(splash_bmp,wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_NO_TIMEOUT,0, None, -1
+        self._splash = wx.SplashScreen(splash_bmp, wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_NO_TIMEOUT, 0, None, -1, style=wx.SIMPLE_BORDER|wx.FRAME_NO_TASKBAR
         self._splash.Show()
 
 
@@ -2351,7 +2446,7 @@ class AboutService(DocService):
             dlg = self._dlg(wx.GetApp().GetTopWindow(), self._image)
         else:
             dlg = self._dlg(wx.GetApp().GetTopWindow())
-        dlg.CenterOnScreen()
+        dlg.CenterOnParent()
         dlg.ShowModal()
         dlg.Destroy()
 
@@ -2384,7 +2479,6 @@ class AboutDialog(wx.Dialog):
         sizer.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
     
         self.SetSizer(sizer)
-        self.SetAutoLayout(True)
         sizer.Fit(self)
     
 
@@ -2457,6 +2551,7 @@ class FilePropertiesService(DocService):
             filename = wx.GetApp().GetDocumentManager().GetCurrentDocument().GetFilename()
 
         filePropertiesDialog = FilePropertiesDialog(wx.GetApp().GetTopWindow(), filename)
+        filePropertiesDialog.CenterOnParent()
         if filePropertiesDialog.ShowModal() == wx.ID_OK:
             pass  # Handle OK
         filePropertiesDialog.Destroy()
@@ -2928,13 +3023,20 @@ import cStringIO
 #----------------------------------------------------------------------
 def getNewData():
     return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00[IDAT8\x8d\xed\x93\xb1\n\x001\x08C\x13{\xff\xff\xc7mn\xb8El\x91\x16\
-\x97\x0e\x97M\x90\x97\x88JZCE\x8f/4\xba\xb2fZc\n\x00\x00i\xcd \t\x8d\xae\x08\
-\xb1\xad\x9c\x0e\x1eS\x1e\x01\xc8\xcf\xdcC\xa6\x112\xf7\x08:N\xb0\xd2\x0f\
-\xb8\x010\xdd\x81\xdf\xf1\x8eX\xfd\xc6\xf2\x08/D\xbd\x19(\xc8\xa5\xd9\xfa\
-\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01\x04IDAT8\x8d\xa5\x93\xbdj\x02A\x10\xc7\x7f{gme\xe5c\xe4\t\x82\x85\
+\x85\x85oa\xe5+\xd8Z\xd8'e\xfa\x80\xd8\xd8X\x19R\xc4\x07\x90\x04\xd1J\x08\
+\x17\x0cr\\V\xe1\xe4\xfc\x80\xb58\xf7\xd8\xbd\x0f\xa280\xec\xec2\xbf\xff\xce\
+\xcc\xb2B8.\xf7X\xc9\xdc|L\x97J\xc7\xbe\x0c\x01\xf0\xd6\x01\x00RFtZu\x91Q\
+\x10\x8e\x9b\xf8\xe4\xf3[-w*\xf1\xafm\xec\xcf\x83\x89\x1a\xad\x94\xea\xbe\
+\x8c\x95\x99/\x1c\x17\xe7\xdaR\xcb%xh\xd4hw_\x95yn\xb5\xe0\xcb\x90\xea%\x0eO\
+\xf1\xba\xd9\xc7\xe5\xbf\x0f\xdfX]\xda)\x140A\r\x03<6klO\xf0w\x84~\xef\xc9\
+\xca/lA\xc3@\x02\xe7\x99U\x81\xb7\x0e\xa8\xec\xed\x04\x13\xde\x1c\xfe\x11\
+\x902\xb2@\xc8\xc2\x8b\xd9\xbcX\xc0\x045\xac\xc1 Jg\xe6\x08\xe8)\xa7o\xd5\
+\xb0\xbf\xcb\nd\x86x\x0b\x9c+p\x0b\x0c\xa9\x16~\xbc_\xeb\x9d\xd3\x03\xcb3q\
+\xefo\xbc\xfa/\x14\xd9\x19\x1f\xfb\x8aa\x87\xf2\xf7\x16\x00\x00\x00\x00IEND\
+\xaeB`\x82" 
 
 def getNewBitmap():
     return BitmapFromImage(getNewImage())
@@ -2948,13 +3050,21 @@ def getOpenData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\x95IDAT8\x8d\xa5\x92\xc1\x12\x03!\x08C\x13\xec\x87\xfb\xe3B\x0f.]\
-\xb0\x8e[m.\xea\x0c/\x06\x06R\n\xfe\xd1\xeb\xd7B\xd5f~\x17)\xdc2Pm\x16!\x7f\
-\xab6\xe3i\x0b\x9e\xe8\x93\xc0BD\x86\xdfV0\x00\x90R`\xda\xcc\x0c\x00\x0c\x00\
-\xc1\x05>\x9a\x87\x19t\x180\x981\xbd\xfd\xe4\xc4Y\x82\xf7\x14\xca\xe7\xb7\
-\xa6\t\xee6\x1c\xba\xe18\xab\xc1 \xc3\xb5N?L\xaa5\xb5\xd0\x8dw`JaJ\xb0\x0b\
-\x03!\xc1\t\xdc\xb9k\x0f\x9e\xd1\x0b\x18\xf6\xe0x\x95]\xf2\\\xb2\xd6\x1b}\
-\x14BL\xb9{t\xc7\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01gIDAT8\x8d\xa5\x93=KBQ\x18\xc7\x7fWo)5\x1594DC\x04!\xd1\x0bM-\xd1\
+\xd0T\x81\xba\xb7\xf8\x01Z\x9a\xdb\xfa\x08AC\x10\x0e\xb5\x86\xbaDC`CMaN\xd9\
+\x0bQF7\xe2z\xc1kz\xcd\xc4\x97\xd3\xa0\xde\xbc\\oE\xfd\xa7s\xce\xf3\xfc\x7f\
+\xe7y\xce\x8b$\xb9\xdc\xfcG2@\xf1bC\x00\x18%\xcd\x12\x1c^\xdc\x97~\x04\x18\
+\xe7K\xa2of\x05\x80\xfe\x8e@\xc3\xc8\xf2zJ\x13\xac+\xe6\xfax(a\x81\xca\xa2w\
+\x8a\x86\x91\x85\xaanE\xf7\x0c\xe0\xf3\xcf\x03P}|3\x97\x93\x11U\xcc\x85\xd3&\
+D\xee\xf4\x88\xb2\xfa5)\xab(\x99"\x00\xb9\x87c\x0b;\x19\xf1\x0b\x80\xb9pZ\
+\xb2\x00\x00\xd3T\xcb\xa5\x00(\xe4Uf\xd7\xb6m\xbd\xa7\x0e\xd6\x89\xc7\xa2\
+\xc2\x04<_\xdf\xe3\x15\x1a\xb5V\xbfc\xab\x9b6S7\xc9FIC\xbf\xcb\xe0\x15\x1a\
+\xbe\xe9e|\xad@C\xbfu4\x9d\xecnQ\x99\xdci\x02\x00\xea\x1f\x1a\x15]a\xa8pcK\
+\xae\xbf?9\x82\x02\xc1\x90$\x1b\xba\x82<\xe8\xeb\x9a\\\xcb)\xdd|\x14r\x15<\
+\xad\xb1\xab\x99\x98bdb\xd4q\xa7\xefd\xbb\x05\xa7\xdd\x8f\x0e/\x9d\x01\x85\
+\xbc\nX+8K\\\x99\xe5\x02x\x16\xf6\xba\x02$\xc9\xe56\x1fF[\xda\x8bn\x9er\xa7\
+\x02\xc1\x90\xedoH\xed\xdf\x18\x8fE\xc5o\x0c\x8e\x80\xbf\xea\x13\xa8\x18\x89\
+5\xe7L\xb3:\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getOpenBitmap():
     return BitmapFromImage(getOpenImage())
@@ -2968,13 +3078,20 @@ def getCopyData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\x9fIDAT8\x8d\xa5\x93\xdb\x0e\x830\x0cC\xed\x84\xdfF\xeb\xb4\xef\xa6\
-\xde\x030z\t\x94\tK\x91z\xcb\x01\xbb*i\x8e\'\x9a\x00@yQ\xb4Is\x8e\x00\xb6\
-\x0f$Uu\x05\x0e\x01\x91$\r!\xa49\x94\x17I\x02\xc9_\xe3:Nq\x93}XL|\xeb\xe9\
-\x05\xa4p\rH\xa29h^[ Y\xd5\xb9\xb5\x17\x94gu\x19DA\x96\xe0c\xfe^\xcf\xe7Y\
-\x95\x05\x00M\xf5\x16Z;\x7f\xfdAd\xcf\xee\x1cj\xc1%|\xdan"LL\x19\xda\xe1}\
-\x90:\x00#\x95_l5\x04\xec\x89\x9f\xef?|\x8d\x97o\xe1\x8e\xbeJ\xfc\xb1\xde\
-\xea\xf8\xb9\xc4\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01_IDAT8\x8d\x8d\x92\xbfK\x02a\x18\xc7?w\xfa\'\xd8\xd0\xa0\xe4v\xd0$M\
+\x8dB\x11\x11\xa5B\x7f@C\xd0RC{k8E\x834\xb45\n\x15\xfd\x80hhh\xd2\xadI\x82\
+\xa4!\xb8\x84\xca\xd4;\xa5\xf2R\xe1m\xd0\xfb\xf5^\x1e~\xe1\xe5^\x9e{\xbe\x9f\
+\xf7\xfb\xbcwJ\xa9\xa2\x0bFj\x98\xdf\x00\xd4\xea\x06\x00f\xdbbosQ!L\xa5\x8a.\
+\xaa_"\xb0\x8e\xce\xcb\xa2\xfc)\xc4N\xfeT(j\x84\xb1\xabT\xd1E,\x19w\x80\x8d\
+\x97Ww?A"\xd5n\xf2*\x96\x8c\x13K\xc6\xd1R\x1aZJcai\x1e\x80\xf4j\x9a\xed\xfd\
+\xa2\xf0\x01B\xe7\x1b\xa9\xd9\x1d>;\x03X\xd9X\xf7AToC\xb3\xeb\xc6\x96e\xb6-\
+\x1en\xef\xb999\x03\xe0\xea\xf2B\x00Dku\x83)\xcd\x85\x8c;}n9\r\x80\xd1\x87b\
+\xbe\x00\xb33\xc3\x04f\xdbr\x9a;\x03\xbfI\x86\x1a\xfd\xe0\x01\xaam\xec\x0c\
+\x86\r\xf6\x8d{\xcd\xf6;\x00\xb3\'\x01\xde?\x9a>\xba\x9cH6\xb7,x~\xaa:=Q\x9f\
+\xb9\xe7\x1fE\xae\xb7\\\xb6\x1f\xe0\x8d\x15H$\x99\x1b?\x12@\xd7\xdf\xd0\x0f\
+\nN!\x91\x98\x9e\xd8\x0c\x10\xbd>\xdeU\xeco\np\xf7\xf8\xebK\x14fvF\xc8ds\xce\
+\xff\xbd\xb6u(\xbc\x89\xbc\x17\xf6\x9f\x14E\x8d\x04\x8a\xdeDa\xcads\xca\x1f\
+\x0cI\xd4\xda\x88E\x9d\xc4\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getCopyBitmap():
     return BitmapFromImage(getCopyImage())
@@ -2988,13 +3105,22 @@ def getPasteData():
     return \
 "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\xa1IDAT8\x8d\xa5\x93\xd9\x0e\xc3 \x0c\x04\xc7\xa6\xbf]\xc5U\xbf\xbb\
-\xd9>$4\\9\xaa\xacd\t\x0c\x1e/H6\xf3\xc4\x1d=FI\xcd\x1f\x95{\xf3d{\x003O]\
-\x01\x80\x94/\x0c\x8a\n\xa0\x01\x8a\x88\xdfaD m\x85y\xdd\xde\xc9\x10/\xc9\
-\xf9\xc0S2\xf3%\xf2\xba\x04\x94\xea\xfe`\xf4\x9c#U\x80\xbd.\x97\x015\xec&\
-\x00@\x9a\xba\x9c\xd9\x0b\x08\xe0\r4\x9fxU\xd2\x84\xe6\xa7N\x1dl\x1dkGe\xee\
-\x14\xd0>\xa3\x85\xfc\xe5`\x08]\x87I}\x84\x8e\x04!\xf3\xb48\x18\r\x8bf4\xea\
-\xde;\xbc9\xce_!\\\\T\xf75'\xd6\x00\x00\x00\x00IEND\xaeB`\x82" 
+\x00\x01\x90IDAT8\x8d\x8d\x93?H\x02a\x18\x87\x9fSw\xb1\xa9!q\xc8\xb0?B\xd0\
+\x98\x10DS\x10\x98\x82C\xd1\x12\x1a\xcd\rb&\xad\x1a\x144F`[\xd4 hBPKC\x83P\
+\x8b4\xe4\xa9tP\x82\x98\x88`$\x82\x8b\xd8p\xddu\xa7\xa5\xfd\x96{\xbf\xef\xfd\
+\xbd\xcf\xf7~w\xf7\n\x82\xc1\x08@M\xect\xd1(x\x12ef\xcaN./\x11\\\xdc\xd3\xa6\
+pz\x8d\x82\x12\x0b\x82\xc1HM\xect-c\xf7\xaa!\x10\xc9\xe0]rR\xac\xb4\x01\xc8\
+\xe5%\xe2\xbbF5_|\x0c\xa9\x10\x03=\nD2\x00$\xef\x9e\xc9\xe5%ryI\xde?\xe8\xe8\
+|\xe9\xabT\x17\xc0\xd4\x0b\xd8\nl\xa8q\xfd\xa3%\xb7\xd9x\xe1\xad=\xc2q\xba\
+\xc2\x8e\xfbU\xe7\xef\x03\x00\x98m\xd6\xef\xa7\xb23\xc9\xdbm\x06\xfb\x8a\x8f\
+\xe0y\x8a\xc0\xc4\x10\x00\xc0\xcdEB\x8d\x97\xd7}j\xbc\xb0\xe6!~\x99d\xd11\
+\x04\xa0-R$]'\xa84M4\xca\x05p8\x7f\x07\xd4?Z\x98mr\x07\x95\xa6\x9c\xf6o{\xb0\
+\xce\xbb\x00\xb0\x03\xe9\xc3\xd8\xf0+h;x\xf9\xfc\xcb\xd5\x0bh>Pzw1>\x0bg\xa7\
+)]\xaaQ.\x00`\xdb\x0c\x0f\x00hN\xf4o{~=\xf9\xa9\x0eY\xb1\x8awI\xf3\x0ej\x05\
+\xb0\x98\x1f\x00x-\xd5\xb0\xce\xc3\xd1~LW\x98\x15\xab\xccM\x8f\xfe\xaf\x03\
+\x00w0\xccS\xfdgm\xfb\xc3\xd7\xf7++w\xd5\x16\x0f\x92\t\xe4\xe9zN\x86\xbe\xa7\
+1\xaa\xfbLY\xb1:\x10 (\xe3\x0c?\x03\xf2_\xb9W=\xc2\x17\x1c\xf8\x87\x9a\x03\
+\x12\xd7\xb9\x00\x00\x00\x00IEND\xaeB`\x82" 
 
 def getPasteBitmap():
     return BitmapFromImage(getPasteImage())
@@ -3008,11 +3134,19 @@ def getSaveData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00lIDAT8\x8d\xc5\x93\xe1\n\xc0 \x08\x84=\xed\xc1}\xf1\xcd\xfd\x18B\x98\
-mX\x83\x1d\x04\x11\xfayV\x02,\xb4#\xde\xca&\xa2\xe6\x1b;\x0f\xab$\x82\x05\
-\x83\x03U\xbdaf\xe9\xea\x13]\xe5\x16\xa2\xd32\xc0].\x03\xa2Z<PU\x02\x90\xc5\
-\x0e\xd5S\xc0,p\xa6\xef[xs\xb0t\x89`A|\xff\x12\xe0\x11\xde\x0fS\xe5;\xbb#\
-\xfc>\x8d\x17\x18\xfd(\xb72\xc2\x06\x00\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01\x1dIDAT8\x8d\x9d\x93=N\xc3@\x10\x85\xbf\xf5\xa2-\xf1\x11\xa0\x8dC\
+\x8f\x82\xa0\xe5\xa7\xa6\xe2\x04\xb4p\x00\x1a\xfb\x02\x11T\xf4\xa4\xa0\xc1\
+\xc1\\\x01\x90R"\xc5\xa4\x89RD\x14\x04$\xa2@\x01\xb1\x04C\xe1\xc8\xb1`\x1dC^\
+5;?\xef\xcd\x8cv\x94r4\xf1\xc5\xa7P\x82a\xff\xb7o\xfd@+\x94\xa3\xb9o"2\xa8K\
+\x18\x86R\x84\xc1\x87\xc8\xdd\xf3X|\xdf\x17\x11\x91\x9bc$\x8a"q\xf2\x8cZk\
+\xab\xfa\xd3\x18\x1e\xdf\x12\xba\xef\x06\x80\xdb\x13\x95\xc5\x1ckE\t\xd6\xb6\
+\xf7\xec\x04I\x92\x94\xaa\xff\xc4\\\x1d\xf0\xd2\xfd\x1bA\x99:\xc0B\xfe\xb1\
+\xbb\xf1@\x10\x043\xc5\x8f6\xaf\x00\xe8u\xc0]\x9e\x10\x0c\xfb@m\x92\xb0\xbf8\
+\xcd\x1e\xb5\xacm\xdb;\x18\xb5\xc0]%8}\xcd\x85+\x99\xd5\x8e\xbf2\xfb\xfc\xb0\
+g\x1f!U\xac\xe0y^\xe62\xc6p\xd6h\x14\x8e4s\x89\xc6\xa4\xcb[\xa9V\xffG\xa0\
+\xb5\xce\x8a\x97j[\xb4\xe3\xb8\x90@)\'\xfd\xbe\xd7\xf5\xe2\x83\xeau\xec~w\'\
+\x9a\x12\x00\\6\xc3\xd2\xab,\xec`^|\x03\xb6\xdf|Q.\xa7\x15\x89\x00\x00\x00\
+\x00IEND\xaeB`\x82' 
 
 def getSaveBitmap():
     return BitmapFromImage(getSaveImage())
@@ -3026,17 +3160,20 @@ def getSaveAllData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x01\tIDAT8\x8d\xa5\x93\xe1m\x830\x10\x85\xdfA\xd7H\x827\xf0\x02\xado\
-\x04\x8f`Fh\xfb\xb7\xad\xcd&$Y\x80\x11\xcc\x06\x8c\xe0E\xd2\xeb\x8f\x16\x04!\
-8R\xf3\xa4\x93Nw\xd2\xf3\xa7g\x9b\xa8(\xf1\x88\x9er\xcb\xc3~\')%x\xef\xa7Y\
-\x8c\x11J)\x00\xc0\xf1t&PQn\x163\x0b\x00\x99\xcb{/\x00\xc49\'T\x94(\xfe\x83\
-\x1dB\x98\xfa\x95\xc1a\xbf\x13\xf9\xbe\xc8\xd7\xe7\x87\x18c\xe0\xbd\x073\xa3\
-\xaek\x10\x11\xfa\xbe\xcfgPU\x15RJ\x8bSB\x08h\x9af1\xdb$\xc8aw]\x87\xae\xeb\
-\xd6\x04\xd7i\x1bc\xc0\xccPJ\xa1m[03\x98\x19Z\xeb\x951QQ\xc2\xbc<K\x8c\x11"\
-\x92\xc5N)M\xbd\xd6\x1a\xafo\xef\x94}\x07#6\x00Xk\x7f\xef\xfdO\xc7\xd3\x19\
-\xc0,\x83\x10\x02\x88h\xaa1m\xad\xf5M\xf4E\x06s\x93-\xcd\xf1\xef\x1a\x8c\'^c\
-\xdf5\x18\x95C\xbei`\xad\xc50\x0cp\xce-\x96[\xd8s\xd1\xa3\xdf\xf9\x075\xf1v>\
-\x92\xcb\xbc\xdd\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01UIDAT8\x8d\x9d\x93\xbfK\xc3@\x1c\xc5\xdf%\x01g\xeb \x1d\x8a\x8b\x83M\
+\x11\xe9\x16\x8a\x8b\xff@\xa0\xdd\x14\'\x17\x17A2\xe9,\x08\xc9\x14\x82n.nn\
+\x9a\xde?\xe0R;\xb88\x99v\xe8`\x86\n."\x81\xb6\xb4\xb4~\x1d\xd2\xc4^\x92j\
+\xf5\x03\xc7\xfd~\xf7\xeeq\xc7<\x17\x84)\xa3\x1e\x04\x863\xfd\xf10\xac\xb7\
+\x8fe&,\xf2\\\x10\xf9\x06q\xce)I\x7fL\xf4\xda\'2M\x93\x88\x88\x1e.@\x9csb\
+\x92\x8c\xb8x.\xa8X6\xd0z\xb2c\xd1?9\x89\x1c\xfc\xd7\x89\x82\x04\xeb\x9f:Z\
+\xf5l\';9\xe0\xf1\xea\x14\xca\x12\xb0\xe2\xebh8 ))\x00\x00\xc5\xb2\x81\x8e\
+\xc4\xb1\xb5GB\xd9< \x14\xf6\t\xf7\xef&*Ga\xf6\x99\x02Y\x0c&\xc0\xc7\x08x\
+\xe9\x01A\x10\xa0y\xc9\x16\x17\x98\xdd\x1cQ\xd1\x8d\x9f\x05<\xcf\x136\xcf#\
+\x15b\xc4\xc9\xee\x1b,\xcb\x8a\xfbA\x10\xc4\xed\xf3\xc3\x01\x00\xc0o\x03J\
+\xa9&\xb3\x86c\xd3r![\xe47\x14 |\x14\xcf\xb7\x13JNZ7\xab\xc2\xe9\xddn7\x9e\
+\xbb>\xcb\x01\x98\xc9\xa0T\x93Y\x93\xdbH\xa2\xaa*4MC\xb5Z\xcdt \x84\x98\xfa(\
+S\xf2\xf9\xfc\xdc+0&\xc9\xa9\xc1\x86\xf3}\x1d\xbf\r\xacm\x84\xf5\xc2\x02\x00\
+Pw\xefR\x99d\xf1\x05z\x94\xd0b\xcb S\xf3\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getSaveAllBitmap():
     return BitmapFromImage(getSaveAllImage())
@@ -3048,16 +3185,25 @@ def getSaveAllImage():
 #----------------------------------------------------------------------
 def getPrintData():
     return \
-"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\xa1IDAT8\x8d\xa5S[\x0e\x02!\x0c\xec\xd0\xbd\xb6\x1a\xf5\xda\x96\xd9\
-\x0f\xa1V\x96\x00\xbaMHI\xd3y\xf0(\x90T\xce\xc4\xd6+2\x1bg@$E\x97\x80\xd9H\
-\x8e\xf1\x00\xc6\x0e\xda&''\x05\x80\xab\x1f\x08\xa2\xfa\xcc\xc5\xd0\xc1H\xbd\
-\n\x89\xbc\xef\xc1\tV\xd5\x91\x14\xcc\xc6\x9a\xa5<#WV\xed\x8d\x18\x94\xc2\
-\xd1s'\xa2\xb2\xe7\xc2\xf4STAf\xe3\x16\x0bm\xdc\xae\x17'\xbf?\x9e\x0e\x8an\
-\x86G\xc8\xf6\xf9\x91I\xf5\x8b\xa0\n\xff}\x04w\x80\xa4ng\x06l/QD\x04u\x1aW\
-\x06(:\xf0\xfd\x99q\xce\xf6\xe2\x0e\xa5\xa2~.\x00=\xb5t\x00\x00\x00\x00IEND\
-\xaeB`\x82" 
+\x00\x01\xa7IDAT8\x8d\xa5S=K\xc3P\x14=\xef\xb5 \x0e\xf6\x17\xb8$X\x10\xa7\
+\x82\xb4\n]\x05A\x07\xebd%\xfe\x02\x97\x82\xe0\xa0\x83\xa3\x88\xb5E\xfd\x07j\
+\x0bq\xea\x07\x18(8:5\x16\xa2H\xf1\x8bN\x12\tt\xe9\x8b\xddZ\x9eC|i\x93\xd4\
+\x0f\xf0\xc0\xe1\xe6\xbe\xdc{\xde\xb9\xc9{\x84\xd0\x10\xfe\x83\xb0x8m\xf6\
+\xb8i\xf7=/\xfb\xad\x07O\x9e]\x9f%\x01\x05BC 4\x84\x1d\xbd\xc7\xfdx\xb2\x1d^\
+\x99\x9c\x1f\xe6\x8ey\xb5Z\xe5\xa2^\x90\n\xa1\x83\xb91\xb2{;p\xf0\xfc\xe1\
+\xc4W\xdb\x89\xe3\xcb\x19\xa8\xaa\x8aJ\xb9\xc4\x87\r\xd0\xe1\xc4o\xf9/\x08\
+\x03\xc0\xc5\xf9\x19\x07\x80\xfb\xaf\x9d\xc5\xae-6(4\xed>\x9aoA\x01zq~\xc6\
+\x15E\x81\xa2(\xee\xe2\xd4\x84\x13\xe5H\xb0\xc1?\x06\x05\x80b\xb1\xe8\x16\
+\xbc\xda\x0e[\xcc\xa1i\xf71\xfcw\xf2\xf9\xbcG\x84\x14\n\x05\x1e\x8b\xc5\xa0\
+\xd5\xae\xb1\xbd\x95\x81eY#gm\xb7\xdb\x9e|cs\x1fw7\x97$lZm\xc4\x00,-. \x9b?\
+\xc1tT\x1e)\xc0\x18C$\x12\x01c\xce\x87\xe9\xbe\xeb\xa8\x94K\x9cNGeh\xb5k\x00\
+\x80\xd1\xa8#\x91H@\x96\xe5\x00%I\xc2\xe3K\x0b\x9a\xa6A\x92$W8\xbc\x92Z%\xeb\
+\xe95n4\xea\x01\xab\x9dN\xc7\xe3"9\x1fGr>\xeeYs\x8fr:\x9d\x06c\x0c\x86ax\nL\
+\xcb;\xbb\x1f\x84\xd0\x10*\xe5\x12WU\x15\xcd7`f\xf2\xc7z\x00\x80\xae\xeb\xc8\
+\xe5rXI\xad\x12"nc\xa5\\\xe2{G*\xba\xef\xfa\xaf\x02\xa2\xd9u \xe0?\xe7\xdfA4\
+\x03\xc0\'\xe3\x82\xc9\x18g\x90\x8e]\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getPrintBitmap():
     return BitmapFromImage(getPrintImage())
@@ -3071,14 +3217,20 @@ def getPrintPreviewData():
     return \
 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00\xa8IDAT8\x8d\x9d\x93K\x0e\xc30\x08Dg \xd7n\xcd\xc1\x9b\xd2E\x83E\\\
-\xffT$/\x82\xc5\x83\x19\x13\x02p,\x82\xa2\x1c\xde\x01p\xf71\x83\xe4\x14"\xab\
-\xeeQ\xec\xef\xb3\xdbe{\x82\x0c\xcb\xdf\xc7\xaa{\x86\xb7\xb0-@\xaf(\xc7\xd4\
-\x03\x9203P\x94\x14\xa5\x99\xa1\xf5b\x08\x88b+\x05~\xbejQ\x0f\xe2\xbd\x00\
-\xe0\x14\x05\xdc\x9d\xa2\xa0(\xcc\xec\x9b\xbb\xee(\xba~F\xea15a\n(\xcfG\x1d5\
-d\xe4\xdcTB\xc8\x88\xb1CB\x9b\x9b\x02\x02\x92O@\xaa\x0fXl\xe2\xcd\x0f\xf2g\
-\xad\x89\x8d\xbf\xf1\x06\xb9V9 \x0c\x1d\xff\xc6\x07\x8aF\x9e\x04\x12\xb5\xf9\
-O\x00\x00\x00\x00IEND\xaeB`\x82' 
+\x00\x01mIDAT8\x8d\x8d\x92\xbdK\x02a\x1c\xc7?w\x1a\x85E\x04588XHa\xd1\x14!AB\
+\r.\xbd\x07m-By.M\xfe\x03N\x05\x0e\xed\xf9\x124\x045\x04\x15\xdc\xda&4\xb5DC\
+J\x8a\x81E\t.\x82\x918\xd8\xf0pOw\xde\x19}\xe1\xe1w\xf7;>\xdf\xdf\xcbs\xca\
+\xddC\xb9C\x97\x1e\x8bU\xf9\x9c\xd8]V\xba\xbf\x9b\xa5\x02\xf8\xa6\xc6-ge=\
+\x0c@p)\xcc\xc1\xe1\xa5\xad\x80\xcd\xa0\x97\x86\xfb`5\xba\xf3\xa7\x89\xdb)Y\
+\xff\x16\xf1"{%s\xb77\xd7\x9d\xcd\xadm\xdb86\x03\x03\x0eE\xc2\x04\xdbPk\xc1y\
+2Edf\xday\x84\xe6\xdb\x93\x84\x8c\xd8h\x8bSk\xf5j\xdcdPj\x8eX`C\x06\x9c?\x8a\
+\xe3\xef/\xa3\xeb:\xb1\xfd=\xdb.,#4\xdav\x18-m\x01b\xd0\xc9\xe6N\xe5.Ts\xcbN\
+pz\x0e\xa2~\x91\x0bx\x00-m\xe9D-W>%h\xc0\x1f_\xbf\x15\xef\xeb\x90\xaf\xc1\
+\xe2\x18x="\x82\xb8\x15\xd9\x81yYf\x18\xe0\xac"\xc0\xc0\x10\x84\xc6D4\xcb\
+\xf2#u\xc3\xb2m`t\x00&\x07E4\xcb]x.QH\xa6\xec$\x13\xf83q^\xb44^\x8f\xb8\xa5"\
+p\x9c\x88\xa3\x91\xe1\x9d5\x00\x14Eu\xc9y\x9c\xa4\xeb\xba\xe5}\xb6\x9a\x01`\
+\xc1\x07\xf39\x97\xa2(\xaa\xab\x17+\xd5]\xe0\xf5dC\x9a\xfc\xcb\xc0\xc9\xd00\
+\xf9\x011\xc9\x87\xf3\xb4\xd1t\xaf\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getPrintPreviewBitmap():
     return BitmapFromImage(getPrintPreviewImage())
@@ -3090,13 +3242,22 @@ def getPrintPreviewImage():
 #----------------------------------------------------------------------
 def getCutData():
     return \
-"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00rIDAT8\x8d\xad\x93\xc1\x0e\xc0 \x08CW\xdco{\xf2\xbb';\xb18\x07\x9d\
-\x0b\xe3\xa2\x98\xe6\xb5$\x02H\xd92%\xde\xa3\xf6CY\xff\nH'\xf8\x05`\xb1Y\xfc\
-\x10\x00)`\xfdR\x82\x15w\n0W\xe6N\x01\xda\xab\x8e\xe7g\xc0\xe8\xae\xbdj\x04\
-\xda#\xe7;\xa8] \xbb\xbb\tL0\x8bX\xa5?\xd2c\x84\xb9 \r6\x96\x97\x0c\xf362\
-\xb1k\x90]\xe7\x13\x85\xca7&\xcf\xda\xcdU\x00\x00\x00\x00IEND\xaeB`\x82" 
+\x00\x01HIDAT8\x8d\x85\x92OK\x02Q\x14\xc5\x7f\xa3\x05}\x1b\xa1\xc0\x9d\xb4\
+\xaaf6\x93a\x10\xe3^\x83l\xdf\xc6\xa5\x1bIA\xb4\xa0\x9cM\xe5"\x84\x18\xff\
+\x108\xbb\xf0\x93\xb4v\x15h\xa9\xaf\x16\xaf\x85\xbcat^\xd3\x81\xb79\xf7\xdc\
+\xf3\xce{\xf7b$\x92\x84O\xa7\xd3\x91\x9b\\\xf8\xd4\xeb\xb5\xb5z\x02\r\x9e\
+\x1e\x1f\xa4\x8eo5\x1b\x12`\xd0\xef\x05u\xadA.\x97\xc3u\xef\xd7LZ\xcd\x86\
+\xb4\xedlD\xab5\xd0A\x08\xc1l6e>_\xc4\x1b\x88o\x01@\xde\xc9\x07\x91k\xd7Ui\
+\x9a\x96\xd6xk\x93(\x14\xce\r@\x1e\x1e\x1cE\xc4\x9e\xe7\x91J\xa58\xce\x9e\
+\x18\x7f\x1a\x00,\x17\xab\x98\xb6\x9dE\x08!M\xd3\x8aDW0\x8cDR[P\xb1U\xa3\xef\
+\x8f"\xb7C\xcc\'\xee\xbdw\xf1</h\xceL\x86Z\x9d\xf6\to\x17\xbb2m90z\xc6\xf7!3\
+\x19\x92\xb6\x1c\xc6\xdd\xab\x886v\x8ci\xcb\t\x9a\x15\xc2K\xa45P\xb7\x17o+\
+\x00,\xa6\x9f\x00\x14o+\xec\x9f\x15X\xba\x97\xf1\tTC\x1c\xfe]e\x80v\xa9\xcc\
+\xb8\xeb2\xfb\xf8\xe2\xf5\xaeA\xbbT\xd6\xea"c\x1c\xf4{r\xfbe\xf5Y?\xa7\xd5\
+\x80W\xd1w\n7k\xa3\xd4\xee\x81\x8a\x18\x16\xea8\x80_\\\xa2\x8b\x88!\xd2S\x08\
+\x00\x00\x00\x00IEND\xaeB`\x82' 
 
 def getCutBitmap():
     return BitmapFromImage(getCutImage())
@@ -3110,12 +3271,24 @@ def getUndoData():
     return \
 "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00lIDAT8\x8d\xed\x92Q\x0b\x800\x08\x84\xd5\xf5\xb7\x07W\xfdo\xed!\xaca\
-\xb2\x11{\xe9!a\xa0\xc7\xeec\x1ec\x96B3%S\xeeO\x00\x96\xd1\x05\xd3j\xed\x0c\
-\x10\xad\xdb\xce\x97\xc0R\xe8\x0c\x12\xe6\xbd\xcfQs\x1d\xb8\xf5\xd4\x90\x19#\
-\xc4\xfbG\x06\xa6\xd5X\x9a'\x0e*\r1\xee\xfd\x1a\xd0\x83\x98V\x03\x1a\xa1\xb7\
-k<@\x12\xec\xff\x95\xe7\x01\x07L\x0e(\xe5\xa4\xff\x1c\x88\x00\x00\x00\x00IEN\
-D\xaeB`\x82" 
+\x00\x01\xa7IDAT8\x8d\xa5\x90\xbfK[Q\x18\x86\x9fs#\x8d\x7fBu\xc8\xd6\xc9\xc1\
+\xa1\x83\xd0\x16\xa1C@*\x98\xc4\xa2\x12\xda\x8e5\x9b\x83\x04\x07Aph\x17)\x16\
+\xdd\xd4\xc1\xa1Z\x1b\xc5&9\xa6P\xbaw\xa8\x9b\x9b\xa0S\xb0\xe2\x8f\\%1^\x8d\
+\xde\xfa9\x84s\xf1\xea\xa5\x06<p\x86\xc3\xf9\x9e\xe7\xbc\xefQ\xca\n\xf1\x90\
+\xd5t\xdf@\xba\x10\x95r\xcd\x01`\xee\xf5o\xd5\xb0 ]\x88\n@\xd7\xb3^\x00.\xaf\
+\xce\xd8\x9d>\x10\x80\x1fC[\x9eH\x05UH\x17\xa2r\x13\xac\x9d_Pq\x8f\x01(96\
+\xdf\x16\xd7X\xff\xb8\xaf\x02\x05\x066\xa0+5\xe6\xb3\x0b\x1c\xeeW\x00x\xd1\
+\xf3\x14\x80\xaf\x93\xbf\xd8\xcb\xb8\xeaN\x05\xd3\xd7\xbc\x9a\xd1\xdf\x19\
+\x8cL@\xa4~\x9f\x9a\xec\xa3\xb3\xa7\r\x80|.+>\xc1\xfb\xd5\xe72\xf0\xf2-U\xa7\
+\xec\x83c\xf1\x84\xd79\x9f\xcbJj\xa9/\xf8\x13\xcb\xe7U.\xaf\xcep\xa5\x06P\
+\x8f\x1d\xf1'\x8c\xc5\x13*\x9f\xcb\x8a'\xe8_l\x17\x80\xe57\x1b\xea\xd4\xae\
+\xc7w\xfe9\x94\x1c\xdb\x83\x1e\x0f4\t\xc0^\xc6UFb\xee\xacS\xdba\xf8\xd5\x08\
+\xdd\xd3O\xc4t7\xab\xb8m\x93Z\xf2w\xbe\xfdgJk-\xb3\xc5\x11\xc6\xde\x8dS\x95\
+\x8a\xd7\xbf\xe4\xd8\xec\x9c\xecr\xb2Sfm\xf9\x0f3\xc9\x15\xdf\xcb^\x82X<\xa1\
+\x06#\x13\x0c}\x1a\x06 \xdc\xfc\xc87\xf0?\xb8\x1e\xc1\n\xa1\xac\x10Zk\xe9\
+\x18k\x95\x9fGS\xf2\xa58*\x9f7S\xd2\x92\x0c\x8b\xd6Z\xccL\xd0\xf6\x1d\xb4\
+\xd6\xd2\x92\x0c\xcb\xea\xdf\x0f\r\xc1w\x047%\x8d\xc0\x81\x02#i\x04VV\x88k\
+\x82\xbe\xde\xc2\xb0\xb2\xea\xa7\x00\x00\x00\x00IEND\xaeB`\x82" 
 
 def getUndoBitmap():
     return BitmapFromImage(getUndoImage())
@@ -3129,12 +3302,22 @@ def getRedoData():
     return \
 "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\
 \x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\
-\x00\x00jIDAT8\x8d\xed\x92\xcd\n\xc0 \x0c\x83\x9bv\xaf\xed\x16\xf0\xbd\xd7]&\
-\xf8\x8f\xe0e\x87\t9$\xb6\x1f\xb5\x08\xa8\xc9\xce\xd1\xad\xeeO\x00\x8e\xdc\\\
-gp\xb2,\x80FL\tP\x13\xa8\tI\x17\xa1'\x9f$\xd2\xe6\xb9\xef\x86=\xa5\xfb\x1a\
-\xb8\xbc\x03h\x84\xdf\xc1\xeb|\x19\xd0k.\x00\xe4\xb8h\x94\xbf\xa3\x95\xef$\
-\xe7\xbbh\xf4\x7f\xe5}\xc0\x03&\x1b&\xe5\xc2\x03!\xa6\x00\x00\x00\x00IEND\
-\xaeB`\x82" 
+\x00\x01\x88IDAT8\x8d\xa5\x92\xc1K\x02A\x14\xc6\xbfQ\t\xbc\x14tJ\xfb\x0f2\
+\x08\xbaD\xdd:\xe5!\xd2\xad$/\x82FP\x06\x99\x87\x04\xa1\x83D\x10\x0b\x85\xd4\
+\xa9\x8c (\x82<\xad\xce\xa9\xff\xc0[\xd2)\xbcu\t\xb2\xd0\xa5\xb5\x94\x14z\
+\x1dd\x87]\x1bBh\xe0\xc1\xf0\xde\xfb~3\xef\x9ba\xcc\xe1\xc4\x7f\x96K\x96\xdc\
+\xd6\xfcd\xeeO\x94;\xd67\xc0\x14Fg\xd7E\xae~\xa5S\xe3\xd3@!\xfe(\x051s\x84m\
+\xcdOV!\x004\xbf\r\x00\x80\xde\xae\xe2B\xbb\x94B\\\x00\x10\xb9\x9a\x12\xe2,W\
+Eqc~S\xec\xd7\x94\x18\xaa\xafY*e^l\x10\x87\xf5\xb4,W\xb1<\x98\x16q\x98W\xa1\
+\xb7\xab\x00\x80F\xa7\x0e\x00(\x164\xb2\x02\xc0\x1cN(\xb9qRr\xe3\xc49'\xe6p\
+\xc2\x1a3\xfb\xa3t\xfb\xbcK\xe7O[\xa4V\xc2\xe4K\x0e\xdb\xfa\\\x00\x10\xf3\
+\x1c\x00\x00\x02AEj\x94\xd11P\xffz\x93\x95\xba\x80^\xe1\xf4\xde\x08\x01@)\
+\xf3\xc2\xdek-!\xae5u\xe8\xcf-\x00\x80gi\x80l\x1e\xf4\xae\xc4j\x14c\x89!1o\
+\xad\xa9\x8b\xda\xc6\xf5\n\x16v&\xbb\x16\xc8~b\xb1\xa0\x91\xfa\x10G4\xb2h;\
+\xbd\xd1\xfe\x10=\xfc\xe8\x1eg\x91\xbc\xfc\x06\x81\xa0\xc2\xd2\x13\xa789\xbe\
+\x91\xde\xce\x14\x07\x82\nC\xaf\xeb\xd6\xe0\x9c\x93/9Lj%L\xa9\xf2\x1c\xa5\
+\xcas\xe4\r\xb9m\xaf\xf0'\xc0\x84xCnR+\xe1_\xe2\xbe\x00V\x88\xec\x9f\xf4\x05\
+0!\xb2\xfc\x0f\xe0\xc4\xb6\xad\x97R\xe5z\x00\x00\x00\x00IEND\xaeB`\x82" 
 
 def getRedoBitmap():
     return BitmapFromImage(getRedoImage())
index 5a5b073f3f28a12e1b1f9907e636b0a22b278131..2812cdd9691f43f635c2d4b4c7c5cbc76fc3405a 100644 (file)
@@ -59,7 +59,12 @@ class Throbber(wx.PyPanel):
                  overlay = None,  # optional image to overlay on animation
                  reverse = 0,     # reverse direction at end of animation
                  style = 0,       # window style
-                 name = "throbber"):
+                 name = "throbber",
+                 rest = 0,
+                 current = 0,
+                 direction = 1,
+                 sequence = None
+                 ):
         wx.PyPanel.__init__(self, parent, id, pos, size, style, name)
         self.name = name
         self.label = label
@@ -89,8 +94,9 @@ class Throbber(wx.PyPanel):
             self.labelX = (width - extentX)/2
             self.labelY = (height - extentY)/2
         self.frameDelay = frameDelay
-        self.current = 0
-        self.direction = 1
+        self.rest = rest
+        self.current = current
+        self.direction = direction
         self.autoReverse = reverse
         self.overlay = overlay
         if overlay is not None:
@@ -116,14 +122,14 @@ class Throbber(wx.PyPanel):
         # while the throbber is running.  self.sequence[0] should always
         # refer to whatever frame is to be shown when 'resting' and be sure
         # that no item in self.sequence >= self.frames or < 0!!!
-        self.sequence = range(self.frames)
+        self.SetSequence(sequence)
 
         self.SetClientSize((width, height))
 
         timerID  = wx.NewId()
         self.timer = wx.Timer(self, timerID)
 
-        self.Bind(EVT_UPDATE_THROBBER, self.Rotate)
+        self.Bind(EVT_UPDATE_THROBBER, self.Update)
         self.Bind(wx.EVT_PAINT, self.OnPaint)
         self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
         self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroyWindow)
@@ -157,18 +163,21 @@ class Throbber(wx.PyPanel):
         event.Skip()
 
 
-    def Rotate(self, event):
-        self.current += self.direction
+    def Update(self, event):
+        self.Next()
+
+
+    def Wrap(self):
         if self.current >= len(self.sequence):
             if self.autoReverse:
                 self.Reverse()
                 self.current = len(self.sequence) - 1
             else:
-                self.current = 1
-        if self.current < 1:
+                self.current = 0
+        if self.current < 0:
             if self.autoReverse:
                 self.Reverse()
-                self.current = 1
+                self.current = 0
             else:
                 self.current = len(self.sequence) - 1
         self.Draw(wx.ClientDC(self))
@@ -185,7 +194,7 @@ class Throbber(wx.PyPanel):
     def Rest(self):
         """Stop the animation and return to frame 0"""
         self.Stop()
-        self.current = 0
+        self.current = self.rest
         self.Draw(wx.ClientDC(self))
 
 
@@ -213,6 +222,65 @@ class Throbber(wx.PyPanel):
             self.running = not self.running
 
 
+    def SetCurrent(self, current):
+        """Set current image"""
+        running = self.Running()
+        if not running:
+            #FIXME: need to make sure value is within range!!!
+            self.current = current
+            self.Draw(wx.ClientDC(self))
+
+
+    def SetRest(self, rest):
+        """Set rest image"""
+        self.rest = rest
+
+
+    def SetSequence(self, sequence = None):
+        """Order to display images"""
+
+        # self.sequence can be changed, but it's not recommended doing it
+        # while the throbber is running.  self.sequence[0] should always
+        # refer to whatever frame is to be shown when 'resting' and be sure
+        # that no item in self.sequence >= self.frames or < 0!!!
+
+        running = self.Running()
+        self.Stop()
+
+        if sequence is not None:
+            #FIXME: need to make sure values are within range!!!
+            self.sequence = sequence
+        else:
+            self.sequence = range(self.frames)
+
+        if running:
+            self.Start()
+            
+
+    def Increment(self):
+        """Display next image in sequence"""
+        self.current += 1
+        self.Wrap()
+
+
+    def Decrement(self):
+        """Display previous image in sequence"""
+        self.current -= 1
+        self.Wrap()
+
+
+    def Next(self):
+        """Display next image in sequence according to direction"""
+        self.current += self.direction
+        self.Wrap()
+
+
+    def Previous(self):
+        """Display previous image in sequence according to direction"""
+        self.current -= self.direction
+        self.Wrap()
+
+
     def SetFrameDelay(self, frameDelay = 0.05):
         """Delay between each frame"""
         self.frameDelay = frameDelay
index d92d1ae041ac1c5de3ee72479308f7df963c5273..e6929aa727180b0d6b115eda9508ab24c3c26977 100644 (file)
@@ -1,3 +1,81 @@
+0.9.5 (12/23/2005)
+-------------------
+
+Applied a series of enhancments by Franz Steinaeusler, Adi Sieker, and
+Sebastian Haase, up until their 7-31-2005 version.  (Their next
+version broke some existing functionality, and added some confusing
+hacks, and I didn't feel that the incremental gains were worth the
+loss at that point so I stopped at 7-31-2005.)
+
+Their changes include the following:
+
+* The Autocomplete and Calltip windows can now be opened manually with
+  Ctrl-Space and Ctrl-Shift-Space.
+
+* In the stand alone PyCrust app the various option settings, window
+  size and position, and etc. are saved and restored at the next run.
+
+* Added a help dialog bound to the F1 key that shows the key bindings.
+
+* Added a new text completion function that suggests words from the
+  history.  Bound to Shift-Return.
+
+* F11 will toggle the maximized state of the frame.
+
+* switched to Bind() from wx.EVT_*().
+
+* Display of line numbers can be toggled.
+
+* F12 toggles a "free edit" mode of the shell buffer.  This mode is
+  useful, for example, if you would like to remove some output or
+  errors or etc. from the buffer before doing a copy/paste.  The free
+  edit mode is designated by the use of a red, non-flashing caret.
+
+* Ctrl-H will fold/unfold (hide/show) the selected lines.
+
+
+
+On top of these changes I (Robin Dunn) added the following:
+
+* General code cleanup and fixes.
+
+* Use wx.StandardPaths to determine the location of the config files.
+
+* Remove Orbtech attributions from the UI, they've been there long
+  enough.
+
+* Use wx.SP_LIVE_UPDATE on crust and filling windows.
+
+* Extended the saving of the config info and other new features to the
+  PyShell app too.  Additionally, other apps that embed a PyCrust or a
+  PyShell can pass their own wx.Config object and have the Py code
+  save/restore its settings to/from there.
+
+* All of the classes with config info get an opportunity to save/load
+  their own settings instead of putting all the save/load code in one
+  place that then has to reach all over the place to do anything.
+
+* Enable editing of the startup python code, which will either be the
+  file pointed to by PYTHONSTARTUP or a file in the config dir if
+  PYTHONSTARTUP is not set in the environment.
+
+* Added an option to skip the running of the startup code when 
+  PyShell or PyCrust starts.
+
+* PyCrust adds a pp(item) function to the shell's namespace that
+  pretty prints the item in the Display tab of the notebook.  Added
+  code to raise that tab when pp() is called.
+
+* Added an option for whether to insert text for function parameters
+  when popping up the call tip.
+
+* Added Find and Find-Next functions that use the wx.FindReplaceDialog.
+
+
+
+
+
+
 0.9.4 (1/25/2004 to //2004)
 ------------------------------
 
index b9a222763e59623667f5cef2b1755c7c8758e7d9..95975d0d00a832d348fa5a7d2303c02c2fed9572 100644 (file)
@@ -17,15 +17,26 @@ class App(wx.App):
     """PyCrust standalone application."""
 
     def OnInit(self):
+        import os
         import wx
         from wx import py
-        wx.InitAllImageHandlers()
-        self.frame = py.crust.CrustFrame()
-        self.frame.SetSize((800, 600))
+        
+        self.SetAppName("pycrust")
+        confDir = wx.StandardPaths.Get().GetUserDataDir()
+        if not os.path.exists(confDir):
+            os.mkdir(confDir)
+        fileName = os.path.join(confDir, 'config')
+        self.config = wx.FileConfig(localFilename=fileName)
+        self.config.SetRecordDefaults(True)
+        
+        self.frame = py.crust.CrustFrame(config=self.config, dataDir=confDir)
+##        self.frame.startupFileName = os.path.join(confDir,'pycrust_startup')
+##        self.frame.historyFileName = os.path.join(confDir,'pycrust_history')
         self.frame.Show()
         self.SetTopWindow(self.frame)
         return True
-
+    
+    
 '''
 The main() function needs to handle being imported, such as with the
 pycrust script that wxPython installs:
index c800dc4d9c3e7cc2dc021b2055a999c609da90ad..2af5143ecdbb3207ff72ab0a8601b1d2e778c263 100644 (file)
@@ -17,14 +17,21 @@ class App(wx.App):
     """PyShell standalone application."""
 
     def OnInit(self):
+        import os
         import wx
         from wx import py
-        wx.InitAllImageHandlers()
-        self.frame = py.shell.ShellFrame()
-        self.frame.SetSize((750, 525))
+
+        self.SetAppName("pyshell")
+        confDir = wx.StandardPaths.Get().GetUserDataDir()
+        if not os.path.exists(confDir):
+            os.mkdir(confDir)
+        fileName = os.path.join(confDir, 'config')
+        self.config = wx.FileConfig(localFilename=fileName)
+        self.config.SetRecordDefaults(True)
+
+        self.frame = py.shell.ShellFrame(config=self.config, dataDir=confDir)
         self.frame.Show()
         self.SetTopWindow(self.frame)
-        self.frame.shell.SetFocus()
         return True
 
 '''
index 2a26da1c5c01d254f72f9c827bb042d2f5a2b0de..cd78c8c907e7f862b09338dc695d5616b93b9cf3 100644 (file)
@@ -8,6 +8,7 @@ import wx
 
 import os
 import pprint
+import re
 import sys
 
 import dispatcher
@@ -23,55 +24,95 @@ class Crust(wx.SplitterWindow):
 
     name = 'Crust'
     revision = __revision__
+    sashoffset = 300
 
-    def __init__(self, parent, id=-1, pos=wx.DefaultPosition, 
-                 size=wx.DefaultSize, style=wx.SP_3D,
+    def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=wx.SP_3D|wx.SP_LIVE_UPDATE,
                  name='Crust Window', rootObject=None, rootLabel=None,
-                 rootIsNamespace=True, intro='', locals=None, 
-                 InterpClass=None, *args, **kwds):
+                 rootIsNamespace=True, intro='', locals=None,
+                 InterpClass=None,
+                 startupScript=None, execStartupScript=True,
+                 *args, **kwds):
         """Create Crust instance."""
         wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name)
-        self.shell = Shell(parent=self, introText=intro, 
-                           locals=locals, InterpClass=InterpClass, 
+        self.shell = Shell(parent=self, introText=intro,
+                           locals=locals, InterpClass=InterpClass,
+                           startupScript=startupScript,
+                           execStartupScript=execStartupScript,
                            *args, **kwds)
         self.editor = self.shell
         if rootObject is None:
             rootObject = self.shell.interp.locals
         self.notebook = wx.Notebook(parent=self, id=-1)
         self.shell.interp.locals['notebook'] = self.notebook
-        self.filling = Filling(parent=self.notebook, 
-                               rootObject=rootObject, 
-                               rootLabel=rootLabel, 
+        self.filling = Filling(parent=self.notebook,
+                               rootObject=rootObject,
+                               rootLabel=rootLabel,
                                rootIsNamespace=rootIsNamespace)
         # Add 'filling' to the interpreter's locals.
         self.shell.interp.locals['filling'] = self.filling
         self.notebook.AddPage(page=self.filling, text='Namespace', select=True)
+        
         self.display = Display(parent=self.notebook)
         self.notebook.AddPage(page=self.display, text='Display')
         # Add 'pp' (pretty print) to the interpreter's locals.
         self.shell.interp.locals['pp'] = self.display.setItem
+        self.display.nbTab = self.notebook.GetPageCount()-1
+        
         self.calltip = Calltip(parent=self.notebook)
         self.notebook.AddPage(page=self.calltip, text='Calltip')
+        
         self.sessionlisting = SessionListing(parent=self.notebook)
         self.notebook.AddPage(page=self.sessionlisting, text='Session')
+        
         self.dispatcherlisting = DispatcherListing(parent=self.notebook)
         self.notebook.AddPage(page=self.dispatcherlisting, text='Dispatcher')
-##         from wxd import wx_
-##         self.wxdocs = Filling(parent=self.notebook, 
-##                               rootObject=wx_,
-##                               rootLabel='wx', 
-##                               rootIsNamespace=False,
-##                               static=True)
-##         self.notebook.AddPage(page=self.wxdocs, text='wxPython Docs')
-##         from wxd import stc_
-##         self.stcdocs = Filling(parent=self.notebook, 
-##                                rootObject=stc_.StyledTextCtrl,
-##                                rootLabel='StyledTextCtrl', 
-##                                rootIsNamespace=False,
-##                                static=True)
-##         self.notebook.AddPage(page=self.stcdocs, text='StyledTextCtrl Docs')
-        self.SplitHorizontally(self.shell, self.notebook, 300)
-        self.SetMinimumPaneSize(1)
+        
+        self.SplitHorizontally(self.shell, self.notebook, -self.sashoffset)
+        self.SetMinimumPaneSize(100)
+
+        self.Bind(wx.EVT_SIZE, self.SplitterOnSize)
+        self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged)
+
+    
+    def OnChanged(self, event):
+        """update sash offset from the bottom of the window"""
+        self.sashoffset = self.GetSize().height - event.GetSashPosition()
+        event.Skip()
+        
+
+    # Make the splitter expand the top window when resized
+    def SplitterOnSize(self, event):
+        splitter = event.GetEventObject()
+        sz = splitter.GetSize()
+        splitter.SetSashPosition(sz.height - self.sashoffset, True)
+        event.Skip()
+
+
+    def LoadSettings(self, config):
+        self.shell.LoadSettings(config)
+        self.filling.LoadSettings(config)
+
+        pos = config.ReadInt('Sash/CrustPos', 400)
+        wx.CallAfter(self.SetSashPosition, pos)
+        def _updateSashPosValue():
+            sz = self.GetSize()
+            self.sashoffset = sz.height - self.GetSashPosition()
+        wx.CallAfter(_updateSashPosValue)
+        zoom = config.ReadInt('View/Zoom/Display', -99)
+        if zoom != -99:
+            self.display.SetZoom(zoom)
+
+
+    def SaveSettings(self, config):
+        self.shell.SaveSettings(config)
+        self.filling.SaveSettings(config)
+
+        config.WriteInt('Sash/CrustPos', self.GetSashPosition())
+        config.WriteInt('View/Zoom/Display', self.display.GetZoom())
+        
+
+           
 
 
 class Display(editwindow.EditWindow):
@@ -105,15 +146,20 @@ class Display(editwindow.EditWindow):
         """Set item to pretty print in the notebook Display tab."""
         self.item = item
         self.Refresh()
+        if self.GetParent().GetSelection() != self.nbTab:
+            focus = wx.Window.FindFocus()
+            self.GetParent().SetSelection(self.nbTab)
+            wx.CallAfter(focus.SetFocus)
+            
 
-
+# TODO: Switch this to a editwindow.EditWindow
 class Calltip(wx.TextCtrl):
     """Text control containing the most recent shell calltip."""
 
     def __init__(self, parent=None, id=-1):
         style = (wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2)
         wx.TextCtrl.__init__(self, parent, id, style=style)
-        self.SetBackgroundColour(wx.Colour(255, 255, 232))
+        self.SetBackgroundColour(wx.Colour(255, 255, 208))
         dispatcher.connect(receiver=self.display, signal='Shell.calltip')
 
     def display(self, calltip):
@@ -123,6 +169,7 @@ class Calltip(wx.TextCtrl):
         self.AppendText(calltip)
 
 
+# TODO: Switch this to a editwindow.EditWindow
 class SessionListing(wx.TextCtrl):
     """Text control containing all commands for session."""
 
@@ -161,44 +208,58 @@ class DispatcherListing(wx.TextCtrl):
         self.AppendText(text + '\n')
 
 
-class CrustFrame(frame.Frame):
+
+class CrustFrame(frame.Frame, frame.ShellFrameMixin):
     """Frame containing all the PyCrust components."""
 
     name = 'CrustFrame'
     revision = __revision__
 
+
     def __init__(self, parent=None, id=-1, title='PyCrust',
                  pos=wx.DefaultPosition, size=wx.DefaultSize,
                  style=wx.DEFAULT_FRAME_STYLE,
                  rootObject=None, rootLabel=None, rootIsNamespace=True,
-                 locals=None, InterpClass=None, *args, **kwds):
+                 locals=None, InterpClass=None,
+                 config=None, dataDir=None,
+                 *args, **kwds):
         """Create CrustFrame instance."""
         frame.Frame.__init__(self, parent, id, title, pos, size, style)
+        frame.ShellFrameMixin.__init__(self, config, dataDir)
+        
+        if size == wx.DefaultSize:
+            self.SetSize((800, 600))
+
         intro = 'PyCrust %s - The Flakiest Python Shell' % VERSION
-        intro += '\nSponsored by Orbtech - '
-        intro += 'Your source for Python programming expertise.'
         self.SetStatusText(intro.replace('\n', ', '))
         self.crust = Crust(parent=self, intro=intro,
                            rootObject=rootObject,
                            rootLabel=rootLabel,
                            rootIsNamespace=rootIsNamespace,
                            locals=locals,
-                           InterpClass=InterpClass, *args, **kwds)
+                           InterpClass=InterpClass,
+                           startupScript=self.startupScript,
+                           execStartupScript=self.execStartupScript,
+                           *args, **kwds)
         self.shell = self.crust.shell
+
         # Override the filling so that status messages go to the status bar.
         self.crust.filling.tree.setStatusText = self.SetStatusText
+        
         # Override the shell so that status messages go to the status bar.
         self.shell.setStatusText = self.SetStatusText
-        # Fix a problem with the sash shrinking to nothing.
-        self.crust.filling.SetSashPosition(200)
-        # Set focus to the shell editor.
+        
         self.shell.SetFocus()
+        self.LoadSettings()
+
 
     def OnClose(self, event):
         """Event handler for closing."""
+        self.SaveSettings()
         self.crust.shell.destroy()
         self.Destroy()
 
+
     def OnAbout(self, event):
         """Display an About window."""
         title = 'About PyCrust'
@@ -211,8 +272,33 @@ class CrustFrame(frame.Frame):
                'Platform: %s\n' % sys.platform + \
                'Python Version: %s\n' % sys.version.split()[0] + \
                'wxPython Version: %s\n' % wx.VERSION_STRING + \
-               ('\t(%s)\n' % ", ".join(wx.PlatformInfo[1:])) 
+               ('\t(%s)\n' % ", ".join(wx.PlatformInfo[1:]))
         dialog = wx.MessageDialog(self, text, title,
                                   wx.OK | wx.ICON_INFORMATION)
         dialog.ShowModal()
         dialog.Destroy()
+
+
+
+    def LoadSettings(self):
+        if self.config is not None:
+            frame.ShellFrameMixin.LoadSettings(self)
+            frame.Frame.LoadSettings(self, self.config)
+            self.crust.LoadSettings(self.config)
+
+
+    def SaveSettings(self):
+        if self.config is not None:
+            frame.ShellFrameMixin.SaveSettings(self)
+            if self.autoSaveSettings:
+                frame.Frame.SaveSettings(self, self.config)
+                self.crust.SaveSettings(self.config)
+
+
+    def DoSaveSettings(self):
+        if self.config is not None:
+            self.SaveSettings()
+            self.config.Flush()
+        
+
+
index be2f521b9c2c5addcb62f7c42fe07da972463f21..8dc8981798ee788fb12aaf4bbb7a5b881c955811 100644 (file)
@@ -30,7 +30,7 @@ class EditorFrame(frame.Frame):
         self._defaultText = title + ' - the tastiest Python editor.'
         self._statusText = self._defaultText
         self.SetStatusText(self._statusText)
-        wx.EVT_IDLE(self, self.OnIdle)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
         self._setup()
         if filename:
             self.bufferCreate(filename)
@@ -137,7 +137,7 @@ class EditorFrame(frame.Frame):
         self.bufferDestroy()
         buffer = Buffer()
         self.panel = panel = wx.Panel(parent=self, id=-1)
-        wx.EVT_ERASE_BACKGROUND(panel, lambda x: x)        
+        panel.Bind (wx.EVT_ERASE_BACKGROUND, lambda x: x)        
         editor = Editor(parent=panel)
         panel.editor = editor
         sizer = wx.BoxSizer(wx.VERTICAL)
@@ -318,7 +318,7 @@ class EditorNotebookFrame(EditorFrame):
         """Create new buffer."""
         buffer = Buffer()
         panel = wx.Panel(parent=self.notebook, id=-1)
-        wx.EVT_ERASE_BACKGROUND(panel, lambda x: x)        
+        panel.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: x)        
         editor = Editor(parent=panel)
         panel.editor = editor
         sizer = wx.BoxSizer(wx.VERTICAL)
@@ -366,11 +366,9 @@ class EditorNotebook(wx.Notebook):
     def __init__(self, parent):
         """Create EditorNotebook instance."""
         wx.Notebook.__init__(self, parent, id=-1, style=wx.CLIP_CHILDREN)
-        wx.EVT_NOTEBOOK_PAGE_CHANGING(self, self.GetId(),
-                                      self.OnPageChanging)
-        wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(),
-                                     self.OnPageChanged)
-        wx.EVT_IDLE(self, self.OnIdle)
+        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging, id=self.GetId())
+        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged, id=self.GetId())
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
 
     def OnIdle(self, event):
         """Event handler for idle time."""
@@ -552,7 +550,7 @@ class EditorShellNotebook(wx.Notebook):
             self.AddPage(page=self.editor.window, text='Editor', select=True)
             self.AddPage(page=self.shell, text='Shell')
         self.editor.setFocus()
-        wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self.GetId(), self.OnPageChanged)
+        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged, id=self.GetId())
 
     def OnPageChanged(self, event):
         """Page changed event handler."""
@@ -583,8 +581,8 @@ class Editor:
         self.id = self.window.GetId()
         self.buffer = None
         # Assign handlers for keyboard events.
-        wx.EVT_CHAR(self.window, self.OnChar)
-        wx.EVT_KEY_DOWN(self.window, self.OnKeyDown)
+        self.window.Bind(wx.EVT_CHAR, self.OnChar)
+        self.window.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
 
     def _setBuffer(self, buffer, text):
         """Set the editor to a buffer.  Private callback called by buffer."""
index 90aebf59538a5ac8ef164bff8de51e37e303573f..78b75f5ccf3d5076eda48891ef50bdf9109a2afe 100644 (file)
@@ -92,11 +92,10 @@ class EditWindow(stc.StyledTextCtrl):
             size = 0
         self.SetZoom(size)
 
-    def __config(self):
-        """Configure shell based on user preferences."""
-        self.SetMarginType(1, stc.STC_MARGIN_NUMBER)
-        self.SetMarginWidth(1, 40)
 
+    def __config(self):
+        self.setDisplayLineNumbers(False)
+        
         self.SetLexer(stc.STC_LEX_PYTHON)
         self.SetKeyWords(0, ' '.join(keyword.kwlist))
 
@@ -116,6 +115,7 @@ class EditWindow(stc.StyledTextCtrl):
         self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
         # Do we want to automatically pop up command argument help?
         self.autoCallTip = True
+        self.callTipInsert = True
         self.CallTipSetBackground(FACES['calltipbg'])
         self.CallTipSetForeground(FACES['calltipfg'])
         self.SetWrapMode(False)
@@ -124,6 +124,16 @@ class EditWindow(stc.StyledTextCtrl):
         except AttributeError:
             pass
 
+    def setDisplayLineNumbers(self, state):
+        self.lineNumbers = state
+        if state:
+            self.SetMarginType(1, stc.STC_MARGIN_NUMBER)
+            self.SetMarginWidth(1, 40)
+        else:
+            # Leave a small margin so the feature hidden lines marker can be seen
+            self.SetMarginType(1, 0)
+            self.SetMarginWidth(1, 10)
+        
     def setStyles(self, faces):
         """Configure font size, typeface and color for lexer."""
 
@@ -136,7 +146,7 @@ class EditWindow(stc.StyledTextCtrl):
 
         # Built in styles
         self.StyleSetSpec(stc.STC_STYLE_LINENUMBER,
-                          "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % faces)
+                          "back:#C0C0C0,face:%(mono)s,size:%(lnsize)d" % FACES)
         self.StyleSetSpec(stc.STC_STYLE_CONTROLCHAR,
                           "face:%(mono)s" % faces)
         self.StyleSetSpec(stc.STC_STYLE_BRACELIGHT,
@@ -223,3 +233,65 @@ class EditWindow(stc.StyledTextCtrl):
     def CanPaste(self):
         """Return True if pasting should succeed."""
         return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
+
+
+    def GetLastPosition(self):
+        return self.GetLength()
+
+    def GetRange(self, start, end):
+        return self.GetTextRange(start, end)
+
+    def GetSelection(self):
+        return self.GetAnchor(), self.GetCurrentPos()
+
+    def SetSelection(self, start, end):
+        self.SetSelectionStart(start)
+        self.SetSelectionEnd(end)
+
+    def ShowPosition(self, pos):
+        line = self.LineFromPosition(pos)
+        #self.EnsureVisible(line)
+        self.GotoLine(line)
+
+    def DoFindNext(self, findData, findDlg=None):
+        backward = not (findData.GetFlags() & wx.FR_DOWN)
+        matchcase = findData.GetFlags() & wx.FR_MATCHCASE
+        end = self.GetLastPosition()
+        textstring = self.GetRange(0, end)
+        findstring = findData.GetFindString()
+        if not matchcase:
+            textstring.lower()
+            findstring.lower()
+        if backward:
+            start = self.GetSelection()[0]
+            loc = textstring.rfind(findstring, 0, start)
+        else:
+            start = self.GetSelection()[1]
+            loc = textstring.find(findstring, start)
+
+        # if it wasn't found then restart at begining
+        if loc == -1 and start != 0:
+            if backward:
+                start = end
+                loc = textstring.rfind(findstring, 0, start)
+            else:
+                start = 0
+                loc = textstring.find(findstring, start)
+
+        # was it still not found?
+        if loc == -1:
+            dlg = wx.MessageDialog(self, 'Unable to find the search text.',
+                          'Not found!',
+                          wx.OK | wx.ICON_INFORMATION)
+            dlg.ShowModal()
+            dlg.Destroy()
+        if findDlg:
+            if loc == -1:
+                wx.CallAfter(findDlg.SetFocus)
+                return
+            else:
+                findDlg.Close()
+
+        # show and select the found text
+        self.ShowPosition(loc)
+        self.SetSelection(loc, loc + len(findstring))
index f34bbf0153c307dd47c7592c2cdf6ee2d7aea532..56b6c7cf418246c021ac282d9473113efcd8b15f 100644 (file)
@@ -61,10 +61,10 @@ class FillingTree(wx.TreeCtrl):
         rootData = wx.TreeItemData(rootObject)
         self.item = self.root = self.AddRoot(rootLabel, -1, -1, rootData)
         self.SetItemHasChildren(self.root, self.objHasChildren(rootObject))
-        wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
-        wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
-        wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
-        wx.EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
+        self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpanding, id=self.GetId())
+        self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=self.GetId())
+        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=self.GetId())
+        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnItemActivated, id=self.GetId())
         if not static:
             dispatcher.connect(receiver=self.push, signal='Interpreter.push')
 
@@ -277,24 +277,49 @@ class Filling(wx.SplitterWindow):
     revision = __revision__
 
     def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=wx.SP_3D,
+                 size=wx.DefaultSize, style=wx.SP_3D|wx.SP_LIVE_UPDATE,
                  name='Filling Window', rootObject=None,
                  rootLabel=None, rootIsNamespace=False, static=False):
         """Create a Filling instance."""
         wx.SplitterWindow.__init__(self, parent, id, pos, size, style, name)
+
         self.tree = FillingTree(parent=self, rootObject=rootObject,
                                 rootLabel=rootLabel,
                                 rootIsNamespace=rootIsNamespace,
                                 static=static)
         self.text = FillingText(parent=self, static=static)
-        self.SplitVertically(self.tree, self.text, 130)
+        
+        wx.FutureCall(1, self.SplitVertically, self.tree, self.text, 200)
+        
         self.SetMinimumPaneSize(1)
+
         # Override the filling so that descriptions go to FillingText.
         self.tree.setText = self.text.SetText
+
         # Display the root item.
-##        self.tree.SelectItem(self.tree.root)
+        self.tree.SelectItem(self.tree.root)
         self.tree.display()
 
+        self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnChanged)
+
+    def OnChanged(self, event):
+        #this is important: do not evaluate this event=> otherwise, splitterwindow behaves strange
+        #event.Skip()
+        pass
+
+
+    def LoadSettings(self, config):
+        pos = config.ReadInt('Sash/FillingPos', 200)
+        wx.FutureCall(250, self.SetSashPosition, pos)
+        zoom = config.ReadInt('View/Zoom/Filling', -99)
+        if zoom != -99:
+            self.text.SetZoom(zoom)
+
+    def SaveSettings(self, config):
+        config.WriteInt('Sash/FillingPos', self.GetSashPosition())
+        config.WriteInt('View/Zoom/Filling', self.text.GetZoom())
+
+
 
 class FillingFrame(wx.Frame):
     """Frame containing the namespace tree component."""
index 600f2bd1b9610792402ecfb50d32fd89ee33147f..e716fb7492a922a3a736af23c8cffd00e148d369 100644 (file)
@@ -5,8 +5,9 @@ __cvsid__ = "$Id$"
 __revision__ = "$Revision$"[11:-2]
 
 import wx
+import os
 from version import VERSION
-
+import editwindow
 
 ID_NEW = wx.ID_NEW
 ID_OPEN = wx.ID_OPEN
@@ -23,7 +24,9 @@ ID_COPY = wx.ID_COPY
 ID_PASTE = wx.ID_PASTE
 ID_CLEAR = wx.ID_CLEAR
 ID_SELECTALL = wx.ID_SELECTALL
+ID_EMPTYBUFFER = wx.NewId()
 ID_ABOUT = wx.ID_ABOUT
+ID_HELP = wx.NewId()
 ID_AUTOCOMP = wx.NewId()
 ID_AUTOCOMP_SHOW = wx.NewId()
 ID_AUTOCOMP_MAGIC = wx.NewId()
@@ -31,11 +34,25 @@ ID_AUTOCOMP_SINGLE = wx.NewId()
 ID_AUTOCOMP_DOUBLE = wx.NewId()
 ID_CALLTIPS = wx.NewId()
 ID_CALLTIPS_SHOW = wx.NewId()
+ID_CALLTIPS_INSERT = wx.NewId()
 ID_COPY_PLUS = wx.NewId()
 ID_NAMESPACE = wx.NewId()
 ID_PASTE_PLUS = wx.NewId()
 ID_WRAP = wx.NewId()
+ID_TOGGLE_MAXIMIZE = wx.NewId()
 ID_USEAA = wx.NewId()
+ID_SHOW_LINENUMBERS = wx.NewId()
+ID_AUTO_SAVESETTINGS = wx.NewId()
+ID_SAVEHISTORY = wx.NewId()
+ID_SAVESETTINGS = wx.NewId()
+ID_DELSETTINGSFILE = wx.NewId()
+ID_EDITSTARTUPSCRIPT = wx.NewId()
+ID_EXECSTARTUPSCRIPT = wx.NewId()
+ID_STARTUP = wx.NewId()
+ID_SETTINGS = wx.NewId()
+ID_FIND = wx.ID_FIND
+ID_FINDNEXT = wx.NewId()
+
 
 
 class Frame(wx.Frame):
@@ -53,13 +70,28 @@ class Frame(wx.Frame):
         import images
         self.SetIcon(images.getPyIcon())
         self.__createMenus()
-        wx.EVT_CLOSE(self, self.OnClose)
+
+        self.iconized = False
+        self.findDlg = None
+        self.findData = wx.FindReplaceData()
+        self.findData.SetFlags(wx.FR_DOWN)
+
+        self.Bind(wx.EVT_CLOSE, self.OnClose)
+        self.Bind(wx.EVT_ICONIZE, self.OnIconize)
+
+
+    def OnIconize(self, event):
+        """Event handler for Iconize."""
+        self.iconized = event.Iconized()
+
 
     def OnClose(self, event):
         """Event handler for closing."""
         self.Destroy()
 
+
     def __createMenus(self):
+        # File Menu
         m = self.fileMenu = wx.Menu()
         m.Append(ID_NEW, '&New \tCtrl+N',
                  'New file')
@@ -73,17 +105,18 @@ class Frame(wx.Frame):
         m.AppendSeparator()
         m.Append(ID_SAVE, '&Save... \tCtrl+S',
                  'Save file')
-        m.Append(ID_SAVEAS, 'Save &As \tShift+Ctrl+S',
+        m.Append(ID_SAVEAS, 'Save &As \tCtrl+Shift+S',
                  'Save file with new name')
         m.AppendSeparator()
         m.Append(ID_PRINT, '&Print... \tCtrl+P',
                  'Print file')
         m.AppendSeparator()
-        m.Append(ID_NAMESPACE, '&Update Namespace \tShift+Ctrl+N',
+        m.Append(ID_NAMESPACE, '&Update Namespace \tCtrl+Shift+N',
                  'Update namespace for autocompletion and calltips')
         m.AppendSeparator()
-        m.Append(ID_EXIT, 'E&xit', 'Exit Program')
+        m.Append(ID_EXIT, 'E&xit\tCtrl+Q', 'Exit Program')
 
+        # Edit
         m = self.editMenu = wx.Menu()
         m.Append(ID_UNDO, '&Undo \tCtrl+Z',
                  'Undo the last action')
@@ -94,105 +127,175 @@ class Frame(wx.Frame):
                  'Cut the selection')
         m.Append(ID_COPY, '&Copy \tCtrl+C',
                  'Copy the selection')
-        m.Append(ID_COPY_PLUS, 'Cop&y Plus \tShift+Ctrl+C',
+        m.Append(ID_COPY_PLUS, 'Cop&y Plus \tCtrl+Shift+C',
                  'Copy the selection - retaining prompts')
         m.Append(ID_PASTE, '&Paste \tCtrl+V', 'Paste from clipboard')
-        m.Append(ID_PASTE_PLUS, 'Past&e Plus \tShift+Ctrl+V',
+        m.Append(ID_PASTE_PLUS, 'Past&e Plus \tCtrl+Shift+V',
                  'Paste and run commands')
         m.AppendSeparator()
         m.Append(ID_CLEAR, 'Cle&ar',
                  'Delete the selection')
         m.Append(ID_SELECTALL, 'Select A&ll \tCtrl+A',
                  'Select all text')
+        m.AppendSeparator()
+        m.Append(ID_EMPTYBUFFER, 'E&mpty Buffer',
+                 'Delete all the contents of the edit buffer')
+        m.Append(ID_FIND, '&Find Text \tCtrl+F',
+                 'Search for text in the edit buffer')
+        m.Append(ID_FINDNEXT, 'Find &Next \tF3',
+                 'Find next/previous instance of the search text')
+
+        # View
+        m = self.viewMenu = wx.Menu()
+        m.Append(ID_WRAP, '&Wrap Lines\tCtrl+Shift+W',
+                 'Wrap lines at right edge', wx.ITEM_CHECK)
+        m.Append(ID_SHOW_LINENUMBERS, '&Show Line Numbers\tCtrl+Shift+L', 'Show Line Numbers', wx.ITEM_CHECK)
+        m.Append(ID_TOGGLE_MAXIMIZE, '&Toggle Maximize\tF11', 'Maximize/Restore Application')
 
+        # Options
         m = self.autocompMenu = wx.Menu()
-        m.Append(ID_AUTOCOMP_SHOW, 'Show Auto Completion',
+        m.Append(ID_AUTOCOMP_SHOW, 'Show &Auto Completion\tCtrl+Shift+A',
                  'Show auto completion list', wx.ITEM_CHECK)
-        m.Append(ID_AUTOCOMP_MAGIC, 'Include Magic Attributes',
+        m.Append(ID_AUTOCOMP_MAGIC, 'Include &Magic Attributes\tCtrl+Shift+M',
                  'Include attributes visible to __getattr__ and __setattr__',
                  wx.ITEM_CHECK)
-        m.Append(ID_AUTOCOMP_SINGLE, 'Include Single Underscores',
+        m.Append(ID_AUTOCOMP_SINGLE, 'Include Single &Underscores\tCtrl+Shift+U',
                  'Include attibutes prefixed by a single underscore', wx.ITEM_CHECK)
-        m.Append(ID_AUTOCOMP_DOUBLE, 'Include Double Underscores',
+        m.Append(ID_AUTOCOMP_DOUBLE, 'Include &Double Underscores\tCtrl+Shift+D',
                  'Include attibutes prefixed by a double underscore', wx.ITEM_CHECK)
-
         m = self.calltipsMenu = wx.Menu()
-        m.Append(ID_CALLTIPS_SHOW, 'Show Call Tips',
+        m.Append(ID_CALLTIPS_SHOW, 'Show Call &Tips\tCtrl+Shift+T',
                  'Show call tips with argument signature and docstring', wx.ITEM_CHECK)
+        m.Append(ID_CALLTIPS_INSERT, '&Insert Call Tips\tCtrl+Shift+I',
+                 '&Insert Call Tips', wx.ITEM_CHECK)
 
         m = self.optionsMenu = wx.Menu()
         m.AppendMenu(ID_AUTOCOMP, '&Auto Completion', self.autocompMenu,
                      'Auto Completion Options')
         m.AppendMenu(ID_CALLTIPS, '&Call Tips', self.calltipsMenu,
                      'Call Tip Options')
-        m.Append(ID_WRAP, '&Wrap Lines',
-                 'Wrap lines at right edge', wx.ITEM_CHECK)
+                
         if wx.Platform == "__WXMAC__":
-            m.Append(ID_USEAA, '&Use AntiAliasing',
+            m.Append(ID_USEAA, '&Use AntiAliasing\tCtrl+Shift+A',
                      'Use anti-aliased fonts', wx.ITEM_CHECK)
+            
+        m.AppendSeparator()
+        m.Append(ID_SAVEHISTORY, '&Save History\tAlt+Ctrl+A', 'Automatically save history on close', wx.ITEM_CHECK)
+        self.startupMenu = wx.Menu()
+        self.startupMenu.Append(ID_EXECSTARTUPSCRIPT, 'E&xecute Startup Script\tAlt+Ctrl+X', 'Execute Startup Script', wx.ITEM_CHECK)
+        self.startupMenu.Append(ID_EDITSTARTUPSCRIPT, '&Edit Startup Script\tAlt+Ctrl+E', 'Edit Startup Script')
+        m.AppendMenu(ID_STARTUP, '&Startup', self.startupMenu, 'Startup Options')
+
+        self.settingsMenu = wx.Menu()
+        self.settingsMenu.Append(ID_AUTO_SAVESETTINGS, '&Auto Save Settings\tAlt+Ctrl+A', 'Automatically save settings on close', wx.ITEM_CHECK)
+        self.settingsMenu.Append(ID_SAVESETTINGS, '&Save Settings\tAlt+Ctrl+S', 'Save settings now')
+        self.settingsMenu.Append(ID_DELSETTINGSFILE, '&Revert to default\tAlt+Ctrl+R', 'Revert to the default settings')
+        m.AppendMenu(ID_SETTINGS, '&Settings', self.settingsMenu, 'Settings Options')           
 
         m = self.helpMenu = wx.Menu()
+        m.Append(ID_HELP, '&Help\tF1', 'Help!')
         m.AppendSeparator()
-        m.Append(ID_ABOUT, '&About...', 'About this program')
+        m.Append(ID_ABOUT, '&About...\tAlt+A', 'About this program')
 
         b = self.menuBar = wx.MenuBar()
         b.Append(self.fileMenu, '&File')
         b.Append(self.editMenu, '&Edit')
+        b.Append(self.viewMenu, '&View')
         b.Append(self.optionsMenu, '&Options')
         b.Append(self.helpMenu, '&Help')
         self.SetMenuBar(b)
 
-        wx.EVT_MENU(self, ID_NEW, self.OnFileNew)
-        wx.EVT_MENU(self, ID_OPEN, self.OnFileOpen)
-        wx.EVT_MENU(self, ID_REVERT, self.OnFileRevert)
-        wx.EVT_MENU(self, ID_CLOSE, self.OnFileClose)
-        wx.EVT_MENU(self, ID_SAVE, self.OnFileSave)
-        wx.EVT_MENU(self, ID_SAVEAS, self.OnFileSaveAs)
-        wx.EVT_MENU(self, ID_NAMESPACE, self.OnFileUpdateNamespace)
-        wx.EVT_MENU(self, ID_PRINT, self.OnFilePrint)
-        wx.EVT_MENU(self, ID_EXIT, self.OnExit)
-        wx.EVT_MENU(self, ID_UNDO, self.OnUndo)
-        wx.EVT_MENU(self, ID_REDO, self.OnRedo)
-        wx.EVT_MENU(self, ID_CUT, self.OnCut)
-        wx.EVT_MENU(self, ID_COPY, self.OnCopy)
-        wx.EVT_MENU(self, ID_COPY_PLUS, self.OnCopyPlus)
-        wx.EVT_MENU(self, ID_PASTE, self.OnPaste)
-        wx.EVT_MENU(self, ID_PASTE_PLUS, self.OnPastePlus)
-        wx.EVT_MENU(self, ID_CLEAR, self.OnClear)
-        wx.EVT_MENU(self, ID_SELECTALL, self.OnSelectAll)
-        wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
-        wx.EVT_MENU(self, ID_AUTOCOMP_SHOW, self.OnAutoCompleteShow)
-        wx.EVT_MENU(self, ID_AUTOCOMP_MAGIC, self.OnAutoCompleteMagic)
-        wx.EVT_MENU(self, ID_AUTOCOMP_SINGLE, self.OnAutoCompleteSingle)
-        wx.EVT_MENU(self, ID_AUTOCOMP_DOUBLE, self.OnAutoCompleteDouble)
-        wx.EVT_MENU(self, ID_CALLTIPS_SHOW, self.OnCallTipsShow)
-        wx.EVT_MENU(self, ID_WRAP, self.OnWrap)
-        wx.EVT_MENU(self, ID_USEAA, self.OnUseAA)
-
-        wx.EVT_UPDATE_UI(self, ID_NEW, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_OPEN, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_REVERT, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_CLOSE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_SAVE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_SAVEAS, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_NAMESPACE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_PRINT, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_UNDO, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_REDO, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_CUT, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_COPY, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_COPY_PLUS, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_PASTE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_PASTE_PLUS, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_CLEAR, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_SELECTALL, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SHOW, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_MAGIC, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_SINGLE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_AUTOCOMP_DOUBLE, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_CALLTIPS_SHOW, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_WRAP, self.OnUpdateMenu)
-        wx.EVT_UPDATE_UI(self, ID_USEAA, self.OnUpdateMenu)
+        self.Bind(wx.EVT_MENU, self.OnFileNew, id=ID_NEW)
+        self.Bind(wx.EVT_MENU, self.OnFileOpen, id=ID_OPEN)
+        self.Bind(wx.EVT_MENU, self.OnFileRevert, id=ID_REVERT)
+        self.Bind(wx.EVT_MENU, self.OnFileClose, id=ID_CLOSE)
+        self.Bind(wx.EVT_MENU, self.OnFileSave, id=ID_SAVE)
+        self.Bind(wx.EVT_MENU, self.OnFileSaveAs, id=ID_SAVEAS)
+        self.Bind(wx.EVT_MENU, self.OnFileUpdateNamespace, id=ID_NAMESPACE)
+        self.Bind(wx.EVT_MENU, self.OnFilePrint, id=ID_PRINT)
+        self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)
+        self.Bind(wx.EVT_MENU, self.OnUndo, id=ID_UNDO)
+        self.Bind(wx.EVT_MENU, self.OnRedo, id=ID_REDO)
+        self.Bind(wx.EVT_MENU, self.OnCut, id=ID_CUT)
+        self.Bind(wx.EVT_MENU, self.OnCopy, id=ID_COPY)
+        self.Bind(wx.EVT_MENU, self.OnCopyPlus, id=ID_COPY_PLUS)
+        self.Bind(wx.EVT_MENU, self.OnPaste, id=ID_PASTE)
+        self.Bind(wx.EVT_MENU, self.OnPastePlus, id=ID_PASTE_PLUS)
+        self.Bind(wx.EVT_MENU, self.OnClear, id=ID_CLEAR)
+        self.Bind(wx.EVT_MENU, self.OnSelectAll, id=ID_SELECTALL)
+        self.Bind(wx.EVT_MENU, self.OnEmptyBuffer, id=ID_EMPTYBUFFER)
+        self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT)
+        self.Bind(wx.EVT_MENU, self.OnHelp, id=ID_HELP)
+        self.Bind(wx.EVT_MENU, self.OnAutoCompleteShow, id=ID_AUTOCOMP_SHOW)
+        self.Bind(wx.EVT_MENU, self.OnAutoCompleteMagic, id=ID_AUTOCOMP_MAGIC)
+        self.Bind(wx.EVT_MENU, self.OnAutoCompleteSingle, id=ID_AUTOCOMP_SINGLE)
+        self.Bind(wx.EVT_MENU, self.OnAutoCompleteDouble, id=ID_AUTOCOMP_DOUBLE)
+        self.Bind(wx.EVT_MENU, self.OnCallTipsShow, id=ID_CALLTIPS_SHOW)
+        self.Bind(wx.EVT_MENU, self.OnCallTipsInsert, id=ID_CALLTIPS_INSERT)
+        self.Bind(wx.EVT_MENU, self.OnWrap, id=ID_WRAP)
+        self.Bind(wx.EVT_MENU, self.OnUseAA, id=ID_USEAA)
+        self.Bind(wx.EVT_MENU, self.OnToggleMaximize, id=ID_TOGGLE_MAXIMIZE)
+        self.Bind(wx.EVT_MENU, self.OnShowLineNumbers, id=ID_SHOW_LINENUMBERS)
+        self.Bind(wx.EVT_MENU, self.OnAutoSaveSettings, id=ID_AUTO_SAVESETTINGS)
+        self.Bind(wx.EVT_MENU, self.OnSaveHistory, id=ID_SAVEHISTORY)
+        self.Bind(wx.EVT_MENU, self.OnSaveSettings, id=ID_SAVESETTINGS)
+        self.Bind(wx.EVT_MENU, self.OnDelSettingsFile, id=ID_DELSETTINGSFILE)
+        self.Bind(wx.EVT_MENU, self.OnEditStartupScript, id=ID_EDITSTARTUPSCRIPT)
+        self.Bind(wx.EVT_MENU, self.OnExecStartupScript, id=ID_EXECSTARTUPSCRIPT)
+        self.Bind(wx.EVT_MENU, self.OnFindText, id=ID_FIND)
+        self.Bind(wx.EVT_MENU, self.OnFindNext, id=ID_FINDNEXT)
+
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NEW)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_OPEN)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_REVERT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CLOSE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEAS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_NAMESPACE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PRINT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_UNDO)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_REDO)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CUT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_COPY)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_COPY_PLUS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PASTE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_PASTE_PLUS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CLEAR)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SELECTALL)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EMPTYBUFFER)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_SHOW)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_MAGIC)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_SINGLE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTOCOMP_DOUBLE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CALLTIPS_SHOW)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_CALLTIPS_INSERT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_WRAP)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_USEAA)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SHOW_LINENUMBERS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_AUTO_SAVESETTINGS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVESETTINGS)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_DELSETTINGSFILE)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EXECSTARTUPSCRIPT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_SAVEHISTORY)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_EDITSTARTUPSCRIPT)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FIND)
+        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateMenu, id=ID_FINDNEXT)
+        
+        self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
+        self.Bind(wx.EVT_FIND, self.OnFindNext)
+        self.Bind(wx.EVT_FIND_NEXT, self.OnFindNext)
+        self.Bind(wx.EVT_FIND_CLOSE, self.OnFindClose)
+        
+    
+
+    def OnShowLineNumbers(self, event):
+        win = wx.Window.FindFocus()
+        if hasattr(win, 'lineNumbers'):
+            win.lineNumbers = event.IsChecked()
+            win.setDisplayLineNumbers(win.lineNumbers)
+
+    def OnToggleMaximize(self, event):
+        self.Maximize(not self.IsMaximized())
 
     def OnFileNew(self, event):
         self.bufferNew()
@@ -222,39 +325,52 @@ class Frame(wx.Frame):
         self.Close(False)
 
     def OnUndo(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Undo()
 
     def OnRedo(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Redo()
 
     def OnCut(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Cut()
 
     def OnCopy(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Copy()
 
     def OnCopyPlus(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.CopyWithPrompts()
 
     def OnPaste(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Paste()
 
     def OnPastePlus(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.PasteAndRun()
 
     def OnClear(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.Clear()
+    
+    def OnEmptyBuffer(self, event):
+        win = wx.Window.FindFocus()
+        d = wx.MessageDialog(self,
+                             "Are you sure you want to clear the edit buffer,\n"
+                             "deleting all the text?",
+                             "Empty Buffer", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
+        answer = d.ShowModal()
+        d.Destroy()
+        if (answer == wx.ID_OK):
+            win.ClearAll()
+            if hasattr(win,'prompt'):
+                win.prompt()
 
     def OnSelectAll(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.SelectAll()
 
     def OnAbout(self, event):
@@ -266,38 +382,102 @@ class Frame(wx.Frame):
         dialog.ShowModal()
         dialog.Destroy()
 
+    def OnHelp(self, event):
+        """Display a Help window."""
+        title = 'Help'        
+        text = "Type 'shell.help()' in the shell window."
+        dialog = wx.MessageDialog(self, text, title,
+                                  wx.OK | wx.ICON_INFORMATION)
+        dialog.ShowModal()
+        dialog.Destroy()
+
     def OnAutoCompleteShow(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.autoComplete = event.IsChecked()
 
     def OnAutoCompleteMagic(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.autoCompleteIncludeMagic = event.IsChecked()
 
     def OnAutoCompleteSingle(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.autoCompleteIncludeSingle = event.IsChecked()
 
     def OnAutoCompleteDouble(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.autoCompleteIncludeDouble = event.IsChecked()
 
     def OnCallTipsShow(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.autoCallTip = event.IsChecked()
 
+    def OnCallTipsInsert(self, event):
+        win = wx.Window.FindFocus()
+        win.callTipInsert = event.IsChecked()
+
     def OnWrap(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.SetWrapMode(event.IsChecked())
+        wx.FutureCall(1, self.shell.EnsureCaretVisible)
 
     def OnUseAA(self, event):
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         win.SetUseAntiAliasing(event.IsChecked())
+
+    def OnSaveHistory(self, event):
+        self.saveHistory = event.IsChecked()
+
+    def OnAutoSaveSettings(self, event):
+        self.autoSaveSettings = event.IsChecked()
+
+    def OnSaveSettings(self, event):
+        self.DoSaveSettings()
+
+    def OnDelSettingsFile(self, event):
+        if self.config is not None:
+            d = wx.MessageDialog(
+                self, "Do you want to revert to the default settings?\n" + 
+                "A restart is needed for the change to take effect",
+                "Warning", wx.OK | wx.CANCEL | wx.ICON_QUESTION)
+            answer = d.ShowModal()
+            d.Destroy()
+            if (answer == wx.ID_OK):
+                self.config.DeleteAll()
+                self.LoadSettings()
+
+
+    def OnEditStartupScript(self, event):
+        if hasattr(self, 'EditStartupScript'):
+            self.EditStartupScript()
+            
+    def OnExecStartupScript(self, event):
+        self.execStartupScript = event.IsChecked()
+
+
+    def OnFindText(self, event):
+        if self.findDlg is not None:
+            return
+        win = wx.Window.FindFocus()
+        self.findDlg = wx.FindReplaceDialog(win, self.findData, "Find",
+                                            wx.FR_NOWHOLEWORD)
+        self.findDlg.Show()
         
+    def OnFindNext(self, event):
+        if isinstance(event, wx.FindDialogEvent):
+            win = self.findDlg.GetParent()
+        else:
+            win = wx.Window.FindFocus()
+        win.DoFindNext(self.findData, self.findDlg)
+
+    def OnFindClose(self, event):
+        self.findDlg.Destroy()
+        self.findDlg = None
+    
+
 
     def OnUpdateMenu(self, event):
         """Update menu items based on current status and context."""
-        win = wx.Window_FindFocus()
+        win = wx.Window.FindFocus()
         id = event.GetId()
         event.Enable(True)
         try:
@@ -341,6 +521,8 @@ class Frame(wx.Frame):
                 event.Enable(win.CanCut())
             elif id == ID_SELECTALL:
                 event.Enable(hasattr(win, 'SelectAll'))
+            elif id == ID_EMPTYBUFFER:
+                event.Enable(hasattr(win, 'ClearAll') and not win.GetReadOnly())
             elif id == ID_AUTOCOMP_SHOW:
                 event.Check(win.autoComplete)
             elif id == ID_AUTOCOMP_MAGIC:
@@ -351,12 +533,273 @@ class Frame(wx.Frame):
                 event.Check(win.autoCompleteIncludeDouble)
             elif id == ID_CALLTIPS_SHOW:
                 event.Check(win.autoCallTip)
+            elif id == ID_CALLTIPS_INSERT:
+                event.Check(win.callTipInsert)
             elif id == ID_WRAP:
                 event.Check(win.GetWrapMode())
             elif id == ID_USEAA:
                 event.Check(win.GetUseAntiAliasing())
+
+            elif id == ID_SHOW_LINENUMBERS:
+                event.Check(win.lineNumbers)
+            elif id == ID_AUTO_SAVESETTINGS:
+                event.Check(self.autoSaveSettings)
+            elif id == ID_SAVESETTINGS:
+                event.Enable(self.config is not None and
+                             hasattr(self, 'DoSaveSettings'))
+            elif id == ID_DELSETTINGSFILE:
+                event.Enable(self.config is not None)
+                
+            elif id == ID_EXECSTARTUPSCRIPT:
+                event.Check(self.execStartupScript)
+
+            elif id == ID_SAVEHISTORY:
+                event.Check(self.saveHistory and self.dataDir is not None)
+            elif id == ID_EDITSTARTUPSCRIPT:
+                event.Enable(hasattr(self, 'EditStartupScript'))
+
+            elif id == ID_FIND:
+                event.Enable(hasattr(win, 'DoFindNext'))
+            elif id == ID_FINDNEXT:
+                event.Enable(hasattr(win, 'DoFindNext') and
+                             self.findData.GetFindString() != '')
+                
             else:
                 event.Enable(False)
         except AttributeError:
             # This menu option is not supported in the current context.
             event.Enable(False)
+
+
+    def OnActivate(self, event):
+        """
+        Event Handler for losing the focus of the Frame. Should close
+        Autocomplete listbox, if shown.
+        """
+        if not event.GetActive():
+            # If autocomplete active, cancel it.  Otherwise, the
+            # autocomplete list will stay visible on top of the
+            # z-order after switching to another application
+            win = wx.Window.FindFocus()
+            if hasattr(win, 'AutoCompActive') and win.AutoCompActive():
+                win.AutoCompCancel()
+        event.Skip()
+
+
+
+    def LoadSettings(self, config):
+        """Called be derived classes to load settings specific to the Frame"""
+        pos  = wx.Point(config.ReadInt('Window/PosX', -1),
+                        config.ReadInt('Window/PosY', -1))
+                        
+        size = wx.Size(config.ReadInt('Window/Width', -1),
+                       config.ReadInt('Window/Height', -1))
+
+        self.SetSize(size)
+        self.Move(pos)
+
+
+    def SaveSettings(self, config):
+        """Called by derived classes to save Frame settings to a wx.Config object"""
+
+        # TODO: track position/size so we can save it even if the
+        # frame is maximized or iconized.
+        if not self.iconized and not self.IsMaximized():
+            w, h = self.GetSize()
+            config.WriteInt('Window/Width', w)
+            config.WriteInt('Window/Height', h)
+            
+            px, py = self.GetPosition()
+            config.WriteInt('Window/PosX', px)
+            config.WriteInt('Window/PosY', py)
+
+
+
+
+class ShellFrameMixin:
+    """
+    A mix-in class for frames that will have a Shell or a Crust window
+    and that want to add history, startupScript and other common
+    functionality.
+    """
+    def __init__(self, config, dataDir):
+        self.config = config
+        self.dataDir = dataDir
+        self.startupScript = os.environ.get('PYTHONSTARTUP')
+        if not self.startupScript and self.dataDir:
+            self.startupScript = os.path.join(self.dataDir, 'startup')
+            
+        self.autoSaveSettings = False
+        self.saveHistory = False
+
+        # We need this one before we have a chance to load the settings...
+        self.execStartupScript = True
+        if self.config:
+            self.execStartupScript = self.config.ReadBool('Options/ExecStartupScript', True)
+            
+
+    def OnHelp(self, event):
+        """Display a Help window."""
+        import  wx.lib.dialogs
+        title = 'Help on key bindings'
+        
+        text = wx.py.shell.HELP_TEXT
+
+        dlg = wx.lib.dialogs.ScrolledMessageDialog(self, text, title, size = ((700, 540)))
+        fnt = wx.Font(10, wx.TELETYPE, wx.NORMAL, wx.NORMAL)
+        dlg.GetChildren()[0].SetFont(fnt)
+        dlg.GetChildren()[0].SetInsertionPoint(0)
+        dlg.ShowModal()
+        dlg.Destroy()
+
+
+    def LoadSettings(self):
+        if self.config is not None:
+            self.autoSaveSettings = self.config.ReadBool('Options/AutoSaveSettings', False)
+            self.execStartupScript = self.config.ReadBool('Options/ExecStartupScript', True)
+            self.saveHistory  = self.config.ReadBool('Options/SaveHistory', False)
+            self.LoadHistory()
+
+
+    def SaveSettings(self):
+        if self.config is not None:
+            # always save this one
+            self.config.WriteBool('Options/AutoSaveSettings', self.autoSaveSettings)
+            if self.autoSaveSettings:
+                self.config.WriteBool('Options/SaveHistory', self.saveHistory)
+                self.config.WriteBool('Options/ExecStartupScript', self.execStartupScript)
+                self.SaveHistory()
+
+
+
+    def SaveHistory(self):
+        if self.dataDir:
+            try:
+                # always open the file so that when we are not
+                # saving the history, the old file is emptied.
+                name = os.path.join(self.dataDir, 'history')
+                f = file(name, 'w')
+                if self.saveHistory:
+                    hist = '\n'.join(self.shell.history)
+                    f.write(hist)
+                f.close()
+            except:
+                d = wx.MessageDialog(self, "Error saving history file.",
+                                     "Error", wx.ICON_EXCLAMATION)
+                d.ShowModal()
+                d.Destroy()
+
+
+    def LoadHistory(self):
+        if self.dataDir:
+            name = os.path.join(self.dataDir, 'history')
+            if os.path.exists(name):
+                try:
+                    f = file(name, 'U')
+                    hist = f.read()
+                    f.close()
+                    self.shell.history = hist.split('\n')
+                except:
+                    d = wx.MessageDialog(self, "Error loading history file.",
+                                         "Error", wx.ICON_EXCLAMATION)
+                    d.ShowModal()
+                    d.Destroy()
+
+
+    def bufferHasChanged(self):
+        # the shell buffers can always be saved
+        return True
+
+    def bufferSave(self):
+        import time
+        appname = wx.GetApp().GetAppName()
+        default = appname + '-' + time.strftime("%Y%m%d-%H%M.py")
+        fileName = wx.FileSelector("Save File As", "Saving",
+                                  default_filename=default,
+                                  default_extension="py",
+                                  wildcard="*.py",
+                                  flags = wx.SAVE | wx.OVERWRITE_PROMPT)
+        if not fileName:
+            return
+        
+        text = self.shell.GetText()
+
+## This isn't working currently...
+##         d = wx.MessageDialog(self,u'Save source code only?\nAnswering yes will only save lines starting with >>> and ...',u'Question', wx.YES_NO | wx.ICON_QUESTION)
+##         yes_no = d.ShowModal()
+##         if yes_no == wx.ID_YES:
+##             m = re.findall('^[>\.]{3,3} (.*)\r', text, re.MULTILINE | re.LOCALE)
+##             text = '\n'.join(m)
+##         d.Destroy()
+
+        try:
+            f = open(fileName, "w")
+            f.write(text)
+            f.close()
+        except:
+            d = wx.MessageDialog(self, u'Error saving session',u'Error',
+                                 wx.OK | wx.ICON_ERROR)
+            d.ShowModal()
+            d.Destroy()
+
+
+    def EditStartupScript(self):
+        if os.path.exists(self.startupScript):
+            text = file(self.startupScript, 'U').read()
+        else:
+            text = ''
+
+        dlg = EditStartupScriptDialog(self, self.startupScript, text)
+        if dlg.ShowModal() == wx.ID_OK:
+            text = dlg.GetText()
+            try:
+                f = file(self.startupScript, 'w')
+                f.write(text)
+                f.close()
+            except:
+                d = wx.MessageDialog(self, "Error saving startup file.",
+                                     "Error", wx.ICON_EXCLAMATION)
+                d.ShowModal()
+                d.Destroy()
+
+
+
+class EditStartupScriptDialog(wx.Dialog):
+    def __init__(self, parent, fileName, text):
+        wx.Dialog.__init__(self, parent, size=(425,350),
+                           title="Edit Startup Script",
+                           style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
+        
+        pst = wx.StaticText(self, -1, "Path:")
+        ptx = wx.TextCtrl(self, -1, fileName, style=wx.TE_READONLY)
+        self.editor = editwindow.EditWindow(self)
+        self.editor.SetText(text)
+        wx.CallAfter(self.editor.SetFocus)
+        
+        ok = wx.Button(self, wx.ID_OK)
+        cancel = wx.Button(self, wx.ID_CANCEL)
+
+        mainSizer = wx.BoxSizer(wx.VERTICAL)
+
+        pthSizer = wx.BoxSizer(wx.HORIZONTAL)
+        pthSizer.Add(pst, flag=wx.ALIGN_CENTER_VERTICAL)
+        pthSizer.Add((5,5))
+        pthSizer.Add(ptx, 1)
+        mainSizer.Add(pthSizer, 0, wx.EXPAND|wx.ALL, 10)
+
+        mainSizer.Add(self.editor, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 10)
+        
+        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
+        btnSizer.Add((5,5), 1)
+        btnSizer.Add(ok)
+        btnSizer.Add((5,5), 1)
+        btnSizer.Add(cancel)
+        btnSizer.Add((5,5), 1)
+        mainSizer.Add(btnSizer, 0, wx.EXPAND|wx.ALL, 10)
+        
+        self.SetSizer(mainSizer)
+        self.Layout()
+
+
+    def GetText(self):
+        return self.editor.GetText()
index 112344ad3f6015915ba18fa00090f77f54aac286..4eef617272e4478464d8b9153569c1153d9ec371 100644 (file)
@@ -42,7 +42,8 @@ class Interpreter(InteractiveInterpreter):
         self.more = 0
         # List of lists to support recursive push().
         self.commandBuffer = []
-        self.startupScript = os.environ.get('PYTHONSTARTUP')
+        self.startupScript = None
+        
 
     def push(self, command):
         """Send command to the interpreter to be executed.
index 8e1b0474f3cb05f6806cf6964a007ae6ef14b0b3..da3f2751d215c35176cb02899060200a333a5c0e 100644 (file)
@@ -31,7 +31,7 @@ NAVKEYS = (wx.WXK_END, wx.WXK_LEFT, wx.WXK_RIGHT,
            wx.WXK_UP, wx.WXK_DOWN, wx.WXK_PRIOR, wx.WXK_NEXT)
 
 
-class ShellFrame(frame.Frame):
+class ShellFrame(frame.Frame, frame.ShellFrameMixin):
     """Frame containing the shell component."""
 
     name = 'Shell Frame'
@@ -40,19 +40,31 @@ class ShellFrame(frame.Frame):
     def __init__(self, parent=None, id=-1, title='PyShell',
                  pos=wx.DefaultPosition, size=wx.DefaultSize,
                  style=wx.DEFAULT_FRAME_STYLE, locals=None,
-                 InterpClass=None, *args, **kwds):
+                 InterpClass=None,
+                 config=None, dataDir=None,
+                 *args, **kwds):
         """Create ShellFrame instance."""
         frame.Frame.__init__(self, parent, id, title, pos, size, style)
+        frame.ShellFrameMixin.__init__(self, config, dataDir)
+
+        if size == wx.DefaultSize:
+            self.SetSize((750, 525))
+
         intro = 'PyShell %s - The Flakiest Python Shell' % VERSION
-        intro += '\nSponsored by Orbtech - ' + \
-                 'Your source for Python programming expertise.'
         self.SetStatusText(intro.replace('\n', ', '))
         self.shell = Shell(parent=self, id=-1, introText=intro,
                            locals=locals, InterpClass=InterpClass,
+                           startupScript=self.startupScript,
+                           execStartupScript=self.execStartupScript,
                            *args, **kwds)
+
         # Override the shell so that status messages go to the status bar.
         self.shell.setStatusText = self.SetStatusText
 
+        self.shell.SetFocus()
+        self.LoadSettings()
+
+
     def OnClose(self, event):
         """Event handler for closing."""
         # This isn't working the way I want, but I'll leave it for now.
@@ -60,6 +72,7 @@ class ShellFrame(frame.Frame):
             if event.CanVeto():
                 event.Veto(True)
         else:
+            self.SaveSettings()
             self.shell.destroy()
             self.Destroy()
 
@@ -82,21 +95,28 @@ class ShellFrame(frame.Frame):
         dialog.Destroy()
 
 
-class ShellFacade:
-    """Simplified interface to all shell-related functionality.
+    def LoadSettings(self):
+        if self.config is not None:
+            frame.ShellFrameMixin.LoadSettings(self)
+            frame.Frame.LoadSettings(self, self.config)
+            self.shell.LoadSettings(self.config)
 
-    This is a semi-transparent facade, in that all attributes of other
-    are accessible, even though only some are visible to the user."""
+    def SaveSettings(self):
+        if self.config is not None:
+            frame.ShellFrameMixin.SaveSettings(self)
+            if self.autoSaveSettings:
+                frame.Frame.SaveSettings(self, self.config)
+                self.shell.SaveSettings(self.config)
 
-    name = 'Shell Interface'
-    revision = __revision__
+    def DoSaveSettings(self):
+        if self.config is not None:
+            self.SaveSettings()
+            self.config.Flush()
+        
 
-    def __init__(self, other):
-        """Create a ShellFacade instance."""
-        d = self.__dict__
-        d['other'] = other
-        d['helpText'] = \
-"""
+
+
+HELP_TEXT = """\
 * Key bindings:
 Home              Go to the beginning of the command or line.
 Shift+Home        Select to the beginning of the command or line.
@@ -104,6 +124,7 @@ Shift+End         Select to the end of the line.
 End               Go to the end of the line.
 Ctrl+C            Copy selected text, removing prompts.
 Ctrl+Shift+C      Copy selected text, retaining prompts.
+Alt+C             Copy to the clipboard, including prefixed prompts.
 Ctrl+X            Cut selected text.
 Ctrl+V            Paste from clipboard.
 Ctrl+Shift+V      Paste and run multiple commands from clipboard.
@@ -119,8 +140,31 @@ Ctrl+Enter        Insert new line into multiline command.
 Ctrl+]            Increase font size.
 Ctrl+[            Decrease font size.
 Ctrl+=            Default font size.
+Ctrl-Space        Show Auto Completion.
+Ctrl-Alt-Space    Show Call Tip.
+Alt+Shift+C       Clear Screen.
+Shift+Enter       Complete Text from History.
+Ctrl+F            Search (backwards) TODO: regexp-wholeWords-...
+Ctrl+G            Search next
+Ctrl+H            "hide" lines containing selection / "unhide"
+F12               on/off "free-edit" mode
 """
 
+class ShellFacade:
+    """Simplified interface to all shell-related functionality.
+
+    This is a semi-transparent facade, in that all attributes of other
+    are accessible, even though only some are visible to the user."""
+
+    name = 'Shell Interface'
+    revision = __revision__
+
+    def __init__(self, other):
+        """Create a ShellFacade instance."""
+        d = self.__dict__
+        d['other'] = other
+        d['helpText'] = HELP_TEXT
+
     def help(self):
         """Display some useful information about how to use the shell."""
         self.write(self.helpText)
@@ -151,6 +195,7 @@ Ctrl+=            Default font size.
             'autoCompleteIncludeDouble',
             'autoCompleteIncludeMagic',
             'autoCompleteIncludeSingle',
+            'callTipInsert',
             'clear',
             'pause',
             'prompt',
@@ -167,6 +212,7 @@ Ctrl+=            Default font size.
         return list
 
 
+
 class Shell(editwindow.EditWindow):
     """Shell based on StyledTextCtrl."""
 
@@ -175,26 +221,32 @@ class Shell(editwindow.EditWindow):
 
     def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
                  size=wx.DefaultSize, style=wx.CLIP_CHILDREN,
-                 introText='', locals=None, InterpClass=None, *args, **kwds):
+                 introText='', locals=None, InterpClass=None,
+                 startupScript=None, execStartupScript=True,
+                 *args, **kwds):
         """Create Shell instance."""
         editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
         self.wrap()
         if locals is None:
             import __main__
             locals = __main__.__dict__
+
         # Grab these so they can be restored by self.redirect* methods.
         self.stdin = sys.stdin
         self.stdout = sys.stdout
         self.stderr = sys.stderr
+
         # Import a default interpreter class if one isn't provided.
         if InterpClass == None:
             from interpreter import Interpreter
         else:
             Interpreter = InterpClass
+
         # Create a replacement for stdin.
         self.reader = PseudoFileIn(self.readline, self.readlines)
         self.reader.input = ''
         self.reader.isreading = False
+
         # Set up the interpreter.
         self.interp = Interpreter(locals=locals,
                                   rawin=self.raw_input,
@@ -202,15 +254,20 @@ class Shell(editwindow.EditWindow):
                                   stdout=PseudoFileOut(self.writeOut),
                                   stderr=PseudoFileErr(self.writeErr),
                                   *args, **kwds)
+
         # Set up the buffer.
         self.buffer = Buffer()
+
         # Find out for which keycodes the interpreter will autocomplete.
         self.autoCompleteKeys = self.interp.getAutoCompleteKeys()
+
         # Keep track of the last non-continuation prompt positions.
         self.promptPosStart = 0
         self.promptPosEnd = 0
+
         # Keep track of multi-line commands.
         self.more = False
+
         # Create the command history.  Commands are added into the
         # front of the list (ie. at index 0) as they are entered.
         # self.historyIndex is the current position in the history; it
@@ -220,23 +277,46 @@ class Shell(editwindow.EditWindow):
         # command, not in the history.
         self.history = []
         self.historyIndex = -1
+
+        #seb add mode for "free edit"
+        self.noteMode = 0
+        self.MarkerDefine(0,stc.STC_MARK_ROUNDRECT)  # marker for hidden
+        self.searchTxt = ""
+
         # Assign handlers for keyboard events.
-        wx.EVT_CHAR(self, self.OnChar)
-        wx.EVT_KEY_DOWN(self, self.OnKeyDown)
+        self.Bind(wx.EVT_CHAR, self.OnChar)
+        self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
+
         # Assign handler for idle time.
         self.waiting = False
-        wx.EVT_IDLE(self, self.OnIdle)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
+
         # Display the introductory banner information.
         self.showIntro(introText)
+
         # Assign some pseudo keywords to the interpreter's namespace.
         self.setBuiltinKeywords()
+
         # Add 'shell' to the interpreter's local namespace.
         self.setLocalShell()
+
+        ## NOTE:  See note at bottom of this file...
+        ## #seb: File drag and drop
+        ## self.SetDropTarget( FileDropTarget(self) )
+
         # Do this last so the user has complete control over their
         # environment.  They can override anything they want.
-        self.execStartupScript(self.interp.startupScript)
+        if execStartupScript:
+            if startupScript is None:
+                startupScript = os.environ.get('PYTHONSTARTUP')
+            self.execStartupScript(startupScript)
+        else:
+            self.prompt()
+        
         wx.CallAfter(self.ScrollToLine, 0)
 
+
+
     def destroy(self):
         del self.interp
 
@@ -270,29 +350,32 @@ class Shell(editwindow.EditWindow):
         __builtin__.close = __builtin__.exit = __builtin__.quit = \
             'Click on the close button to leave the application.'
 
+
     def quit(self):
         """Quit the application."""
-
         # XXX Good enough for now but later we want to send a close event.
-
         # In the close event handler we can make sure they want to
         # quit.  Other applications, like PythonCard, may choose to
         # hide rather than quit so we should just post the event and
         # let the surrounding app decide what it wants to do.
         self.write('Click on the close button to leave the application.')
 
+
     def setLocalShell(self):
         """Add 'shell' to locals as reference to ShellFacade instance."""
         self.interp.locals['shell'] = ShellFacade(other=self)
 
+
     def execStartupScript(self, startupScript):
         """Execute the user's PYTHONSTARTUP script if they have one."""
         if startupScript and os.path.isfile(startupScript):
             text = 'Startup script executed: ' + startupScript
             self.push('print %r; execfile(%r)' % (text, startupScript))
+            self.interp.startupScript = startupScript
         else:
             self.push('')
 
+
     def about(self):
         """Display information about Py."""
         text = """
@@ -302,17 +385,24 @@ Py Shell Revision: %s
 Py Interpreter Revision: %s
 Python Version: %s
 wxPython Version: %s
+wxPython PlatformInfo: %s
 Platform: %s""" % \
         (__author__, VERSION, self.revision, self.interp.revision,
-         sys.version.split()[0], wx.VERSION_STRING, sys.platform)
+         sys.version.split()[0], wx.VERSION_STRING, str(wx.PlatformInfo),
+         sys.platform)
         self.write(text.strip())
 
+
     def OnChar(self, event):
         """Keypress event handler.
 
         Only receives an event if OnKeyDown calls event.Skip() for the
         corresponding event."""
 
+        if self.noteMode:
+            event.Skip()
+            return
+
         # Prevent modification of previously submitted
         # commands/responses.
         if not self.CanEdit():
@@ -343,11 +433,12 @@ Platform: %s""" % \
             self.ReplaceSelection('')
             command = self.GetTextRange(stoppos, currpos) + '('
             self.write('(')
-            self.autoCallTipShow(command)
+            self.autoCallTipShow(command, self.GetCurrentPos() == self.GetTextLength())
         else:
             # Allow the normal event handling to take place.
             event.Skip()
 
+
     def OnKeyDown(self, event):
         """Key down event handler."""
 
@@ -364,12 +455,64 @@ Platform: %s""" % \
         currpos = self.GetCurrentPos()
         endpos = self.GetTextLength()
         selecting = self.GetSelectionStart() != self.GetSelectionEnd()
+        
+        if controlDown and key in (ord('H'), ord('h')): 
+            li = self.GetCurrentLine()
+            m = self.MarkerGet(li)
+            if m & 1<<0:
+                startP = self.PositionFromLine(li)
+                self.MarkerDelete(li, 0)
+                maxli = self.GetLineCount()
+                li += 1 # li stayed visible as header-line
+                li0 = li 
+                while li<maxli and self.GetLineVisible(li) == 0:
+                    li += 1
+                endP = self.GetLineEndPosition(li-1)
+                self.ShowLines(li0, li-1)
+                self.SetSelection( startP, endP ) # select reappearing text to allow "hide again"
+                return
+            startP,endP = self.GetSelection()
+            endP-=1
+            startL,endL = self.LineFromPosition(startP), self.LineFromPosition(endP)
+
+            if endL == self.LineFromPosition(self.promptPosEnd): # never hide last prompt
+                endL -= 1
+
+            m = self.MarkerGet(startL)
+            self.MarkerAdd(startL, 0)
+            self.HideLines(startL+1,endL)
+            self.SetCurrentPos( startP ) # to ensure caret stays visible !
+
+        if key == wx.WXK_F12: #seb
+            if self.noteMode:
+                # self.promptPosStart not used anyway - or ? 
+                self.promptPosEnd = self.PositionFromLine( self.GetLineCount()-1 ) + len(str(sys.ps1))
+                self.GotoLine(self.GetLineCount())
+                self.GotoPos(self.promptPosEnd)
+                self.prompt()  #make sure we have a prompt
+                self.SetCaretForeground("black")
+                self.SetCaretWidth(1)    #default
+                self.SetCaretPeriod(500) #default
+            else:
+                self.SetCaretForeground("red")
+                self.SetCaretWidth(4)
+                self.SetCaretPeriod(0) #steady
+
+            self.noteMode = not self.noteMode
+            return
+        if self.noteMode:
+            event.Skip()
+            return
+
         # Return (Enter) is used to submit a command to the
         # interpreter.
-        if not controlDown and key == wx.WXK_RETURN:
+        if (not controlDown and not shiftDown and not altDown) and key == wx.WXK_RETURN:
             if self.CallTipActive():
                 self.CallTipCancel()
             self.processLine()
+        #Complete Text (from already typed words)    
+        elif shiftDown and key == wx.WXK_RETURN:
+            self.OnShowCompHistory()
         # Ctrl+Return (Cntrl+Enter) is used to insert a line break.
         elif controlDown and key == wx.WXK_RETURN:
             if self.CallTipActive():
@@ -433,6 +576,9 @@ Platform: %s""" % \
         elif (controlDown and not shiftDown and key in (ord('V'), ord('v'))) \
                  or (shiftDown and not controlDown and key == wx.WXK_INSERT):
             self.Paste()
+        elif controlDown and key == wx.WXK_SPACE:
+            """AutoComplete and Calltips manually."""
+            self.OnCallTipAutoCompleteManually (shiftDown)
         # Paste from the clipboard, run commands.
         elif controlDown and shiftDown and key in (ord('V'), ord('v')):
             self.PasteAndRun()
@@ -481,6 +627,49 @@ Platform: %s""" % \
         else:
             event.Skip()
 
+    def OnShowCompHistory(self):
+        """Show possible autocompletion Words from already typed words."""
+        
+        #copy from history
+        his = self.history[:]
+        
+        #put together in one string
+        joined = " ".join (his)
+        import re
+
+        #sort out only "good" words
+        newlist = re.split("[ \.\[\]=}(\)\,0-9\"]", joined)
+        
+        #length > 1 (mix out "trash")
+        thlist = []
+        for i in newlist:
+            if len (i) > 1:
+                thlist.append (i)
+        
+        #unique (no duplicate words
+        #oneliner from german python forum => unique list
+        unlist = [thlist[i] for i in xrange(len(thlist)) if thlist[i] not in thlist[:i]]
+            
+        #sort lowercase
+        unlist.sort(lambda a, b: cmp(a.lower(), b.lower()))
+        
+        #this is more convenient, isn't it?
+        self.AutoCompSetIgnoreCase(True)
+        
+        #join again together in a string
+        stringlist = " ".join(unlist)
+
+        #pos von 0 noch ausrechnen
+
+        #how big is the offset?
+        cpos = self.GetCurrentPos() - 1
+        while chr (self.GetCharAt (cpos)).isalnum():
+            cpos -= 1
+            
+        #the most important part
+        self.AutoCompShow(self.GetCurrentPos() - cpos -1, stringlist)
+
+
     def clearCommand(self):
         """Delete the current, unexecuted command."""
         startpos = self.promptPosEnd
@@ -589,6 +778,7 @@ Platform: %s""" % \
                 self.write(os.linesep)
             else:
                 self.push(command)
+                wx.FutureCall(1, self.EnsureCaretVisible)
         # Or replace the current command with the other command.
         else:
             # If the line contains a command (even an invalid one).
@@ -665,9 +855,10 @@ Platform: %s""" % \
             text = text[ps2size:]
         return text
 
-    def push(self, command):
+    def push(self, command, silent = False):
         """Send command to the interpreter for execution."""
-        self.write(os.linesep)
+        if not silent:
+            self.write(os.linesep)
         busy = wx.BusyCursor()
         self.waiting = True
         self.more = self.interp.push(command)
@@ -675,7 +866,8 @@ Platform: %s""" % \
         del busy
         if not self.more:
             self.addHistory(command.rstrip())
-        self.prompt()
+        if not silent:
+            self.prompt()
 
     def addHistory(self, command):
         """Add command to the command history."""
@@ -817,7 +1009,7 @@ Platform: %s""" % \
         finally:
             file.close()
 
-    def autoCompleteShow(self, command):
+    def autoCompleteShow(self, command, offset = 0):
         """Display auto-completion popup list."""
         self.AutoCompSetAutoHide(self.autoCompleteAutoHide)
         self.AutoCompSetIgnoreCase(self.autoCompleteCaseInsensitive)
@@ -827,19 +1019,19 @@ Platform: %s""" % \
                     includeDouble=self.autoCompleteIncludeDouble)
         if list:
             options = ' '.join(list)
-            offset = 0
+            #offset = 0
             self.AutoCompShow(offset, options)
 
-    def autoCallTipShow(self, command):
+    def autoCallTipShow(self, command, insertcalltip = True, forceCallTip = False):
         """Display argument spec and docstring in a popup window."""
         if self.CallTipActive():
             self.CallTipCancel()
         (name, argspec, tip) = self.interp.getCallTip(command)
         if tip:
             dispatcher.send(signal='Shell.calltip', sender=self, calltip=tip)
-        if not self.autoCallTip:
+        if not self.autoCallTip and not forceCallTip:
             return
-        if argspec:
+        if argspec and insertcalltip and self.callTipInsert:
             startpos = self.GetCurrentPos()
             self.write(argspec + ')')
             endpos = self.GetCurrentPos()
@@ -852,6 +1044,53 @@ Platform: %s""" % \
             # fallback.
             tippos = max(tippos, fallback)
             self.CallTipShow(tippos, tip)
+    
+    def OnCallTipAutoCompleteManually (self, shiftDown):
+        """AutoComplete and Calltips manually."""
+        if self.AutoCompActive():
+            self.AutoCompCancel()
+        currpos = self.GetCurrentPos()
+        stoppos = self.promptPosEnd
+
+        cpos = currpos
+        #go back until '.' is found
+        pointavailpos = -1
+        while cpos >= stoppos:
+            if self.GetCharAt(cpos) == ord ('.'):
+                pointavailpos = cpos
+                break
+            cpos -= 1
+
+        #word from non whitespace until '.'
+        if pointavailpos != -1:
+            #look backward for first whitespace char
+            textbehind = self.GetTextRange (pointavailpos + 1, currpos)
+            pointavailpos += 1
+
+            if not shiftDown:
+                #call AutoComplete
+                stoppos = self.promptPosEnd
+                textbefore = self.GetTextRange(stoppos, pointavailpos)
+                self.autoCompleteShow(textbefore, len (textbehind))
+            else:
+                #call CallTips
+                cpos = pointavailpos
+                begpos = -1
+                while cpos > stoppos:
+                    if chr(self.GetCharAt(cpos)).isspace():
+                        begpos = cpos
+                        break
+                    cpos -= 1
+                if begpos == -1:
+                    begpos = cpos
+                ctips = self.GetTextRange (begpos, currpos)
+                ctindex = ctips.find ('(')
+                if ctindex != -1 and not self.CallTipActive():
+                    #insert calltip, if current pos is '(', otherwise show it only
+                    self.autoCallTipShow(ctips[:ctindex + 1], \
+                        self.GetCharAt(currpos - 1) == ord('(') and self.GetCurrentPos() == self.GetTextLength(),\
+                        True)
+                
 
     def writeOut(self, text):
         """Replacement for stdout."""
@@ -1034,3 +1273,101 @@ Platform: %s""" % \
         This number of points is added to the size of all fonts.  It
         may be positive to magnify or negative to reduce."""
         self.SetZoom(points)
+
+
+
+    def LoadSettings(self, config):
+        self.autoComplete              = config.ReadBool('Options/AutoComplete', True)
+        self.autoCompleteIncludeMagic  = config.ReadBool('Options/AutoCompleteIncludeMagic', True)
+        self.autoCompleteIncludeSingle = config.ReadBool('Options/AutoCompleteIncludeSingle', True)
+        self.autoCompleteIncludeDouble = config.ReadBool('Options/AutoCompleteIncludeDouble', True)
+
+        self.autoCallTip = config.ReadBool('Options/AutoCallTip', True)
+        self.callTipInsert = config.ReadBool('Options/CallTipInsert', True)
+        self.SetWrapMode(config.ReadBool('View/WrapMode', True))
+
+        useAA = config.ReadBool('Options/UseAntiAliasing', self.GetUseAntiAliasing())
+        self.SetUseAntiAliasing(useAA)
+        self.lineNumbers = config.ReadBool('View/ShowLineNumbers', True)
+        self.setDisplayLineNumbers (self.lineNumbers)
+        zoom = config.ReadInt('View/Zoom/Shell', -99)
+        if zoom != -99:
+            self.SetZoom(zoom)
+
+
+    
+    def SaveSettings(self, config):
+        config.WriteBool('Options/AutoComplete', self.autoComplete)
+        config.WriteBool('Options/AutoCompleteIncludeMagic', self.autoCompleteIncludeMagic)
+        config.WriteBool('Options/AutoCompleteIncludeSingle', self.autoCompleteIncludeSingle)
+        config.WriteBool('Options/AutoCompleteIncludeDouble', self.autoCompleteIncludeDouble)
+        config.WriteBool('Options/AutoCallTip', self.autoCallTip)
+        config.WriteBool('Options/CallTipInsert', self.callTipInsert)
+        config.WriteBool('Options/UseAntiAliasing', self.GetUseAntiAliasing())
+        config.WriteBool('View/WrapMode', self.GetWrapMode())
+        config.WriteBool('View/ShowLineNumbers', self.lineNumbers)
+        config.WriteInt('View/Zoom/Shell', self.GetZoom())
+
+
+
+## NOTE: The DnD of file names is disabled until I can figure out how
+## best to still allow DnD of text.
+
+
+## #seb : File drag and drop
+## class FileDropTarget(wx.FileDropTarget):
+##     def __init__(self, obj):
+##         wx.FileDropTarget.__init__(self)
+##         self.obj = obj
+##     def OnDropFiles(self, x, y, filenames):
+##         if len(filenames) == 1:
+##             txt = 'r\"%s\"' % filenames[0]
+##         else:
+##             txt = '( '
+##             for f in filenames:
+##                 txt += 'r\"%s\" , ' % f
+##             txt += ')'
+##         self.obj.AppendText(txt)
+##         pos = self.obj.GetCurrentPos()
+##         self.obj.SetCurrentPos( pos )
+##         self.obj.SetSelection( pos, pos )
+
+
+
+## class TextAndFileDropTarget(wx.DropTarget):
+##     def __init__(self, shell):
+##         wx.DropTarget.__init__(self)
+##         self.shell = shell
+##         self.compdo = wx.DataObjectComposite()
+##         self.textdo = wx.TextDataObject()
+##         self.filedo = wx.FileDataObject()
+##         self.compdo.Add(self.textdo)
+##         self.compdo.Add(self.filedo, True)
+        
+##         self.SetDataObject(self.compdo)
+                
+##     def OnDrop(self, x, y):
+##         return True
+    
+##     def OnData(self, x, y, result):
+##         self.GetData()
+##         if self.textdo.GetTextLength() > 1:
+##             text = self.textdo.GetText()
+##             # *** Do somethign with the dragged text here...
+##             self.textdo.SetText('')
+##         else:
+##             filenames = str(self.filename.GetFilenames())
+##             if len(filenames) == 1:
+##                 txt = 'r\"%s\"' % filenames[0]
+##             else:
+##                 txt = '( '
+##                 for f in filenames:
+##                     txt += 'r\"%s\" , ' % f
+##                 txt += ')'
+##             self.shell.AppendText(txt)
+##             pos = self.shell.GetCurrentPos()
+##             self.shell.SetCurrentPos( pos )
+##             self.shell.SetSelection( pos, pos )
+
+##         return result
+    
index 76a8cd87dc7393f992ae4ae88584a05c69f699d1..c0a5f5d4c114ee3dadd7d26c26053ea5ff2ca03c 100644 (file)
@@ -6,4 +6,4 @@ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
 __cvsid__ = "$Id$"
 __revision__ = "$Revision$"[11:-2]
 
-VERSION = '0.9.4'
+VERSION = '0.9.5'
index d1bf8af9407cab9b12634a3863d4d60c2c9f65f1..980c02a6c2c3982b205465014159032b458500c3 100644 (file)
@@ -107,6 +107,7 @@ wxSIZE_AUTO_HEIGHT = wx._core.SIZE_AUTO_HEIGHT
 wxSIZE_AUTO = wx._core.SIZE_AUTO
 wxSIZE_USE_EXISTING = wx._core.SIZE_USE_EXISTING
 wxSIZE_ALLOW_MINUS_ONE = wx._core.SIZE_ALLOW_MINUS_ONE
+wxSIZE_FORCE = wx._core.SIZE_FORCE
 wxPORTRAIT = wx._core.PORTRAIT
 wxLANDSCAPE = wx._core.LANDSCAPE
 wxPRINT_QUALITY_HIGH = wx._core.PRINT_QUALITY_HIGH
@@ -115,6 +116,7 @@ wxPRINT_QUALITY_LOW = wx._core.PRINT_QUALITY_LOW
 wxPRINT_QUALITY_DRAFT = wx._core.PRINT_QUALITY_DRAFT
 wxID_ANY = wx._core.ID_ANY
 wxID_SEPARATOR = wx._core.ID_SEPARATOR
+wxID_NONE = wx._core.ID_NONE
 wxID_LOWEST = wx._core.ID_LOWEST
 wxID_OPEN = wx._core.ID_OPEN
 wxID_CLOSE = wx._core.ID_CLOSE
@@ -619,8 +621,12 @@ wxHT_MAX = wx._core.HT_MAX
 wxMOD_NONE = wx._core.MOD_NONE
 wxMOD_ALT = wx._core.MOD_ALT
 wxMOD_CONTROL = wx._core.MOD_CONTROL
+wxMOD_ALTGR = wx._core.MOD_ALTGR
 wxMOD_SHIFT = wx._core.MOD_SHIFT
+wxMOD_META = wx._core.MOD_META
 wxMOD_WIN = wx._core.MOD_WIN
+wxMOD_CMD = wx._core.MOD_CMD
+wxMOD_ALL = wx._core.MOD_ALL
 wxUPDATE_UI_NONE = wx._core.UPDATE_UI_NONE
 wxUPDATE_UI_RECURSE = wx._core.UPDATE_UI_RECURSE
 wxUPDATE_UI_FROMIDLE = wx._core.UPDATE_UI_FROMIDLE
@@ -732,6 +738,8 @@ wxIMAGE_ALPHA_THRESHOLD = wx._core.IMAGE_ALPHA_THRESHOLD
 wxIMAGE_ALPHA_OPAQUE = wx._core.IMAGE_ALPHA_OPAQUE
 wxImageHandler = wx._core.ImageHandler
 wxImageHandlerPtr = wx._core.ImageHandlerPtr
+wxPyImageHandler = wx._core.PyImageHandler
+wxPyImageHandlerPtr = wx._core.PyImageHandlerPtr
 wxImageHistogram = wx._core.ImageHistogram
 wxImageHistogramPtr = wx._core.ImageHistogramPtr
 wxImageHistogram_MakeKey = wx._core.ImageHistogram_MakeKey