Skip to content

Commit

Permalink
Merge pull request #451 from lixun910/master
Browse files Browse the repository at this point in the history
GeoDa 1.8.9.3
  • Loading branch information
lixun910 committed Jul 13, 2016
2 parents 377f88b + ead0f75 commit af03fbf
Show file tree
Hide file tree
Showing 14 changed files with 130 additions and 76 deletions.
4 changes: 4 additions & 0 deletions DataViewer/DataSource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ bool IDataSource::IsWritable(GdaConst::DataSourceType ds_type)
ds_type == GdaConst::ds_gml ||
ds_type == GdaConst::ds_mapinfo ||
ds_type == GdaConst::ds_sqlite ||
ds_type == GdaConst::ds_gpkg ||
ds_type == GdaConst::ds_mysql ||
ds_type == GdaConst::ds_oci ||
ds_type == GdaConst::ds_postgresql )
Expand Down Expand Up @@ -87,6 +88,8 @@ wxString IDataSource::GetDataTypeNameByExt(wxString ext)
ds_format = "GeoJSON";
else if(ext.CmpNoCase("sqlite")==0)
ds_format = "SQLite";
else if(ext.CmpNoCase("gpkg")==0)
ds_format = "GPKG";
else if(ext.CmpNoCase("xls")==0)
ds_format = "XLS";
else if(ext.CmpNoCase("xlsx")==0)
Expand Down Expand Up @@ -182,6 +185,7 @@ IDataSource* IDataSource::CreateDataSource(wxString data_type_name,
type == GdaConst::ds_esri_personal_gdb ||
type == GdaConst::ds_odbc ||
type == GdaConst::ds_sqlite ||
type == GdaConst::ds_gpkg ||
type == GdaConst::ds_xls ||
type == GdaConst::ds_xlsx ||
type == GdaConst::ds_geo_json )
Expand Down
5 changes: 4 additions & 1 deletion DataViewer/DataSource.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,10 @@ class FileDataSource : public IDataSource {

virtual IDataSource* Clone();

virtual bool IsFileDataSource() { return ds_type == GdaConst::ds_sqlite ? false : true;}
virtual bool IsFileDataSource() {
return ds_type == GdaConst::ds_sqlite || ds_type == GdaConst::ds_gpkg ? false : true;
}

/**
* Return file path.
*/
Expand Down
1 change: 1 addition & 0 deletions DialogTools/ConnectDatasourceDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ IDataSource* ConnectDatasourceDlg::CreateDataSource()
// a special case: sqlite is a file based database, so we need to get
// avalible layers and prompt for user selecting
if (datasource->GetType() == GdaConst::ds_sqlite ||
datasource->GetType() == GdaConst::ds_gpkg||
datasource->GetType() == GdaConst::ds_osm ||
datasource->GetType() == GdaConst::ds_esri_personal_gdb||
datasource->GetType() == GdaConst::ds_esri_file_geodb)
Expand Down
1 change: 1 addition & 0 deletions DialogTools/DatasourceDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ void DatasourceDlg::Init()
ds_names.Add("GeoJSON (*.geojson;*.json)|*.geojson;*.json|"
"GeoJSON (*.geojson)|*.geojson|"
"GeoJSON (*.json)|*.json");
ds_names.Add("GeoPackage (*.gpkg)|*.gpkg");
ds_names.Add("SQLite/SpatiaLite (*.sqlite)|*.sqlite");

if( GeneralWxUtils::isWindows()){
Expand Down
8 changes: 6 additions & 2 deletions DialogTools/ExportDataDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event )
// cases: e.g. sqlite, ESRI FileGDB
if (datasource_type == 0) {
if (wxFileExists(ds_name)) {
if (ds_name.EndsWith(".sqlite")) {
if (ds_name.EndsWith(".sqlite") || ds_name.EndsWith(".gpkg")) {
// add new layer to existing sqlite
is_update = true;
} else {
Expand Down Expand Up @@ -394,9 +394,13 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event )
} catch (GdaException& e) {
if (e.type() == GdaException::NORMAL)
return;

// special clean up for file datasource
if ( !tmp_ds_name.empty() ) {
if ( wxFileExists(tmp_ds_name) && !tmp_ds_name.EndsWith(".sqlite")){
if ( wxFileExists(tmp_ds_name) &&
!tmp_ds_name.EndsWith(".sqlite") &&
!tmp_ds_name.EndsWith(".gpkg") )
{
wxRemoveFile(ds_name);
wxCopyFile(tmp_ds_name, ds_name);
wxRemoveFile(tmp_ds_name);
Expand Down
4 changes: 3 additions & 1 deletion DialogTools/SaveAsDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ void SaveAsDlg::OnBrowseDatasourceBtn ( wxCommandEvent& event )
ds_type != GdaConst::ds_geo_json &&
ds_type != GdaConst::ds_mapinfo &&
ds_type != GdaConst::ds_sqlite &&
ds_type != GdaConst::ds_csv) {
ds_type != GdaConst::ds_gpkg &&
ds_type != GdaConst::ds_csv)
{
msg << "Save is not supported on current data source type: "
<< ds_format << ". Please try to use \"File->Save As\" other data source. "
<< "However, the project file can still be saved as other project file.";
Expand Down
28 changes: 22 additions & 6 deletions GdaConst.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,16 @@ void GdaConst::init()
datasrc_field_illegal_regex[ds_sqlite] = wxEmptyString;
datasrc_field_casesensitive[ds_sqlite] = true;

datasrc_str_to_type["GPKG"] = ds_gpkg;
datasrc_type_to_prefix[ds_gpkg] = "";
datasrc_type_to_fullname[ds_gpkg] = "GeoPackage";
datasrc_table_lens[ds_gpkg] = 128;
datasrc_field_lens[ds_gpkg] = 128;
datasrc_field_warning[ds_gpkg] = no_field_warning;
datasrc_field_regex[ds_gpkg] = wxEmptyString;
datasrc_field_illegal_regex[ds_gpkg] = wxEmptyString;
datasrc_field_casesensitive[ds_gpkg] = true;

datasrc_str_to_type["WFS"] = ds_wfs;
datasrc_type_to_prefix[ds_wfs] = "WFS:";
datasrc_type_to_fullname[ds_wfs] = "OGC Web Feature Service";
Expand Down Expand Up @@ -670,23 +680,29 @@ void GdaConst::init()
for (ds_fld_map::iterator it=datasrc_req_flds.begin();
it != datasrc_req_flds.end(); it++) {
DataSourceType type = it->first;
if (type == ds_esri_file_geodb || type == ds_csv || type == ds_dbf ||
type == ds_gml || type == ds_kml || type == ds_mapinfo ||
type == ds_shapefile || type == ds_sqlite || type == ds_xls ||
type == ds_geo_json || type == ds_osm) {
if (type == ds_esri_file_geodb || type == ds_csv ||
type == ds_dbf || type == ds_gml ||
type == ds_kml || type == ds_mapinfo ||
type == ds_shapefile || type == ds_sqlite ||
type == ds_gpkg || type == ds_xls ||
type == ds_geo_json || type == ds_osm)
{
// These are simple files, and a file name must be supplied
it->second.insert("file");
} else if (type == ds_esri_arc_obj || type == ds_esri_personal_gdb ||
type == ds_esri_arc_sde || type == ds_mysql ||
type == ds_ms_sql || type == ds_oci || type == ds_odbc) {
type == ds_esri_arc_sde || type == ds_mysql ||
type == ds_ms_sql || type == ds_oci || type == ds_odbc)
{
it->second.insert("user");
it->second.insert("pwd");
it->second.insert("host");
it->second.insert("port");
it->second.insert("db_name");
} else if ( type == ds_wfs) {

it->second.insert("url");
} else if (type == ds_postgresql) {

it->second.insert("db_name");
}
}
Expand Down
2 changes: 1 addition & 1 deletion GdaConst.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class GdaConst {
ds_esri_personal_gdb, ds_esri_arc_sde,
ds_csv, ds_dbf, ds_geo_json, ds_gml, ds_kml,
ds_mapinfo, ds_mysql, ds_ms_sql, ds_oci, ds_odbc, ds_postgresql,
ds_shapefile, ds_sqlite, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown };
ds_shapefile, ds_sqlite, ds_gpkg, ds_wfs, ds_xls, ds_xlsx, ds_osm, ds_ods, ds_cartodb, ds_unknown };

static std::map<std::string, DataSourceType> datasrc_str_to_type;
static std::map<DataSourceType, std::string> datasrc_type_to_str;
Expand Down
10 changes: 10 additions & 0 deletions GeoDa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ EVT_CHAR_HOOK(GdaFrame::OnKeyEvent)

EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SHP"), GdaFrame::OnNewProjectFromShp)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_SQLITE"), GdaFrame::OnNewProjectFromSqlite)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GPKG"), GdaFrame::OnNewProjectFromGpkg)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_CSV"), GdaFrame::OnNewProjectFromCsv)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_DBF"), GdaFrame::OnNewProjectFromDbf)
EVT_MENU(XRCID("ID_NEW_PROJ_FROM_GDB"), GdaFrame::OnNewProjectFromGdb)
Expand Down Expand Up @@ -1223,6 +1224,7 @@ void GdaFrame::UpdateToolbarAndMenus()

GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SHP"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_SQLITE"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GPKG"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_CSV"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_DBF"), !proj_open);
GeneralWxUtils::EnableMenuItem(mb, "File", XRCID("ID_NEW_PROJ_FROM_GDB"), !proj_open);
Expand Down Expand Up @@ -1874,6 +1876,14 @@ void GdaFrame::OnNewProjectFromSqlite(wxCommandEvent& event)
NewProjectFromFile(dlg.GetPath());
}

void GdaFrame::OnNewProjectFromGpkg(wxCommandEvent& event)
{
wxString wc = "GeoPacakge (*.gpkg)|*.gpkg";
wxFileDialog dlg(this,"New Project From GeoPackage", "", "", wc);
if (dlg.ShowModal() != wxID_OK) return;
NewProjectFromFile(dlg.GetPath());
}

void GdaFrame::OnNewProjectFromCsv(wxCommandEvent& event)
{
wxString wc = "Comma Separated Value (*.csv)|*.csv";
Expand Down
1 change: 1 addition & 0 deletions GeoDa.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class GdaFrame: public wxFrame
void OnNewProject(wxCommandEvent& event);
void OnNewProjectFromShp(wxCommandEvent& event);
void OnNewProjectFromSqlite(wxCommandEvent& event);
void OnNewProjectFromGpkg(wxCommandEvent& event);
void OnNewProjectFromCsv(wxCommandEvent& event);
void OnNewProjectFromDbf(wxCommandEvent& event);
void OnNewProjectFromGdb(wxCommandEvent& event);
Expand Down
7 changes: 5 additions & 2 deletions ShapeOperations/OGRLayerProxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -596,8 +596,11 @@ bool OGRLayerProxy::AddGeometries(Shapefile::Main& p_main)
{
// NOTE: OGR/GDAL 2.0 is still implementing addGeomField feature.
// So, we only support limited datasources for adding geometries.
if ( !(ds_type == GdaConst::ds_geo_json || ds_type == GdaConst::ds_gml
|| ds_type == GdaConst::ds_kml || ds_type == GdaConst::ds_sqlite) )
if ( !(ds_type == GdaConst::ds_geo_json ||
ds_type == GdaConst::ds_gml ||
ds_type == GdaConst::ds_kml ||
ds_type == GdaConst::ds_sqlite ||
ds_type == GdaConst::ds_gpkg) )
{
return false;
}
Expand Down
130 changes: 68 additions & 62 deletions rc/GdaAppResources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20188,7 +20188,7 @@ static unsigned char xml_res_file_8[] = {
76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,
98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};

static size_t xml_res_size_9 = 159785;
static size_t xml_res_size_9 = 159913;
static unsigned char xml_res_file_9[] = {
60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63,
Expand Down Expand Up @@ -20218,73 +20218,79 @@ static unsigned char xml_res_file_9[] = {
32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,
116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,
95,70,82,79,77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,
97,98,101,108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100,
32,86,97,108,117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108,
62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,
69,87,95,80,82,79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32,
32,32,32,32,32,60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,
98,97,115,101,32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97,
95,70,82,79,77,95,71,80,75,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,
108,97,98,101,108,62,71,101,111,80,97,99,107,97,103,101,32,40,42,46,103,
112,107,103,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,
34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,
77,95,67,83,86,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,
108,62,67,111,109,109,97,32,83,101,112,97,114,97,116,101,100,32,86,97,108,
117,101,32,40,42,46,99,115,118,41,60,47,108,97,98,101,108,62,10,32,32,32,
32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,
60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,
79,74,95,70,82,79,77,95,68,66,70,34,62,10,32,32,32,32,32,32,32,32,32,32,
60,108,97,98,101,108,62,100,66,97,115,101,32,68,97,116,97,98,97,115,101,
32,70,105,108,101,32,40,42,46,100,98,102,41,60,47,108,97,98,101,108,62,
10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,
32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,
87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10,32,32,32,32,32,
32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83,79,78,32,40,42,
46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,
32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,
106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,
101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,
70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,
98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,107,117,112,
32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,60,47,108,97,
98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,74,83,79,78,34,62,10,
32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,74,83,
79,78,32,40,42,46,106,115,111,110,41,60,47,108,97,98,101,108,62,10,32,32,
32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,
32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,
79,74,95,70,82,79,77,95,71,77,76,34,62,10,32,32,32,32,32,32,32,32,32,32,
60,108,97,98,101,108,62,71,101,111,103,114,97,112,104,121,32,77,97,114,
107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,103,109,108,41,
60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,
101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,
109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77,
76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,
121,104,111,108,101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103,
101,32,40,42,46,107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,
111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,
73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,
74,95,70,82,79,77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32,
32,32,32,60,108,97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,
97,98,44,32,42,46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98,
101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,
32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,
68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32,
32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,
108,32,40,42,46,120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,
73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,77,95,75,77,76,34,62,10,32,
32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,101,121,104,111,108,
101,32,77,97,114,107,117,112,32,76,97,110,103,117,97,103,101,32,40,42,46,
107,109,108,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,
34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,95,70,82,79,
77,95,77,65,80,73,78,70,79,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,
97,98,101,108,62,77,97,112,73,110,102,111,32,40,42,46,116,97,98,44,32,42,
46,109,105,102,44,32,42,46,109,105,100,41,60,47,108,97,98,101,108,62,10,
32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,
101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,
95,80,82,79,74,95,70,82,79,77,95,88,76,83,34,62,10,32,32,32,32,32,32,32,
32,32,32,60,108,97,98,101,108,62,77,83,32,69,120,99,101,108,32,40,42,46,
120,108,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,
47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,
116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,
32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32,80,114,111,106,
101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,
99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101,108,62,10,32,32,
32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,
98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,
116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,80,82,79,
74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,
97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116,60,47,108,97,
98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108,62,67,116,
114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32,60,47,111,
98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,
109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,69,67,84,34,62,10,32,32,
32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,78,101,119,32,
109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69,67,84,34,
62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,
80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,
32,32,32,60,97,99,99,101,108,62,67,116,114,108,43,78,60,47,97,99,99,101,
108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,
32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,
101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,
78,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,
101,108,62,38,97,109,112,59,79,112,101,110,32,80,114,111,106,101,99,116,
60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,97,99,99,101,108,
62,67,116,114,108,43,79,60,47,97,99,99,101,108,62,10,32,32,32,32,32,32,
60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,
116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,
32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,65,83,95,80,82,79,74,69,
67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,
101,32,80,114,111,106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,
32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,
106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,
114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,
115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,
61,34,73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,
32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108,
62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,
99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,
47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,
73,68,95,83,65,86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,
32,32,60,108,97,98,101,108,62,83,97,118,101,60,47,108,97,98,101,108,62,
10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,
117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,
95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,
62,83,97,118,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,
Expand Down
Loading

0 comments on commit af03fbf

Please sign in to comment.