Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bsj-models-for-rubbers
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dasharatha.vamshi
bsj-models-for-rubbers
Commits
d73b79d8
Commit
d73b79d8
authored
Dec 21, 2023
by
sagar.shee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
# Updated exception clauses
parent
88724804
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
600 additions
and
567 deletions
+600
-567
app.py
app.py
+48
-43
main.py
main.py
+296
-280
scripts/section_utils/bof_section.py
scripts/section_utils/bof_section.py
+2
-2
scripts/section_utils/extruder_section.py
scripts/section_utils/extruder_section.py
+251
-241
scripts/section_utils/pickup_section.py
scripts/section_utils/pickup_section.py
+3
-1
No files found.
app.py
View file @
d73b79d8
...
@@ -199,6 +199,7 @@ def load_and_predict(df_grouped, index_no):
...
@@ -199,6 +199,7 @@ def load_and_predict(df_grouped, index_no):
def
start_prediction
(
raw_path
,
viscosity_path
,
index_no
,
raw_skip_rows
,
viscosity_skip_rows
):
def
start_prediction
(
raw_path
,
viscosity_path
,
index_no
,
raw_skip_rows
,
viscosity_skip_rows
):
try
:
logger
.
info
(
f
"Starting prediction for {index_no}"
)
logger
.
info
(
f
"Starting prediction for {index_no}"
)
logger
.
info
(
"Reading raw file data"
)
logger
.
info
(
"Reading raw file data"
)
df
=
read_raw_data
(
raw_path
,
raw_skip_rows
)
df
=
read_raw_data
(
raw_path
,
raw_skip_rows
)
...
@@ -249,6 +250,9 @@ def start_prediction(raw_path, viscosity_path, index_no, raw_skip_rows, viscosit
...
@@ -249,6 +250,9 @@ def start_prediction(raw_path, viscosity_path, index_no, raw_skip_rows, viscosit
# load_and_predict(df_grouped, index_no)
# load_and_predict(df_grouped, index_no)
model_trainer
(
df_grouped
,
index_no
)
model_trainer
(
df_grouped
,
index_no
)
except
Exception
as
err
:
logger
.
error
(
f
"Exception in main prediction {str(err)}"
)
raise
Exception
(
str
(
err
))
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
...
@@ -274,3 +278,4 @@ if __name__ == "__main__":
...
@@ -274,3 +278,4 @@ if __name__ == "__main__":
start_prediction
(
raw_file_path
,
viscosity_file_path
,
index_number
,
raw_file_skip_rows
,
viscosity_file_skip_rows
)
start_prediction
(
raw_file_path
,
viscosity_file_path
,
index_number
,
raw_file_skip_rows
,
viscosity_file_skip_rows
)
except
Exception
as
e
:
except
Exception
as
e
:
logger
.
exception
(
f
"Module failed because of error {e}"
)
logger
.
exception
(
f
"Module failed because of error {e}"
)
raise
Exception
(
str
(
e
))
main.py
View file @
d73b79d8
...
@@ -293,7 +293,7 @@ def return_fy676a_pick_batch_no_df(raw_df, viscosity_df, bof_date_dict, bof_batc
...
@@ -293,7 +293,7 @@ def return_fy676a_pick_batch_no_df(raw_df, viscosity_df, bof_date_dict, bof_batc
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
if
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
<=
0
:
if
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
<=
0
:
value
=
0
raise
Exception
(
f
"Length passed through in pick up section for {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
value
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
@@ -423,7 +423,7 @@ def return_fy664g_pick_batch_no_df(raw_df, viscosity_df, bof_date_dict, index_no
...
@@ -423,7 +423,7 @@ def return_fy664g_pick_batch_no_df(raw_df, viscosity_df, bof_date_dict, index_no
if
minimum
<=
0
:
if
minimum
<=
0
:
minimum
=
0
minimum
=
0
if
day_df
[
'length passed through.1'
]
.
max
()
-
minimum
<=
0
:
if
day_df
[
'length passed through.1'
]
.
max
()
-
minimum
<=
0
:
value
=
0
raise
Exception
(
f
"Length passed through in pick up section for {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
'length passed through.1'
]
.
max
()
-
minimum
value
=
day_df
[
'length passed through.1'
]
.
max
()
-
minimum
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
@@ -538,6 +538,8 @@ def preprocess_pickup_section(raw_df, index_number, viscosity_df):
...
@@ -538,6 +538,8 @@ def preprocess_pickup_section(raw_df, index_number, viscosity_df):
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
day_length_dic
[
each_day
]
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
day_length_dic
[
each_day
]
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
if
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
<=
0
:
raise
Exception
(
f
"Length passed through in pick up section for {each_day} is 0"
)
''' Reading viscosity file with skipping 2 rows '''
''' Reading viscosity file with skipping 2 rows '''
viscosity_df
[
'Mixing date'
]
=
pd
.
to_datetime
(
viscosity_df
[
'Mixing date'
])
viscosity_df
[
'Mixing date'
]
=
pd
.
to_datetime
(
viscosity_df
[
'Mixing date'
])
...
@@ -774,6 +776,7 @@ def preprocess_viscosity_section(viscosity_df, index_number):
...
@@ -774,6 +776,7 @@ def preprocess_viscosity_section(viscosity_df, index_number):
def
mixer_section_start_end_time
(
raw_df
,
index_no
):
def
mixer_section_start_end_time
(
raw_df
,
index_no
):
try
:
mixer_cols
=
[
'Time Stamp'
,
mixer_cols
=
[
'Time Stamp'
,
'Size No (INDEX No).3'
,
'Size No (INDEX No).3'
,
'Size name'
,
'Size name'
,
...
@@ -810,11 +813,13 @@ def mixer_section_start_end_time(raw_df, index_no):
...
@@ -810,11 +813,13 @@ def mixer_section_start_end_time(raw_df, index_no):
date_dict
[
each_bt
]
=
{
"start_time"
:
str
(
list
(
df_nw
[
'time_min'
])[
0
]),
date_dict
[
each_bt
]
=
{
"start_time"
:
str
(
list
(
df_nw
[
'time_min'
])[
0
]),
'end_time'
:
str
(
list
(
df_nw
[
'time_max'
])[
0
])}
'end_time'
:
str
(
list
(
df_nw
[
'time_max'
])[
0
])}
return
date_dict
return
date_dict
except
Exception
as
err
:
logger
.
error
(
f
'Exception in mixer time fetch: {str(err)}'
)
raise
Exception
(
str
(
err
))
def
return_batch_no_df_1
(
def
return_batch_no_df_1
(
raw_df
,
viscosity_df
,
date_dict
,
bof_cols
,
additional_cols
,
index_no
):
raw_df
,
viscosity_df
,
date_dict
,
bof_cols
,
additional_cols
,
index_no
try
:
):
raw_df
=
raw_df
.
sort_values
(
by
=
'Time Stamp'
)
raw_df
=
raw_df
.
sort_values
(
by
=
'Time Stamp'
)
raw_df
[
'Time Stamp'
]
=
pd
.
to_datetime
(
raw_df
[
'Time Stamp'
])
raw_df
[
'Time Stamp'
]
=
pd
.
to_datetime
(
raw_df
[
'Time Stamp'
])
raw_df
[
"day"
]
=
raw_df
[
"Time Stamp"
]
.
dt
.
date
raw_df
[
"day"
]
=
raw_df
[
"Time Stamp"
]
.
dt
.
date
...
@@ -839,7 +844,7 @@ def return_batch_no_df_1(
...
@@ -839,7 +844,7 @@ def return_batch_no_df_1(
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_bof_df
[
sorted_bof_df
[
"day"
]
==
each_day
]
day_df
=
sorted_bof_df
[
sorted_bof_df
[
"day"
]
==
each_day
]
if
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
<=
0
:
if
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
<=
0
:
value
=
0
raise
Exception
(
f
"Discharge length in extruder section for {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
value
=
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
@@ -974,9 +979,13 @@ def return_batch_no_df_1(
...
@@ -974,9 +979,13 @@ def return_batch_no_df_1(
+
test_df
[
"day"
]
.
astype
(
"str"
)
+
test_df
[
"day"
]
.
astype
(
"str"
)
)
)
return
test_df
return
test_df
except
Exception
as
err
:
logger
.
error
(
f
'Exception in batch formation in extruder: {str(err)}'
)
raise
Exception
(
str
(
err
))
def
preprocess_extruder_section
(
df
,
index_number
,
vis_df
):
def
preprocess_extruder_section
(
df
,
index_number
,
vis_df
):
try
:
extruder_cols
=
ExtruderConstants
.
extruder_cols
extruder_cols
=
ExtruderConstants
.
extruder_cols
additional_columns
=
[
'Time Stamp'
]
additional_columns
=
[
'Time Stamp'
]
df_extruder
=
df
[
extruder_cols
+
additional_columns
]
df_extruder
=
df
[
extruder_cols
+
additional_columns
]
...
@@ -1023,7 +1032,9 @@ def preprocess_extruder_section(df, index_number, vis_df):
...
@@ -1023,7 +1032,9 @@ def preprocess_extruder_section(df, index_number, vis_df):
df_extruder_grouped
=
df_extruder_grouped
.
fillna
(
df_extruder_grouped
.
mean
())
df_extruder_grouped
=
df_extruder_grouped
.
fillna
(
df_extruder_grouped
.
mean
())
df_extruder_grouped
=
round
(
df_extruder_grouped
,
6
)
df_extruder_grouped
=
round
(
df_extruder_grouped
,
6
)
return
df_extruder_grouped
return
df_extruder_grouped
except
Exception
as
err
:
logger
.
error
(
f
'Exception in extruder preprocess: {str(err)}'
)
raise
Exception
(
str
(
err
))
def
return_batch_no_df
(
raw_df
,
viscosity_df
,
date_dict
,
index_number
):
def
return_batch_no_df
(
raw_df
,
viscosity_df
,
date_dict
,
index_number
):
...
@@ -1047,7 +1058,7 @@ def return_batch_no_df(raw_df, viscosity_df, date_dict, index_number):
...
@@ -1047,7 +1058,7 @@ def return_batch_no_df(raw_df, viscosity_df, date_dict, index_number):
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_bof_df
[
sorted_bof_df
[
'day'
]
==
each_day
]
day_df
=
sorted_bof_df
[
sorted_bof_df
[
'day'
]
==
each_day
]
if
(
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
())
<=
0
:
if
(
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
())
<=
0
:
value
=
0
raise
Exception
(
f
"Length passed through in bof section for {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
()
value
=
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
()
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
@@ -1856,6 +1867,7 @@ def load_and_predict(df_grouped, index_no, model_path):
...
@@ -1856,6 +1867,7 @@ def load_and_predict(df_grouped, index_no, model_path):
def
start_prediction
(
raw_path
,
viscosity_path
,
index_no
,
raw_skip_rows
,
viscosity_skip_rows
):
def
start_prediction
(
raw_path
,
viscosity_path
,
index_no
,
raw_skip_rows
,
viscosity_skip_rows
):
try
:
logger
.
info
(
f
"Starting prediction for {index_no}"
)
logger
.
info
(
f
"Starting prediction for {index_no}"
)
logger
.
info
(
"Reading raw file data"
)
logger
.
info
(
"Reading raw file data"
)
df
=
read_raw_data
(
raw_path
,
raw_skip_rows
)
df
=
read_raw_data
(
raw_path
,
raw_skip_rows
)
...
@@ -1906,6 +1918,9 @@ def start_prediction(raw_path, viscosity_path, index_no, raw_skip_rows, viscosit
...
@@ -1906,6 +1918,9 @@ def start_prediction(raw_path, viscosity_path, index_no, raw_skip_rows, viscosit
# load_and_predict(df_grouped, index_no, model_path)
# load_and_predict(df_grouped, index_no, model_path)
model_trainer
(
df_grouped
,
index_no
,
model_path
)
model_trainer
(
df_grouped
,
index_no
,
model_path
)
except
Exception
as
er
:
logger
.
error
(
f
"Error in main prediction: {str(er)}"
)
raise
Exception
(
str
(
er
))
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
...
@@ -1919,3 +1934,4 @@ if __name__ == "__main__":
...
@@ -1919,3 +1934,4 @@ if __name__ == "__main__":
start_prediction
(
raw_file_path
,
viscosity_file_path
,
index_number
,
raw_file_skip_rows
,
viscosity_file_skip_rows
)
start_prediction
(
raw_file_path
,
viscosity_file_path
,
index_number
,
raw_file_skip_rows
,
viscosity_file_skip_rows
)
except
Exception
as
e
:
except
Exception
as
e
:
logger
.
exception
(
f
"Module failed because of error {e}"
)
logger
.
exception
(
f
"Module failed because of error {e}"
)
raise
Exception
(
str
(
e
))
scripts/section_utils/bof_section.py
View file @
d73b79d8
...
@@ -72,7 +72,7 @@ def return_batch_no_df(raw_df, viscosity_df, date_dict, index_number):
...
@@ -72,7 +72,7 @@ def return_batch_no_df(raw_df, viscosity_df, date_dict, index_number):
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_bof_df
[
sorted_bof_df
[
'day'
]
==
each_day
]
day_df
=
sorted_bof_df
[
sorted_bof_df
[
'day'
]
==
each_day
]
if
(
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
())
<=
0
:
if
(
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
())
<=
0
:
value
=
0
raise
Exception
(
f
"Length passed through in bof section for the day {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
()
value
=
day_df
[
'length passed through'
]
.
max
()
-
day_df
[
'length passed through'
]
.
min
()
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
...
scripts/section_utils/extruder_section.py
View file @
d73b79d8
...
@@ -12,6 +12,7 @@ warnings.filterwarnings("ignore")
...
@@ -12,6 +12,7 @@ warnings.filterwarnings("ignore")
def
mixer_section_start_end_time
(
raw_df
,
index_no
):
def
mixer_section_start_end_time
(
raw_df
,
index_no
):
try
:
mixer_cols
=
[
'Time Stamp'
,
mixer_cols
=
[
'Time Stamp'
,
'Size No (INDEX No).3'
,
'Size No (INDEX No).3'
,
'Size name'
,
'Size name'
,
...
@@ -48,11 +49,13 @@ def mixer_section_start_end_time(raw_df, index_no):
...
@@ -48,11 +49,13 @@ def mixer_section_start_end_time(raw_df, index_no):
date_dict
[
each_bt
]
=
{
"start_time"
:
str
(
list
(
df_nw
[
'time_min'
])[
0
]),
date_dict
[
each_bt
]
=
{
"start_time"
:
str
(
list
(
df_nw
[
'time_min'
])[
0
]),
'end_time'
:
str
(
list
(
df_nw
[
'time_max'
])[
0
])}
'end_time'
:
str
(
list
(
df_nw
[
'time_max'
])[
0
])}
return
date_dict
return
date_dict
except
Exception
as
err
:
logger
.
error
(
f
'Exception in extruder mixer time fetch {str(err)}'
)
raise
Exception
(
str
(
err
))
def
return_batch_no_df
(
def
return_batch_no_df
(
raw_df
,
viscosity_df
,
date_dict
,
bof_cols
,
additional_cols
,
index_no
):
raw_df
,
viscosity_df
,
date_dict
,
bof_cols
,
additional_cols
,
index_no
try
:
):
raw_df
=
raw_df
.
sort_values
(
by
=
'Time Stamp'
)
raw_df
=
raw_df
.
sort_values
(
by
=
'Time Stamp'
)
raw_df
[
'Time Stamp'
]
=
pd
.
to_datetime
(
raw_df
[
'Time Stamp'
])
raw_df
[
'Time Stamp'
]
=
pd
.
to_datetime
(
raw_df
[
'Time Stamp'
])
raw_df
[
"day"
]
=
raw_df
[
"Time Stamp"
]
.
dt
.
date
raw_df
[
"day"
]
=
raw_df
[
"Time Stamp"
]
.
dt
.
date
...
@@ -77,7 +80,7 @@ def return_batch_no_df(
...
@@ -77,7 +80,7 @@ def return_batch_no_df(
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_bof_df
[
sorted_bof_df
[
"day"
]
==
each_day
]
day_df
=
sorted_bof_df
[
sorted_bof_df
[
"day"
]
==
each_day
]
if
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
<=
0
:
if
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
<=
0
:
value
=
0
raise
Exception
(
f
"Discharge length in extruder section for the day {each_day} is 0"
)
else
:
else
:
value
=
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
value
=
day_df
[
"discharge length"
]
.
max
()
-
day_df
[
"discharge length"
]
.
min
()
day_length_dic
[
each_day
]
=
value
day_length_dic
[
each_day
]
=
value
...
@@ -212,9 +215,13 @@ def return_batch_no_df(
...
@@ -212,9 +215,13 @@ def return_batch_no_df(
+
test_df
[
"day"
]
.
astype
(
"str"
)
+
test_df
[
"day"
]
.
astype
(
"str"
)
)
)
return
test_df
return
test_df
except
Exception
as
err
:
logger
.
error
(
f
'Exception in generating extruder batch {str(err)}'
)
raise
Exception
(
str
(
err
))
def
preprocess_extruder_section
(
df
,
index_number
,
vis_df
):
def
preprocess_extruder_section
(
df
,
index_number
,
vis_df
):
try
:
extruder_cols
=
ExtruderConstants
.
extruder_cols
extruder_cols
=
ExtruderConstants
.
extruder_cols
additional_columns
=
[
'Time Stamp'
]
additional_columns
=
[
'Time Stamp'
]
df_extruder
=
df
[
extruder_cols
+
additional_columns
]
df_extruder
=
df
[
extruder_cols
+
additional_columns
]
...
@@ -261,3 +268,6 @@ def preprocess_extruder_section(df, index_number, vis_df):
...
@@ -261,3 +268,6 @@ def preprocess_extruder_section(df, index_number, vis_df):
df_extruder_grouped
=
df_extruder_grouped
.
fillna
(
df_extruder_grouped
.
mean
())
df_extruder_grouped
=
df_extruder_grouped
.
fillna
(
df_extruder_grouped
.
mean
())
df_extruder_grouped
=
round
(
df_extruder_grouped
,
6
)
df_extruder_grouped
=
round
(
df_extruder_grouped
,
6
)
return
df_extruder_grouped
return
df_extruder_grouped
except
Exception
as
err
:
logger
.
error
(
f
"Exception in extruder preprocess {str(err)}"
)
raise
Exception
(
str
(
err
))
scripts/section_utils/pickup_section.py
View file @
d73b79d8
...
@@ -505,6 +505,8 @@ def preprocess_pickup_section(raw_df, index_number, viscosity_df):
...
@@ -505,6 +505,8 @@ def preprocess_pickup_section(raw_df, index_number, viscosity_df):
for
each_day
in
dt_list
:
for
each_day
in
dt_list
:
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
day_df
=
sorted_pick_df
[
sorted_pick_df
[
'day'
]
==
each_day
]
day_length_dic
[
each_day
]
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
day_length_dic
[
each_day
]
=
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
if
day_df
[
'length passed through.1'
]
.
max
()
-
day_df
[
'length passed through.1'
]
.
min
()
<=
0
:
raise
Exception
(
f
"Length passed through in pick up section for {each_day} is 0"
)
''' Reading viscosity file with skipping 2 rows '''
''' Reading viscosity file with skipping 2 rows '''
viscosity_df
[
'Mixing date'
]
=
pd
.
to_datetime
(
viscosity_df
[
'Mixing date'
])
viscosity_df
[
'Mixing date'
]
=
pd
.
to_datetime
(
viscosity_df
[
'Mixing date'
])
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment