Changes between Version 75 and Version 76 of wxGUIDevelopment


Ignore:
Timestamp:
Nov 9, 2011, 6:44:34 AM (12 years ago)
Author:
martinl
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • wxGUIDevelopment

    v75 v76  
    8585
    8686 * `core` for core non-GUI classes (gcmd, debug, etc.)
     87 * `forms` for autogenerated GUI dialogs
    8788 * `gui_core` for core GUI classes (goutput, etc)
    88  * `forms` for autogenerated GUI dialogs
    89  * `modules` for non-core components (vector digitizer, georectifier, etc.)
    9089 * `lmgr` for Layer Manager
    9190 * `mapdisp` for Map Display
     91 * `modules` for non-core components (vector digitizer, georectifier, etc.)
     92
     93{{{
     94/gui/wxpython
     95|
     96|- core
     97|- forms
     98|- gui_core
     99|- lmgr
     100|- mapdisp
     101|- modules
     102   |- dbm
     103   |- colorrules
     104   |- gcpmanager
     105   |- histogram
     106   |- location_wizard
     107   |- misc
     108   |- modeler
     109   |- nviz
     110   |- ogc_services
     111   |- psmap
     112   |- scatterplot
     113   |- vdigit
     114   |- wxplot
     115}}}
    92116
    93117The proposed ''modules'':
     118
     119{{{
     120core/cmd.py
     121        gcmd.py:class Popen(subprocess.Popen):
     122        gcmd.py:class Command:
     123        gcmd.py:class CommandThread(Thread):
     124core/debug.py
     125        debug.py:class DebugMsg:
     126core/exceptions.py
     127        gcmd.py:class GException(Exception):
     128core/menudata.py
     129        menudata.py:class MenuData:
     130core/render.py
     131        render.py:class Layer(object):
     132        render.py:class MapLayer(Layer):
     133        render.py:class Overlay(Layer):
     134        render.py:class Map(object):
     135core/settings.py
     136        preferences.py:class Settings:
     137core/units.py
     138        units.py:class BaseUnits:
     139core/workspace.py
     140        workspace.py:class ProcessWorkspaceFile:
     141        workspace.py:class WriteWorkspaceFile(object):
     142        workspace.py:class ProcessGrcFile(object):
     143
     144forms/core.py
     145        menuform.py:class GUI:
     146        menuform.py:class FloatValidator(wx.PyValidator):
     147forms/frame.py
     148        menuform.py:class mainFrame(wx.Frame):
     149        menuform.py:class cmdPanel(wx.Panel):
     150        menuform.py:class GrassGUIApp(wx.App):
     151forms/help.py
     152        ghelp.py:class HelpWindow(wx.html.HtmlWindow):
     153        ghelp.py:class HelpPanel(wx.Panel):
     154forms/thread.py
     155        menuform.py:class UpdateThread(Thread):
     156        menuform.py:class UpdateQThread(Thread):
     157
     158gui_core/dialogs.py
     159        gdialogs.py:class ElementDialog(wx.Dialog):
     160        gdialogs.py:class MapLayersDialog(wx.Dialog):
     161        gdialogs.py:class GroupDialog(wx.Dialog):
     162        gdialogs.py:class ImageSizeDialog(wx.Dialog):
     163        gdialogs.py:class NewVectorDialog(ElementDialog):
     164        gdialogs.py:class StaticWrapText(wx.StaticText):
     165        preferences.py:class DefaultFontDialog(wx.Dialog):
     166gui_core/extensions.py
     167        ghelp.py:class InstallExtensionWindow(wx.Frame):
     168        ghelp.py:class ExtensionTree(ItemTree):
     169gui_core/helpframe.py
     170        ghelp.py:class HelpFrame(wx.Frame):
     171        ghelp.py:class AboutWindow(wx.Frame):
     172gui_core/mapset_access.py
     173        preferences.py:class MapsetAccess(wx.Dialog):
     174        preferences.py:class CheckListMapset(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
     175gui_core/menu.py
     176        menu.py:class Menu(wx.MenuBar):
     177gui_core/menutree.py
     178        ghelp.py:class MenuTreeWindow(wx.Panel):
     179        ghelp.py:class ItemTree(CT.CustomTreeCtrl):
     180        ghelp.py:class MenuTree(ItemTree):
     181gui_core/messages.py
     182        gcmd.py:class GError:
     183        gcmd.py:class GWarning:
     184        gcmd.py:class GMessage:
     185gui_core/notebook.py
     186        menuform.py:class GNotebook(FN.FlatNotebook):
     187gui_core/output.py
     188        goutput.py:class CmdThread(threading.Thread):
     189        goutput.py:class GMConsole(wx.SplitterWindow):
     190        goutput.py:class GMStdout:
     191        goutput.py:class GMStderr:
     192        goutput.py:class GMStc(wx.stc.StyledTextCtrl):
     193gui_core/preferences.py
     194        preferences.py:class PreferencesBaseDialog(wx.Dialog):
     195        preferences.py:class PreferencesDialog(PreferencesBaseDialog):
     196gui_core/prompt.py
     197        prompt.py:class PromptListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
     198        prompt.py:class TextCtrlAutoComplete(wx.ComboBox, listmix.ColumnSorterMixin):
     199        prompt.py:class GPrompt(object):
     200        prompt.py:class GPromptPopUp(GPrompt, TextCtrlAutoComplete):
     201        prompt.py:class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
     202gui_core/search.py
     203        ghelp.py:class SearchModuleWindow(wx.Panel):
     204gui_core/select.py
     205        gselect.py:class Select(wx.combo.ComboCtrl):
     206        gselect.py:class VectorSelect(Select):
     207        gselect.py:class TreeCtrlComboPopup(wx.combo.ComboPopup):
     208        gselect.py:class VectorDBInfo:
     209        gselect.py:class LayerSelect(wx.ComboBox):
     210        gselect.py:class DriverSelect(wx.ComboBox):
     211        gselect.py:class DatabaseSelect(wx.TextCtrl):
     212        gselect.py:class TableSelect(wx.ComboBox):
     213        gselect.py:class ColumnSelect(wx.ComboBox):
     214        gselect.py:class DbaseSelect(wx.lib.filebrowsebutton.DirBrowseButton):
     215        gselect.py:class LocationSelect(wx.ComboBox):
     216        gselect.py:class MapsetSelect(wx.ComboBox):
     217        gselect.py:class SubGroupSelect(wx.ComboBox):
     218        gselect.py:class FormatSelect(wx.Choice):
     219        gselect.py:class GdalSelect(wx.Panel):
     220        gselect.py:class ProjSelect(wx.ComboBox):
     221        gselect.py:class ElementSelect(wx.Choice):
     222        gselect.py:class OgrTypeSelect(wx.Panel):
     223gui_core/toolbars.py
     224        toolbars.py:class AbstractToolbar(wx.ToolBar):
     225
     226lmgr/dialogs.py
     227        gdialogs.py:class SetOpacityDialog(wx.Dialog):
     228        gdialogs.py:class LocationDialog(ElementDialog):
     229        gdialogs.py:class MapsetDialog(ElementDialog):
     230        gdialogs.py:class ImportDialog(wx.Dialog):
     231        gdialogs.py:class GdalImportDialog(ImportDialog):
     232        gdialogs.py:class GdalOutputDialog(wx.Dialog):
     233        gdialogs.py:class DxfImportDialog(ImportDialog):
     234        gdialogs.py:class LayersList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin,
     235lmgr/frame.py
     236        wxgui.py:class GMFrame(wx.Frame):
     237lmgr/layertree.py
     238        layertree.py:class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
     239lmgr/menudata.py
     240        menudata.py:class ManagerData(MenuData):
     241lmgr/pyshell.py
     242        gpyshell.py:class PyShellWindow(wx.Panel):
     243lmgr/sql_query.py
     244        gdialogs.py:class SqlQueryFrame(wx.Frame):
     245lmgr/toolbars.py
     246        toolbars.py:class LMWorkspaceToolbar(AbstractToolbar):
     247        toolbars.py:class LMDataToolbar(AbstractToolbar):
     248        toolbars.py:class LMToolsToolbar(AbstractToolbar):
     249        toolbars.py:class LMMiscToolbar(AbstractToolbar):
     250        toolbars.py:class LMVectorToolbar(AbstractToolbar):
     251
     252mapdisp/dialogs.py
     253        gdialogs.py:class SavedRegion(wx.Dialog):
     254        gdialogs.py:class DecorationDialog(wx.Dialog):
     255        gdialogs.py:class TextLayerDialog(wx.Dialog):
     256mapdisp/frame.py
     257        mapdisp.py:class MapFrameBase(wx.Frame):
     258        mapdisp.py:class MapFrame(MapFrameBase):
     259        mapdisp.py:class MapApp(wx.App):
     260mapdisp/mapwindow.py
     261        mapdisp_window.py:class MapWindow(object):
     262        mapdisp_window.py:class BufferedWindow(MapWindow, wx.Window):
     263mapdisp/print.py
     264        disp_print.py:class MapPrint(wx.Printout):
     265        disp_print.py:class PrintOptions:
     266mapdisp/statusbar.py
     267        mapdisp_statusbar.py:class SbException:
     268        mapdisp_statusbar.py:class SbManager:
     269        mapdisp_statusbar.py:class SbItem:
     270        mapdisp_statusbar.py:class SbRender(SbItem):
     271        mapdisp_statusbar.py:class SbShowRegion(SbItem):
     272        mapdisp_statusbar.py:class SbAlignExtent(SbItem):
     273        mapdisp_statusbar.py:class SbResolution(SbItem):
     274        mapdisp_statusbar.py:class SbMapScale(SbItem):
     275        mapdisp_statusbar.py:class SbGoTo(SbItem):
     276        mapdisp_statusbar.py:class SbProjection(SbItem):
     277        mapdisp_statusbar.py:class SbMask(SbItem):
     278        mapdisp_statusbar.py:class SbTextItem(SbItem):
     279        mapdisp_statusbar.py:class SbDisplayGeometry(SbTextItem):
     280        mapdisp_statusbar.py:class SbCoordinates(SbTextItem):
     281        mapdisp_statusbar.py:class SbRegionExtent(SbTextItem):
     282        mapdisp_statusbar.py:class SbCompRegionExtent(SbRegionExtent):
     283        mapdisp_statusbar.py:class SbProgress(SbItem):
     284        mapdisp_statusbar.py:class SbGoToGCP(SbItem):
     285        mapdisp_statusbar.py:class SbRMSError(SbTextItem):
     286mapdisp/toolbars.py
     287        toolbars.py:class MapToolbar(AbstractToolbar):
     288
     289modules/dbm/core.py
     290        dbm_base.py:class VectorDBInfo(gselect.VectorDBInfo):
     291        dbm.py:class Log:
     292modules/dbm/dialogs.py
     293        dbm_dialogs.py:class DisplayAttributesDialog(wx.Dialog):
     294        dbm_dialogs.py:class ModifyTableRecord(wx.Dialog):
     295modules/dbm/frame.py
     296        dbm.py:class AttributeManager(wx.Frame):
     297modules/dbm/sqlbuilder.py
     298        sqlbuilder.py:class SQLFrame(wx.Frame):
     299modules/dbm/widgets.py
     300        dbm.py:class TableListCtrl(wx.ListCtrl,
     301        dbm.py:class LayerListCtrl(wx.ListCtrl,
     302        dbm.py:class LayerBook(wx.Notebook):
     303        dbm.py:class VirtualAttributeList(wx.ListCtrl,
     304
     305modules/colorrules/core.py
     306        colorrules.py:class RulesPanel:
     307        colorrules.py:class ColorTable(wx.Frame):
     308modules/colorrules/mapwindow.py
     309        colorrules.py:class BufferedWindow(wx.Window):
     310modules/colorrules/raster.py
     311        colorrules.py:class RasterColorTable(ColorTable):
     312modules/colorrules/vector.py
     313        colorrules.py:class VectorColorTable(ColorTable):
     314        colorrules.py:class ThematicVectorTable(VectorColorTable):
     315
     316modules/gcpmanager/dialogs.py
     317        gcpmanager.py:class VectGroup(wx.Dialog):
     318        gcpmanager.py:class EditGCP(wx.Dialog):
     319        gcpmanager.py:class GrSettingsDialog(wx.Dialog):
     320modules/gcpmanager/gcpframe.py
     321        gcpmanager.py:class GCP(MapFrame, ColumnSorterMixin):
     322        gcpmanager.py:class GCPList(wx.ListCtrl,
     323modules/gcpmanager/mapframe.py
     324        gcpmapdisp.py:class MapFrame(MapFrameBase):
     325modules/gcpmanager/toolbars.py
     326        toolbars.py:class GCPManToolbar(AbstractToolbar):
     327        toolbars.py:class GCPDisplayToolbar(AbstractToolbar):
     328modules/gcpmanager/wizard.py
     329        gcpmanager.py:class GCPWizard(object):
     330        gcpmanager.py:class LocationPage(TitledPage):
     331        gcpmanager.py:class GroupPage(TitledPage):
     332        gcpmanager.py:class DispMapPage(TitledPage):
     333
     334modules/histogram/mapwindow.py
     335        histogram.py:class BufferedWindow(wx.Window):
     336modules/histogram/frame.py
     337        histogram.py:class HistFrame(wx.Frame):
     338modules/histogram/toolbars.py
     339        toolbars.py:class HistogramToolbar(AbstractToolbar):
     340        toolbars.py:class Histogram2Toolbar(AbstractToolbar):
     341modules/histogram/frame.py
     342        wxplot.py:class HistFrame(AbstractPlotFrame):
     343
     344modules/location_wizard/dialogs.py
     345        location_wizard.py:class RegionDef(BaseClass, wx.Frame):
     346        location_wizard.py:class TransList(wx.VListBox):
     347        location_wizard.py:class SelectTransformDialog(wx.Dialog):
     348modules/location_wizard/wizard.py
     349        location_wizard.py:class BaseClass(wx.Object):
     350        location_wizard.py:class TitledPage(BaseClass, wiz.WizardPageSimple):
     351        location_wizard.py:class DatabasePage(TitledPage):
     352        location_wizard.py:class CoordinateSystemPage(TitledPage):
     353        location_wizard.py:class ProjectionsPage(TitledPage):
     354        location_wizard.py:class ItemList(wx.ListCtrl,
     355        location_wizard.py:class ProjParamsPage(TitledPage):
     356        location_wizard.py:class DatumPage(TitledPage):
     357        location_wizard.py:class EllipsePage(TitledPage):
     358        location_wizard.py:class GeoreferencedFilePage(TitledPage):
     359        location_wizard.py:class WKTPage(TitledPage):
     360        location_wizard.py:class EPSGPage(TitledPage):
     361        location_wizard.py:class CustomPage(TitledPage):
     362        location_wizard.py:class SummaryPage(TitledPage):
     363        location_wizard.py:class LocationWizard(wx.Object):
     364
     365modules/misc/mapcalc.py
     366        mcalc_builder.py:class MapCalcFrame(wx.Frame):
     367modules/misc/vclean.py
     368        vclean.py:class VectorCleaningFrame(wx.Frame):
     369
     370modules/modeler/menudata.py
     371        menudata.py:class ModelerData(MenuData):
     372modules/modeler/toolbars.py
     373        toolbars.py:class ModelToolbar(AbstractToolbar):
     374modules/modeler/core.py
     375        gmodeler.py:class Model(object):
     376        gmodeler.py:class ModelObject:
     377        gmodeler.py:class ModelAction(ModelObject, ogl.RectangleShape):
     378        gmodeler.py:class ModelData(ModelObject, ogl.EllipseShape):
     379        gmodeler.py:class ModelRelation(ogl.LineShape):
     380        gmodeler.py:class ProcessModelFile:
     381        gmodeler.py:class WriteModelFile:
     382        gmodeler.py:class ModelItem(ModelObject):
     383        gmodeler.py:class ModelLoop(ModelItem, ogl.RectangleShape):
     384        gmodeler.py:class ModelCondition(ModelItem, ogl.PolygonShape):
     385modules/modeler/frame.py
     386        gmodeler.py:class ModelFrame(wx.Frame):
     387        gmodeler.py:class ModelCanvas(ogl.ShapeCanvas):
     388        gmodeler.py:class ModelEvtHandler(ogl.ShapeEvtHandler):
     389        gmodeler.py:class VariablePanel(wx.Panel):
     390        gmodeler.py:class VariableListCtrl(ModelListCtrl):
     391        gmodeler.py:class ItemPanel(wx.Panel):
     392        gmodeler.py:class ItemListCtrl(ModelListCtrl):
     393        gmodeler.py:class ItemCheckListCtrl(ItemListCtrl, listmix.CheckListCtrlMixin):
     394modules/modeler/dialogs.py
     395        gmodeler.py:class ModelDataDialog(ElementDialog):
     396        gmodeler.py:class ModelSearchDialog(wx.Dialog):
     397        gmodeler.py:class ModelRelationDialog(wx.Dialog):
     398        gmodeler.py:class ModelParamDialog(wx.Dialog): 
     399        gmodeler.py:class ModelListCtrl(wx.ListCtrl,
     400        gmodeler.py:class ModelItemDialog(wx.Dialog):
     401        gmodeler.py:class ModelLoopDialog(ModelItemDialog):
     402        gmodeler.py:class ModelConditionDialog(ModelItemDialog):
     403modules/modeler/preferences.py
     404        gmodeler.py:class PreferencesDialog(PreferencesBaseDialog):
     405        gmodeler.py:class PropertiesDialog(wx.Dialog):
     406modules/modeler/python_export.py
     407        gmodeler.py:class WritePythonFile:
     408
     409modules/nviz/wxcore.py
     410        wxnviz.py:class Nviz(object):
     411        wxnviz.py:class Texture(object):
     412        wxnviz.py:class ImageTexture(Texture):
     413        wxnviz.py:class TextTexture(Texture):
     414modules/nviz/mapdisp.py
     415        nviz_mapdisp.py:class NvizThread(Thread):
     416        nviz_mapdisp.py:class GLWindow(MapWindow, glcanvas.GLCanvas):
     417modules/nviz/preferences.py
     418        nviz_preferences.py:class NvizPreferencesDialog(PreferencesBaseDialog):
     419modules/nviz/core.py
     420        nviz_tools.py:class ScrolledPanel(SP.ScrolledPanel):
     421        nviz_tools.py:class NTCValidator(wx.PyValidator):
     422        nviz_tools.py:class NumTextCtrl(wx.TextCtrl):
     423        nviz_tools.py:class FloatSlider(wx.Slider):
     424modules/nviz/tools.py
     425        nviz_tools.py:class NvizToolWindow(FN.FlatNotebook):
     426        nviz_tools.py:class PositionWindow(wx.Window):
     427        nviz_tools.py:class ViewPositionWindow(PositionWindow):
     428        nviz_tools.py:class LightPositionWindow(PositionWindow):
     429modules/nviz/toolbars.py
     430        toolbars.py:class LMNvizToolbar(AbstractToolbar):
     431modules/nviz/workspace.py
     432        workspace.py:class Nviz.:
     433
     434modules/ogc_services/wms.py
     435        ogc_services.py:class WMSDialog(wx.Dialog):
     436modules/ogc_services/core.py
     437        ogc_services.py:class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
     438
     439modules/profile/toolbars.py
     440        toolbars.py:class ProfileToolbar(AbstractToolbar):
     441modules/profile/frame.py
     442        wxplot.py:class ProfileFrame(AbstractPlotFrame):
     443
     444modules/psmap/menudata.py
     445        menudata.py:class PsMapData(MenuData):
     446modules/psmap/toolbars.py
     447        toolbars.py:class PsMapToolbar(AbstractToolbar):
     448modules/psmap/core.py
     449        psmap_dialogs.py:class UnitConversion:
     450        psmap_dialogs.py:class TCValidator(wx.PyValidator):
     451        psmap_dialogs.py:class PenStyleComboBox(wx.combo.OwnerDrawnComboBox):
     452        psmap_dialogs.py:class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):
     453modules/psmap/instructions.py
     454        psmap_dialogs.py:class Instruction:
     455        psmap_dialogs.py:class InstructionObject:
     456        psmap_dialogs.py:class InitMap(InstructionObject):
     457        psmap_dialogs.py:class MapFrame(InstructionObject):
     458        psmap_dialogs.py:class PageSetup(InstructionObject):
     459        psmap_dialogs.py:class Mapinfo(InstructionObject):
     460        psmap_dialogs.py:class Text(InstructionObject):
     461        psmap_dialogs.py:class Scalebar(InstructionObject):
     462        psmap_dialogs.py:class RasterLegend(InstructionObject):
     463        psmap_dialogs.py:class VectorLegend(InstructionObject):
     464        psmap_dialogs.py:class Raster(InstructionObject):
     465        psmap_dialogs.py:class Vector(InstructionObject):
     466        psmap_dialogs.py:class VProperties(InstructionObject):
     467modules/psmap/dialogs.py
     468        psmap_dialogs.py:class PsmapDialog(wx.Dialog):
     469        psmap_dialogs.py:class PageSetupDialog(PsmapDialog):
     470        psmap_dialogs.py:class MapDialog(PsmapDialog):
     471        psmap_dialogs.py:class MapFramePanel(wx.Panel):
     472        psmap_dialogs.py:class RasterPanel(wx.Panel):
     473        psmap_dialogs.py:class VectorPanel(wx.Panel):
     474        psmap_dialogs.py:class RasterDialog(PsmapDialog):
     475        psmap_dialogs.py:class MainVectorDialog(PsmapDialog):
     476        psmap_dialogs.py:class VPropertiesDialog(PsmapDialog):
     477        psmap_dialogs.py:class LegendDialog(PsmapDialog):
     478        psmap_dialogs.py:class MapinfoDialog(PsmapDialog):
     479        psmap_dialogs.py:class ScalebarDialog(PsmapDialog):
     480        psmap_dialogs.py:class TextDialog(PsmapDialog):
     481modules/psmap/frame.py
     482        psmap.py:class PsMapFrame(wx.Frame):
     483modules/psmap/mapwindow.py
     484        psmap.py:class PsMapBufferedWindow(wx.Window):
     485
     486modules/scatterplot/toolbars.py
     487        toolbars.py:class ScatterplotToolbar(AbstractToolbar):
     488modules/scatterplot/frame.py
     489        wxplot.py:class ScatterFrame(AbstractPlotFrame):
     490
     491modules/vdigit/wxdisplay.py
     492        wxvdriver.py:class DisplayDriver:
     493modules/vdigit/wxcore.py
     494        wxvdigit.py:class VDigitError:
     495        wxvdigit.py:class IVDigit:
     496modules/vdigit/mapdisp.py
     497        mapdisp_vdigit.py:class VDigitWindow(BufferedWindow):
     498modules/vdigit/toolbars.py
     499        toolbars.py:class VDigitToolbar(AbstractToolbar):
     500modules/vdigit/core.py
     501        vdigit.py:class VDigit(IVDigit):
     502modules/vdigit/settings.py
     503        vdigit.py:class VDigitSettingsDialog(wx.Dialog):
     504modules/vdigit/dialogs.py
     505        vdigit.py:class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
     506        vdigit.py:class CategoryListCtrl(wx.ListCtrl,
     507        vdigit.py:class VDigitZBulkDialog(wx.Dialog):
     508        vdigit.py:class VDigitDuplicatesDialog(wx.Dialog):
     509        vdigit.py:class CheckListFeature(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
     510
     511modules/wxplot/dialogs.py
     512        wxplot_dialogs.py:class ProfileRasterDialog(wx.Dialog):
     513        wxplot_dialogs.py:class ScatterRasterDialog(wx.Dialog):
     514        wxplot_dialogs.py:class PlotStatsFrame(wx.Frame):
     515        wxplot_dialogs.py:class HistRasterDialog(wx.Dialog):
     516        wxplot_dialogs.py:class TextDialog(wx.Dialog):
     517        wxplot_dialogs.py:class OptDialog(wx.Dialog):
     518modules/wxplot/core.py
     519        wxplot.py:class AbstractPlotFrame(wx.Frame):
     520}}}
    94521== Vector digitizer ==
    95522