You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
323 lines
20 KiB
323 lines
20 KiB
package de.superx.common; |
|
|
|
import java.io.File; |
|
import java.util.Locale; |
|
import java.util.Optional; |
|
|
|
import org.junit.Assert; |
|
import org.junit.Before; |
|
import org.junit.Test; |
|
import org.springframework.jdbc.core.JdbcTemplate; |
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
import de.superx.BaseDbTest; |
|
import de.superx.TestUtils; |
|
|
|
public class GeschlechterZaehlungTest extends BaseDbTest { |
|
|
|
// in der Oberfläche verbirgt sich hinter der Auswahl "Köpfe" eine SQL-Filterklausel |
|
private static final String KOEPFE = "KoF_1"; |
|
private static final String KOEPFE_SQL = "studiengang_nr=1 and fach_nr=1"; |
|
// Da die Musterdaten jährlich verjüngt werden, sollte das Auswertungssemester dynamisch ermittelt werden |
|
private static final String LETZTES_WINTERSEMESTER = (TestUtils.getYearFromBranchName() - 1) + "2"; |
|
private static final String LETZTES_SOMMERSEMESTER = (TestUtils.getYearFromBranchName() - 1) + "1"; |
|
private static final String AKTUELLES_WINTERSEMESTER = TestUtils.getYearFromBranchName() + "2"; |
|
private static final String AKTUELLES_SOMMERSEMESTER = TestUtils.getYearFromBranchName() + "1"; |
|
private static final String BESTANDEN = "BE"; |
|
private static final String HAUPTPRUEFUNG = "2"; |
|
private static final String USER_NAME = "admin"; |
|
private static final String HOERERSTATUS_ALLE = "HRST_2"; |
|
private static final String SOS_MASKEN_PATH = String.join(File.separator, |
|
"superx", "WEB-INF", "conf", "edustore", "db", "module", "sos", "masken"); |
|
private String aktuelleZahlenStudierende; |
|
private String aktuelleZahlenPruefungen; |
|
|
|
@Before |
|
public void setup() { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
aktuelleZahlenStudierende = jt.queryForObject("SELECT tid FROM sos_stichtag_mit_art WHERE name = 'Aktuelle Zahlen/Studierende'", String.class); |
|
aktuelleZahlenPruefungen = jt.queryForObject("SELECT tid FROM sos_stichtag_mit_art WHERE name = 'Aktuelle Zahlen/Prüfungen'", String.class); |
|
} |
|
|
|
@Test |
|
public void test16000() throws Exception { |
|
System.out.println("KOEPFE : " + KOEPFE ); |
|
System.out.println("AKTUELLE_ZAHLEN_STUDIERENDE: " + aktuelleZahlenStudierende); |
|
System.out.println("AKTUELLE_ZAHLEN_PRUEFUNGEN : " + aktuelleZahlenPruefungen ); |
|
System.out.println("BESTANDEN : " + BESTANDEN ); |
|
System.out.println("HAUPTPRUEFUNG : " + HAUPTPRUEFUNG ); |
|
System.out.println("MANDANTEN_ID : " + MANDANTEN_ID ); |
|
System.out.println("USER_NAME : " + USER_NAME ); |
|
System.out.println("SOS_MASKEN_PATH : " + SOS_MASKEN_PATH ); |
|
System.out.println("LETZTES_WINTERSEMESTER : " + LETZTES_WINTERSEMESTER); |
|
System.out.println("LETZTES_SOMMERSEMESTER : " + LETZTES_SOMMERSEMESTER); |
|
System.out.println("AKTUELLES_WINTERSEMESTER : " + AKTUELLES_WINTERSEMESTER); |
|
System.out.println("AKTUELLES_SOMMERSEMESTER : " + AKTUELLES_SOMMERSEMESTER); |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
Integer maskenTid = Integer.valueOf(16000); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein |
|
request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Seit Semester", LETZTES_SOMMERSEMESTER); |
|
request.addParameter("Bis Semester", AKTUELLES_WINTERSEMESTER); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16000 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.first(); |
|
int indGes = result.getTrueColumnNumber("gesamt"); |
|
int indGes1FS = result.getTrueColumnNumber("ges_1fs"); |
|
int indFrauen = result.getTrueColumnNumber("frauen"); |
|
int indFrauen1FS = result.getTrueColumnNumber("frau_1fs"); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGes).toString()); |
|
int ges1FSRef = Integer.parseInt(resultRow.get(indGes1FS).toString()); |
|
int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
int frauen1FSRef = Integer.parseInt(resultRow.get(indFrauen1FS).toString()); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16000 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.first(); |
|
int gesamt = Integer.parseInt(resultRow.get(indGes).toString()); |
|
int ges1FS = Integer.parseInt(resultRow.get(indGes1FS).toString()); |
|
int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
int frauen1FS = Integer.parseInt(resultRow.get(indFrauen1FS).toString()); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Gesamtanzahl im 1. Fachsemester sollte gleich bleiben", ges1FSRef, ges1FS); |
|
Assert.assertEquals("Die Gesamtanzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); |
|
Assert.assertEquals("Die Gesamtanzahl Frauen im 1. Fachsemester sollte um 1 verringert sein", frauen1FSRef - 1, frauen1FS); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); |
|
} |
|
|
|
@Test |
|
public void test16040() throws Exception { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
Integer maskenTid = Integer.valueOf(16040); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein |
|
request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16040 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.last(); |
|
int indFach = result.getTrueColumnNumber("fach"); |
|
int indGesamt = result.getTrueColumnNumber("gesamt"); |
|
int indFrauen = result.getTrueColumnNumber("frauen"); |
|
String fachRef = resultRow.get(indFach).toString(); |
|
Assert.assertEquals("Spalte Fach sollte den Zeichenfolge 'Gesamt:' enthalten", "Gesamt:", fachRef); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16040 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.last(); |
|
String fach = resultRow.get(indFach).toString(); |
|
int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
Assert.assertEquals("Spalte Fach sollte den Zeichenfolge 'Gesamt:' enthalten", "Gesamt:", fach); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Gesamtanzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); |
|
} |
|
|
|
@Test |
|
public void test16300() throws Exception { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
Integer maskenTid = Integer.valueOf(16300); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein |
|
request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); |
|
request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16300 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.first(); |
|
int indGesamt = result.getTrueColumnNumber("gesamt"); |
|
int indRegelGes = result.getTrueColumnNumber("regel_ges"); |
|
int indGesamtW = result.getTrueColumnNumber("gesamt_w"); |
|
int indRegelW = result.getTrueColumnNumber("regel_w"); |
|
int indStruktur = result.getTrueColumnNumber("struktur"); |
|
String strukturRef = resultRow.get(indStruktur).toString(); |
|
Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", strukturRef); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int regelGesRef = Integer.parseInt(resultRow.get(indRegelGes).toString()); |
|
int gesamtWRef = Integer.parseInt(resultRow.get(indGesamtW).toString()); |
|
int regelWRef = Integer.parseInt(resultRow.get(indRegelW).toString()); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16300 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.first(); |
|
String struktur = resultRow.get(indStruktur).toString(); |
|
int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int regelGes = Integer.parseInt(resultRow.get(indRegelGes).toString()); |
|
int gesamtW = Integer.parseInt(resultRow.get(indGesamtW).toString()); |
|
int regelW = Integer.parseInt(resultRow.get(indRegelW).toString()); |
|
Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", struktur); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", regelGesRef, regelGes); |
|
Assert.assertEquals("Die Anzahl sollte um eins verringert sein", gesamtWRef - 1, gesamtW); |
|
Assert.assertEquals("Die Anzahl sollte um eins verringert sein", regelWRef - 1, regelW); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); |
|
} |
|
|
|
@Test |
|
public void test16220() throws Exception { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
Integer maskenTid = Integer.valueOf(16220); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein |
|
request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); |
|
request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16220 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.first(); |
|
int indGesamt = result.getTrueColumnNumber("gesamt"); |
|
int indFrauen = result.getTrueColumnNumber("frauen"); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16220 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.first(); |
|
int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Anzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); |
|
} |
|
|
|
@Test |
|
public void test16200() throws Exception { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
Integer maskenTid = Integer.valueOf(16200); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein |
|
request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); |
|
request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16200 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.first(); |
|
int indGesamt = result.getTrueColumnNumber("gesamt"); |
|
int indGes1FS = result.getTrueColumnNumber("ges_1fs"); |
|
int indGes1HS = result.getTrueColumnNumber("ges_1hs"); |
|
int indWGesamt = result.getTrueColumnNumber("w_gesamt"); |
|
int indW1FS = result.getTrueColumnNumber("w_1fs"); |
|
int indW1HS = result.getTrueColumnNumber("w_1hs"); |
|
int indText = result.getTrueColumnNumber("text"); |
|
String textRef = resultRow.get(indText).toString(); |
|
Assert.assertEquals("Spalte Studiengang/'text' sollte den Zeichenfolge 'Alle' enthalten", "Alle", textRef); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int gesamt1FSRef = Integer.parseInt(resultRow.get(indGes1FS).toString()); |
|
int gesamt1HSRef = Integer.parseInt(resultRow.get(indGes1HS).toString()); |
|
int WGesamtRef = Integer.parseInt(resultRow.get(indWGesamt).toString()); |
|
int W1FSRef = Integer.parseInt(resultRow.get(indW1FS).toString()); |
|
int W1HSRef = Integer.parseInt(resultRow.get(indW1HS).toString()); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16200 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.first(); |
|
String text = resultRow.get(indText).toString(); |
|
Assert.assertEquals("Spalte Studiengang/'text' sollte den Zeichenfolge 'Alle' enthalten", "Alle", text); |
|
int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int gesamt1FS = Integer.parseInt(resultRow.get(indGes1FS).toString()); |
|
int gesamt1HS = Integer.parseInt(resultRow.get(indGes1HS).toString()); |
|
int WGesamt = Integer.parseInt(resultRow.get(indWGesamt).toString()); |
|
int W1FS = Integer.parseInt(resultRow.get(indW1FS).toString()); |
|
int W1HS = Integer.parseInt(resultRow.get(indW1HS).toString()); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamt1FSRef, gesamt1FS); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamt1HSRef, gesamt1HS); |
|
Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", WGesamtRef - 1, WGesamt); |
|
Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", W1FSRef - 1, W1FS); |
|
Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", W1HSRef - 1, W1HS); |
|
jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); |
|
} |
|
|
|
@Test |
|
public void test16450() throws Exception { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
String query = "SELECT sum(summe) FROM sos_lab_aggr WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER |
|
+ " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" |
|
+ BESTANDEN + "' AND " + KOEPFE_SQL + " AND geschlecht=2;"; |
|
Integer diffW = Optional.ofNullable(jt.queryForObject(query, Integer.class)).orElse(Integer.valueOf(0)); |
|
Integer maskenTid = Integer.valueOf(16450); |
|
Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); |
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
request.addParameter("Köpfe oder Fälle ?", KOEPFE); |
|
request.addParameter("Stichtag Prüfungen", aktuelleZahlenPruefungen); // das ist die id für den Bestand "aktuelle Zahlen" |
|
request.addParameter("Semester", LETZTES_SOMMERSEMESTER); |
|
request.addParameter("Prüfungsstatus", BESTANDEN); |
|
request.addParameter("Studienabschnitt", HAUPTPRUEFUNG); |
|
maske.setFieldDefaults(user, request, true); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16450 (1)"); |
|
//System.out.println(maske.getLastsql()); |
|
SuperX_el result = maske.getResult_el(); |
|
SxResultSet resultSet = result.getResultSet(); |
|
SxResultRow resultRow = resultSet.first(); |
|
int indGesamt = result.getTrueColumnNumber("gesamt"); |
|
int indWGesamt = result.getTrueColumnNumber("w_gesamt"); |
|
int indStruktur = result.getTrueColumnNumber("struktur"); |
|
String strukturRef = resultRow.get(indStruktur).toString(); |
|
Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", strukturRef); |
|
int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
int wGesamtRef = Integer.parseInt(resultRow.get(indWGesamt).toString()); |
|
jt.update("UPDATE sos_lab_aggr SET geschlecht = 4 WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER |
|
+ " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" + BESTANDEN + "' AND " + KOEPFE_SQL + " AND geschlecht=2;"); |
|
maske.runQuery(user, request, null); |
|
//System.out.println("sql Maske 16450 (2)"); |
|
//System.out.println(maske.getLastsql()); |
|
result = maske.getResult_el(); |
|
resultSet = result.getResultSet(); |
|
resultRow = resultSet.first(); |
|
String struktur = resultRow.get(indStruktur).toString(); |
|
int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); |
|
Object indWGesamtObj = resultRow.get(indWGesamt); |
|
int wGesamt = indWGesamtObj != null ? Integer.parseInt(indWGesamtObj.toString()) : 0; |
|
Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", struktur); |
|
Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); |
|
Assert.assertEquals("Die Anzahl Frauen sollte verringert sein", wGesamtRef - diffW.intValue(), wGesamt); |
|
jt.update("UPDATE sos_lab_aggr SET geschlecht = 2 WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER |
|
+ " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" + BESTANDEN + "' AND " + KOEPFE_SQL |
|
+ " AND geschlecht = 4;"); |
|
} |
|
}
|
|
|