diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/cfgEventSpawns.xml b/Missions/DayZCommunityOfflineMode.ChernarusPlus/cfgEventSpawns.xml index e63fead0..b870c81d 100644 --- a/Missions/DayZCommunityOfflineMode.ChernarusPlus/cfgEventSpawns.xml +++ b/Missions/DayZCommunityOfflineMode.ChernarusPlus/cfgEventSpawns.xml @@ -454,7 +454,7 @@ - + diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/animals.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/animals.bin new file mode 100644 index 00000000..b42b9938 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/animals.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/building.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/building.bin new file mode 100644 index 00000000..f7eb2401 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/building.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_000.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_000.bin new file mode 100644 index 00000000..1e0f8de5 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_000.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_001.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_001.bin new file mode 100644 index 00000000..23f360c0 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_001.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_002.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_002.bin new file mode 100644 index 00000000..2ad1e1b7 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_002.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.002 new file mode 100644 index 00000000..0a6a084f Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.bin new file mode 100644 index 00000000..991c5452 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_003.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.002 new file mode 100644 index 00000000..f7950406 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.bin new file mode 100644 index 00000000..51cf88bd Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_004.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.002 new file mode 100644 index 00000000..5748d136 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.bin new file mode 100644 index 00000000..85d609e9 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_005.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.002 new file mode 100644 index 00000000..f31e0c2f Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.bin new file mode 100644 index 00000000..d1ff58b6 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_006.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.002 new file mode 100644 index 00000000..3c2998a8 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.bin new file mode 100644 index 00000000..290912d5 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_007.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.002 new file mode 100644 index 00000000..73e1f567 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.bin new file mode 100644 index 00000000..7da0e8d2 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_008.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.002 new file mode 100644 index 00000000..0813e812 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.bin new file mode 100644 index 00000000..3c209602 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_009.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.002 new file mode 100644 index 00000000..d94e3614 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.bin new file mode 100644 index 00000000..f1055859 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_010.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.002 b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.002 new file mode 100644 index 00000000..a9677de4 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.002 differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.bin new file mode 100644 index 00000000..fbb21e01 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/dynamic_011.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/events.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/events.bin new file mode 100644 index 00000000..bbaf6468 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/events.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/types.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/types.bin new file mode 100644 index 00000000..309b5e29 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/types.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/vehicles.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/vehicles.bin new file mode 100644 index 00000000..ed64ff47 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/vehicles.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/zombies.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/zombies.bin new file mode 100644 index 00000000..c8cdf1eb Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/data/zombies.bin differ diff --git a/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/spawnpoints.bin b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/spawnpoints.bin new file mode 100644 index 00000000..d7a2ee73 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.ChernarusPlus/storage_-1/spawnpoints.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/DayZCommunityOfflineMode.bat b/Missions/DayZCommunityOfflineMode.sakhal/DayZCommunityOfflineMode.bat new file mode 100644 index 00000000..8a44abca --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/DayZCommunityOfflineMode.bat @@ -0,0 +1,9 @@ +@echo off + +taskkill /F /IM DayZ_x64.exe /T + +RD /s /q "storage_-1" > nul 2>&1 + +cd ../../ + +start DayZ_x64.exe -mission=.\Missions\DayZCommunityOfflineMode.sakhal -nosplash -noPause -noBenchmark -filePatching -doLogs -scriptDebug=true \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/MapGroupCluster.xml b/Missions/DayZCommunityOfflineMode.sakhal/MapGroupCluster.xml new file mode 100644 index 00000000..1ddc748a --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/MapGroupCluster.xml @@ -0,0 +1,50004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/New Text Document.txt b/Missions/DayZCommunityOfflineMode.sakhal/New Text Document.txt new file mode 100644 index 00000000..e69de29b diff --git a/Missions/DayZCommunityOfflineMode.sakhal/areaflags.map b/Missions/DayZCommunityOfflineMode.sakhal/areaflags.map new file mode 100644 index 00000000..4fde7513 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/areaflags.map differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgEconomyCore.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgEconomyCore.xml new file mode 100644 index 00000000..b15dd4c5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgEconomyCore.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgEventSpawns.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgEventSpawns.xml new file mode 100644 index 00000000..b870c81d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgEventSpawns.xml @@ -0,0 +1,1460 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinition.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinition.xml new file mode 100644 index 00000000..bb5569b8 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinition.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinitionUser.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinitionUser.xml new file mode 100644 index 00000000..f42f89ac --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgLimitsDefinitionUser.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgPlayerSpawnPoints.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgPlayerSpawnPoints.xml new file mode 100644 index 00000000..bc09f129 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgPlayerSpawnPoints.xml @@ -0,0 +1,383 @@ + + + + + + + + 30.0 + 70.0 + + 25.0 + 70.0 + + 0.5 + 2.0 + + + + + + 8 + + 40.0 + + 40.0 + + 0.5 + + 2.0 + + -45 + 45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgRandomPresets.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgRandomPresets.xml new file mode 100644 index 00000000..8358348c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgRandomPresets.xml @@ -0,0 +1,721 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgSpawnableTypes.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgSpawnableTypes.xml new file mode 100644 index 00000000..befac166 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgSpawnableTypes.xml @@ -0,0 +1,3811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgeffectarea.json b/Missions/DayZCommunityOfflineMode.sakhal/cfgeffectarea.json new file mode 100644 index 00000000..e3f44cfb --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgeffectarea.json @@ -0,0 +1,177 @@ +{ + "Areas": [ + { "AreaName": "Ship-SW", + "Type": "ContaminatedArea_Static", + "TriggerType": "ContaminatedTrigger", + "Data": { + "Pos": [ 13684, 0, 11073 ], + "Radius": 100, + "PosHeight": 22, + "NegHeight": 10, + "InnerRingCount": 1, + "InnerPartDist": 50, + "OuterRingToggle": 1, + "OuterPartDist": 50, + "OuterOffset": 0, + "VerticalLayers": 0, + "VerticalOffset": 0, + "ParticleName": "graphics/particles/contaminated_area_gas_bigass" + }, + "PlayerData": { + "AroundPartName": "graphics/particles/contaminated_area_gas_around", + "TinyPartName": "graphics/particles/contaminated_area_gas_around_tiny", + "PPERequesterType": "PPERequester_ContaminatedAreaTint" + } + }, + { "AreaName": "Ship-NE", + "Type": "ContaminatedArea_Static", + "TriggerType": "ContaminatedTrigger", + "Data": { + "Pos": [ 13881, 0, 11172 ], + "Radius": 100, + "PosHeight": 26, + "NegHeight": 10, + "InnerRingCount": 1, + "InnerPartDist": 50, + "OuterRingToggle": 1, + "OuterPartDist": 50, + "OuterOffset": 0, + "VerticalLayers": 0, + "VerticalOffset": 0, + "ParticleName": "graphics/particles/contaminated_area_gas_bigass" + }, + "PlayerData": { + "AroundPartName": "graphics/particles/contaminated_area_gas_around", + "TinyPartName": "graphics/particles/contaminated_area_gas_around_tiny", + "PPERequesterType": "PPERequester_ContaminatedAreaTint" + } + }, + { "AreaName": "Ship-Central", + "Type": "ContaminatedArea_Static", + "TriggerType": "ContaminatedTrigger", + "Data": { + "Pos": [ 13752, 0, 11164 ], + "Radius": 100, + "PosHeight": 22, + "NegHeight": 2, + "InnerRingCount": 1, + "InnerPartDist": 50, + "OuterRingToggle": 1, + "OuterPartDist": 60, + "OuterOffset": 0, + "VerticalLayers": 0, + "VerticalOffset": 0, + "ParticleName": "graphics/particles/contaminated_area_gas_bigass" + }, + "PlayerData": { + "AroundPartName": "graphics/particles/contaminated_area_gas_around", + "TinyPartName": "graphics/particles/contaminated_area_gas_around_tiny", + "PPERequesterType": "PPERequester_ContaminatedAreaTint" + } + }, + { "AreaName": "Pavlovo-North", + "Type": "ContaminatedArea_Static", + "TriggerType": "ContaminatedTrigger", + "Data": { + "Pos": [ 2043, 0, 3485 ], + "Radius": 150, + "PosHeight": 25, + "NegHeight": 20, + "InnerRingCount": 2, + "InnerPartDist": 50, + "OuterRingToggle": 1, + "OuterPartDist": 40, + "OuterOffset": 0, + "VerticalLayers": 0, + "VerticalOffset": 0, + "ParticleName": "graphics/particles/contaminated_area_gas_bigass" + }, + "PlayerData": { + "AroundPartName": "graphics/particles/contaminated_area_gas_around", + "TinyPartName": "graphics/particles/contaminated_area_gas_around_tiny", + "PPERequesterType": "PPERequester_ContaminatedAreaTint" + } + }, + { "AreaName": "Pavlovo-South", + "Type": "ContaminatedArea_Static", + "TriggerType": "ContaminatedTrigger", + "Data": { + "Pos": [ 2164, 0, 3335 ], + "Radius": 150, + "PosHeight": 11, + "NegHeight": 10, + "InnerRingCount": 2, + "InnerPartDist": 50, + "OuterRingToggle": 1, + "OuterPartDist": 40, + "OuterOffset": 0, + "VerticalLayers": 0, + "VerticalOffset": 0, + "ParticleName": "graphics/particles/contaminated_area_gas_bigass" + }, + "PlayerData": { + "AroundPartName": "graphics/particles/contaminated_area_gas_around", + "TinyPartName": "graphics/particles/contaminated_area_gas_around_tiny", + "PPERequesterType": "PPERequester_ContaminatedAreaTint" + } + } + ], + + "SafePositions":[ + [434, 13624], + [360, 10986], + [1412, 13505], + [1290, 11773], + [5742, 8568], + [4191, 4620], + [4949, 6569], + [1018, 7138], + [5041, 2640], + [6895, 7915], + [6128, 8120], + [4422, 8117], + [2811, 10209], + [1954, 2417], + [3633, 8708], + [5222, 5737], + [3546, 2630], + [2373, 5516], + [2462, 6879], + [1653, 3600], + [11774, 14570], + [8228, 9345], + [11100, 13400], + [9333, 8697], + [11513, 12203], + [4955, 10603], + [5090, 15054], + [6513, 14579], + [3483, 14941], + [4016, 11194], + [7607, 12384], + [4307, 9528], + [3266, 12352], + [4432, 13285], + [5473, 12455], + [9731, 13685], + [2745, 7784], + [8492, 14128], + [3501, 13292], + [7912, 10943], + [4165, 10134], + [10536, 7871], + [1467, 14288], + [5479, 9709], + [9453, 11963], + [319, 9212], + [8009, 14843], + [7206, 7158], + [12303, 13598], + [3435, 5959], + [4060, 12050], + [6633, 2988], + [870, 2095], + [10286, 9071], + [10371, 5690] + ] +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgenvironment.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgenvironment.xml new file mode 100644 index 00000000..3c087808 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgenvironment.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgeventgroups.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgeventgroups.xml new file mode 100644 index 00000000..05f0e7b6 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgeventgroups.xml @@ -0,0 +1,1124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfggameplay.json b/Missions/DayZCommunityOfflineMode.sakhal/cfggameplay.json new file mode 100644 index 00000000..95922f6b --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfggameplay.json @@ -0,0 +1,100 @@ +{ + "version": 120, + "GeneralData": + { + "disableBaseDamage": false, + "disableContainerDamage": false, + "disableRespawnDialog": false + }, + "PlayerData": + { + "disablePersonalLight": false, + "StaminaData": + { + "sprintStaminaModifierErc": 1.0, + "sprintStaminaModifierCro": 1.0, + "staminaWeightLimitThreshold": 6000.0, + "staminaMax": 100.0, + "staminaKgToStaminaPercentPenalty": 1.75, + "staminaMinCap": 5.0, + "sprintSwimmingStaminaModifier": 1.0, + "sprintLadderStaminaModifier": 1.0, + "meleeStaminaModifier": 1.0, + "obstacleTraversalStaminaModifier": 1.0, + "holdBreathStaminaModifier": 1.0 + }, + "ShockHandlingData": + { + "shockRefillSpeedConscious": 5.0, + "shockRefillSpeedUnconscious": 1.0, + "allowRefillSpeedModifier": true + }, + "MovementData": + { + "timeToStrafeJog": 0.1, + "rotationSpeedJog": 0.3, + "timeToSprint": 0.45, + "timeToStrafeSprint": 0.3, + "rotationSpeedSprint": 0.15, + "allowStaminaAffectInertia": true + }, + "DrowningData": + { + "staminaDepletionSpeed": 10.0, + "healthDepletionSpeed": 10.0, + "shockDepletionSpeed": 10.0 + } + }, + "WorldsData": + { + "lightingConfig": 1, + "objectSpawnersArr": [], + "environmentMinTemps": [-3.0, -2.0, 0.0, 4.0, 9.0, 14.0, 18.0, 17.0, 12.0, 7.0, 4.0, 0.0], + "environmentMaxTemps": [3.0, 5.0, 7.0, 14.0, 19.0, 24.0, 26.0, 25.0, 21.0, 16.0, 10.0, 5.0], + "wetnessWeightModifiers": [1.0, 1.0, 1.33, 1.66, 2.0] + }, + "BaseBuildingData": + { + "HologramData": + { + "disableIsCollidingBBoxCheck": false, + "disableIsCollidingPlayerCheck": false, + "disableIsClippingRoofCheck": false, + "disableIsBaseViableCheck": false, + "disableIsCollidingGPlotCheck": false, + "disableIsCollidingAngleCheck": false, + "disableIsPlacementPermittedCheck": false, + "disableHeightPlacementCheck": false, + "disableIsUnderwaterCheck": false, + "disableIsInTerrainCheck": false + }, + "ConstructionData": + { + "disablePerformRoofCheck": false, + "disableIsCollidingCheck": false, + "disableDistanceCheck": false + } + }, + "UIData": + { + "use3DMap": false, + "HitIndicationData": + { + "hitDirectionOverrideEnabled": false, + "hitDirectionBehaviour": 1, + "hitDirectionStyle": 0, + "hitDirectionIndicatorColorStr": "0xffbb0a1e", + "hitDirectionMaxDuration": 2.0, + "hitDirectionBreakPointRelative": 0.2, + "hitDirectionScatter": 10.0, + "hitIndicationPostProcessEnabled": true + } + }, + "MapData": + { + "ignoreMapOwnership": false, + "ignoreNavItemsOwnership": false, + "displayPlayerPosition": false, + "displayNavInfo": true + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgignorelist.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgignorelist.xml new file mode 100644 index 00000000..95d7d3f5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgignorelist.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgundergroundtriggers.json b/Missions/DayZCommunityOfflineMode.sakhal/cfgundergroundtriggers.json new file mode 100644 index 00000000..96e3518b --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgundergroundtriggers.json @@ -0,0 +1,6 @@ +{ + "Triggers": + [ + + ] +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/cfgweather.xml b/Missions/DayZCommunityOfflineMode.sakhal/cfgweather.xml new file mode 100644 index 00000000..010bf501 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/cfgweather.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/BaseModuleInclude.c b/Missions/DayZCommunityOfflineMode.sakhal/core/BaseModuleInclude.c new file mode 100644 index 00000000..e2c86c9d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/BaseModuleInclude.c @@ -0,0 +1,5 @@ +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\ModuleManager.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\StaticFunctions.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\CommunityOfflineClient.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\CommunityOfflineServer.c" \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineClient.c b/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineClient.c new file mode 100644 index 00000000..421eb19f --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineClient.c @@ -0,0 +1,136 @@ +class CommunityOfflineClient extends MissionGameplay +{ + protected bool HIVE_ENABLED = true; //Local Hive / Economy / Infected spawn + + protected bool m_loaded; + + void CommunityOfflineClient() + { + m_loaded = false; + + NewModuleManager(); + } + + override void OnInit() + { + super.OnInit(); + + InitHive(); + + SetupWeather(); + + SpawnPlayer(); + + GetDayZGame().SetMissionPath( "$saves:CommunityOfflineMode\\" ); // CameraToolsMenu + } + + override void OnMissionStart() + { + super.OnMissionStart(); + + COM_GetModuleManager().OnInit(); + COM_GetModuleManager().OnMissionStart(); + } + + override void OnMissionFinish() + { + COM_GetModuleManager().OnMissionFinish(); + + CloseAllMenus(); + + DestroyAllMenus(); + + if( GetHive() ) + { + DestroyHive(); + } + + super.OnMissionFinish(); + } + + void OnMissionLoaded() + { + COM_GetModuleManager().OnMissionLoaded(); + } + + override void OnUpdate( float timeslice ) + { + super.OnUpdate( timeslice ); + + COM_GetModuleManager().OnUpdate( timeslice ); + + if( !m_loaded && !GetDayZGame().IsLoading() ) + { + m_loaded = true; + OnMissionLoaded(); + } + } + + void SpawnPlayer() + { +// #ifndef MODULE_PERSISTENCY +// GetGame().SelectPlayer( NULL, COM_CreateCustomDefaultCharacter() ); +// #endif + +// #ifdef DISABLE_PERSISTENCY + GetGame().SelectPlayer( NULL, COM_CreateCustomDefaultCharacter() ); +// #endif + } + + void InitHive() + { + if ( GetGame().IsClient() && GetGame().IsMultiplayer() ) return; + + // RD /s /q "storage_-1" > nul 2>&1 + if ( !HIVE_ENABLED ) return; + + Hive oHive = GetHive(); + + if( !oHive ) + { + oHive = CreateHive(); + } + + if( oHive ) + { + oHive.InitOffline(); + } + + oHive.SetShardID("100"); + oHive.SetEnviroment("stable"); + } + + static void SetupWeather() + { + Weather weather = g_Game.GetWeather(); + + weather.GetOvercast().SetLimits( 0.0 , 2.0 ); + weather.GetRain().SetLimits( 0.0 , 2.0 ); + weather.GetFog().SetLimits( 0.0 , 2.0 ); + + weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.0 ); + weather.GetRain().SetForecastChangeLimits( 0.0, 0.0 ); + weather.GetFog().SetForecastChangeLimits( 0.0, 0.0 ); + + weather.GetOvercast().SetForecastTimeLimits( 1800 , 1800 ); + weather.GetRain().SetForecastTimeLimits( 600 , 600 ); + weather.GetFog().SetForecastTimeLimits( 600 , 600 ); + + weather.GetOvercast().Set( 0.0, 0, 0 ); + weather.GetRain().Set( 0.0, 0, 0 ); + weather.GetFog().Set( 0.0, 0, 0 ); + + weather.SetWindMaximumSpeed( 50 ); + weather.SetWindFunctionParams( 0, 0, 1 ); + } + + override UIScriptedMenu CreateScriptedMenu(int id) + { + if(id == EditorMenu.MENU_ID) + { + return new EditorMenu(); + } + + return super.CreateScriptedMenu(id); + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineServer.c b/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineServer.c new file mode 100644 index 00000000..c35f40e1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/CommunityOfflineServer.c @@ -0,0 +1,122 @@ +class CommunityOfflineServer : MissionServer +{ + protected bool m_loaded; + + void CommunityOfflineServer() + { + Print( "CommunityOfflineServer::CommunityOfflineServer()" ); + m_loaded = false; + + COM_GetModuleManager(); + } + + void ~CommunityOfflineServer() + { + Print( "CommunityOfflineServer::~CommunityOfflineServer()" ); + } + + override void OnInit() + { + super.OnInit(); + + SetupWeather(); + + COM_GetModuleManager().OnInit(); + } + + override void OnMissionStart() + { + super.OnMissionStart(); + + COM_GetModuleManager().OnMissionStart(); + } + + override void OnMissionFinish() + { + COM_GetModuleManager().OnMissionFinish(); + + super.OnMissionFinish(); + } + + void OnMissionLoaded() + { + COM_GetModuleManager().OnMissionLoaded(); + } + + + override void OnUpdate( float timeslice ) + { + super.OnUpdate( timeslice ); + + COM_GetModuleManager().OnUpdate( timeslice ); + + if( !m_loaded && !GetDayZGame().IsLoading() ) + { + m_loaded = true; + OnMissionLoaded(); + } + } + + override void OnMouseButtonRelease( int button ) + { + super.OnMouseButtonRelease( button ); + + //COM_GetModuleManager().OnMouseButtonRelease( button ); + } + + override void OnMouseButtonPress( int button ) + { + super.OnMouseButtonPress( button ); + + //COM_GetModuleManager().OnMouseButtonPress( button ); + } + + override void OnKeyPress( int key ) + { + super.OnKeyPress(key); + + //COM_GetModuleManager().OnKeyPress( key ); + } + + override void OnKeyRelease( int key ) + { + super.OnKeyRelease( key ); + + //COM_GetModuleManager().OnKeyRelease( key ); + } + + static void SetupWeather() + { + //Offical DayZ SA weather code + Weather weather = g_Game.GetWeather(); + + weather.GetOvercast().SetLimits( 0.0 , 2.0 ); + weather.GetRain().SetLimits( 0.0 , 2.0 ); + weather.GetFog().SetLimits( 0.0 , 2.0 ); + + weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.0 ); + weather.GetRain().SetForecastChangeLimits( 0.0, 0.0 ); + weather.GetFog().SetForecastChangeLimits( 0.0, 0.0 ); + + weather.GetOvercast().SetForecastTimeLimits( 1800 , 1800 ); + weather.GetRain().SetForecastTimeLimits( 600 , 600 ); + weather.GetFog().SetForecastTimeLimits( 600 , 600 ); + + weather.GetOvercast().Set( 0.0, 0, 0 ); + weather.GetRain().Set( 0.0, 0, 0 ); + weather.GetFog().Set( 0.0, 0, 0 ); + + weather.SetWindMaximumSpeed( 50 ); + weather.SetWindFunctionParams( 0, 0, 1 ); + } + + override UIScriptedMenu CreateScriptedMenu(int id) + { + if(id == EditorMenu.MENU_ID) + { + return new EditorMenu(); + } + + return super.CreateScriptedMenu(id); + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/KeyMouseBinding.c b/Missions/DayZCommunityOfflineMode.sakhal/core/KeyMouseBinding.c new file mode 100644 index 00000000..0277ccbd --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/KeyMouseBinding.c @@ -0,0 +1,74 @@ +class KeyMouseBinding +{ + protected typename m_Object; + protected ref array< string > m_KeyBinds; + + protected string m_CallbackFunction; + protected string m_UAInputName; + protected string m_Description; + + protected bool m_CanBeUsedInMenu; + + protected int m_ActionType; + + void KeyMouseBinding( typename object, string callback, string description, bool menu = false ) + { + m_Object = object; + m_KeyBinds = new array< string >; + + m_CallbackFunction = callback; + m_UAInputName = "UA" + object.ToString() + callback; + + m_Description = description; + + m_CanBeUsedInMenu = menu; + + m_ActionType = KeyMouseActionType.PRESS; + } + + bool CanBeUsedInMenu() + { + return m_CanBeUsedInMenu; + } + + void AddBinding( string key, int action = 1) + { + m_KeyBinds.Insert( key ); + m_ActionType = action; + } + + array< string > GetBindings() + { + return m_KeyBinds; + } + + void SetActionType( int type ) + { + m_ActionType = type; + } + + int GetActionType() + { + return m_ActionType; + } + + typename GetObject() + { + return m_Object; + } + + string GetCallBackFunction() + { + return m_CallbackFunction; + } + + string GetUAInputName() + { + return m_UAInputName; + } + + string GetDescription() + { + return m_Description; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/Module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/Module.c new file mode 100644 index 00000000..00c20730 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/Module.c @@ -0,0 +1,142 @@ +/* + Extend this class for separate objects + Only override mouse and key functions for extra utility +*/ +class Module +{ + protected bool m_Enabled; + protected bool m_PreventInput; + protected ref set< ref KeyMouseBinding > m_KeyBindings; + + void Module() + { + m_Enabled = true; + m_PreventInput = false; + m_KeyBindings = new set< ref KeyMouseBinding >; + } + + void ~Module() + { + } + + void Init() + { + RegisterKeyMouseBindings(); + } + + void Toggle() + { + m_Enabled = !m_Enabled; + } + + void PreventInput(bool prevent) + { + m_PreventInput = prevent; + } + + string GetModuleName() + { + return ClassName(); + } + + typename GetModuleType() + { + return GetModuleName().ToType(); + } + + bool IsEnabled() + { + return m_Enabled; + } + + bool IsPreventingInput() + { + return m_PreventInput; + } + + void RegisterKeyMouseBindings() + { + } + + void RegisterKeyMouseBinding( KeyMouseBinding binding ) + { + m_KeyBindings.Insert( binding ); + + UAInput input = GetUApi().RegisterInput( binding.GetUAInputName(), binding.GetDescription(), "core" ); + + if ( input == NULL ) return; + + input.AddAlternative(); + + auto bindings = binding.GetBindings(); + for ( int i = 0; i < bindings.Count(); i++ ) + { + input.BindCombo( bindings[i] ); + } + } + + set< ref KeyMouseBinding > GetBindings() + { + return m_KeyBindings; + } + + // Override functions + + void onUpdate( float timeslice ) + { + } + + /* Mouse Functions */ + + void onMouseMove() + { + } + + void onMouseDragY ( int state ) + { + } + + void onMouseDragX ( int state ) + { + } + + void onMouseWheelUp( int state ) + { + } + + void onMouseWheelDown( int state ) + { + } + + void onMouseButtonPress( int button ) + { + } + + void onMouseButtonRelease( int button ) + { + } + + /* Key Functions */ + + void onKeyPress( int key ) + { + } + + void onKeyRelease( int key ) + { + } + + /* Mission Functions */ + + void onMissionStart() + { + } + + void onMissionFinish() + { + } + + void onMissionLoaded() + { + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/ModuleManager.c b/Missions/DayZCommunityOfflineMode.sakhal/core/ModuleManager.c new file mode 100644 index 00000000..4099abe3 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/ModuleManager.c @@ -0,0 +1,241 @@ +#define COM_MODULES_OLDLOADING + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\Module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\KeyMouseBinding.c" + +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Admintool\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComKeyBinds\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComMenu\\module.c" +//#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\DebugMonitor\\module.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\BarrelCrosshair\\module.c" +#endif + +class KeyMouseActionType +{ + static int PRESS = 1; + static int RELEASE = 2; + static int HOLD = 4; + static int DOUBLECLICK = 8; + static int VALUE = 16; +} + +class ModuleManager +{ + protected ref array< ref Module > m_Modules; + + void ModuleManager() + { + RegisterModules(); + } + + void ~ModuleManager() + { + m_Modules.Clear(); + + delete m_Modules; + } + + void RegisterModule( Module module ) + { + m_Modules.Insert( module ); + } + + void RegisterModules() + { + m_Modules = new array< ref Module >; + + #ifdef MODULE_COM_EDITOR + RegisterModule( new ObjectEditor ); + #endif + #ifdef MODULE_CAMERA_TOOL + RegisterModule( new CameraTool ); + #endif + #ifdef MODULE_COM_KEYBINDS + RegisterModule( new COMKeyBinds ); + #endif + #ifdef MODULE_PERSISTENCY + RegisterModule( new PersistencyModule ); + #endif + #ifdef MODULE_DEBUG_MONITOR + RegisterModule( new CustomDebugMonitor ); + #endif + } + + void ReloadSettings() + { + for ( int i = 0; i < m_Modules.Count(); ++i) + { + // m_Modules.Get(i).ReloadSettings(); + } + } + + array< ref Module > GetModules() + { + return m_Modules; + } + + void OnInit() + { + for ( int i = 0; i < m_Modules.Count(); ++i) + { + m_Modules.Get(i).Init(); + } + + GetUApi().UpdateControls(); + } + + void OnMissionStart() + { + for ( int i = 0; i < m_Modules.Count(); ++i) + { + m_Modules.Get(i).onMissionStart(); + } + } + + void OnMissionFinish() + { + for ( int i = 0; i < m_Modules.Count(); ++i) + { + m_Modules.Get(i).onMissionFinish(); + } + } + + void OnMissionLoaded() + { + for ( int i = 0; i < m_Modules.Count(); ++i) + { + m_Modules.Get(i).onMissionLoaded(); + } + } + + void OnUpdate( float timeslice ) + { + //if ( GetGame().IsServer() && GetGame().IsMultiplayer() ) return; + + bool inputIsFocused = false; + + Widget focusedWidget = GetFocus(); + if ( focusedWidget && focusedWidget.ClassName().Contains( "EditBoxWidget" ) ) + { + inputIsFocused = true; + } + + for ( int i = 0; i < m_Modules.Count(); ++i) + { + Module module = m_Modules.Get(i); + + if ( !module.IsPreventingInput() ) + { + auto bindings = module.GetBindings(); + + for ( int nBinding = 0; nBinding < bindings.Count(); ++nBinding ) + { + auto k_m_Binding = bindings[ nBinding ]; + + if ( !k_m_Binding.CanBeUsedInMenu() && GetGame().GetUIManager().GetMenu()) + { + continue; + } + + if ( inputIsFocused ) + { + continue; + } + + UAInput input = GetUApi().GetInputByName( k_m_Binding.GetUAInputName() ); + + //COM_Message( k_m_Binding.GetUAInputName() + " -> " + input.LocalPress() ); + + //input.ForceEnable( true ); + + int action = k_m_Binding.GetActionType(); + + if ( action & KeyMouseActionType.PRESS && input.LocalPress() ) + { + GetGame().GameScript.CallFunction( GetModule( k_m_Binding.GetObject() ), k_m_Binding.GetCallBackFunction(), NULL, 0 ); + } + + if ( action & KeyMouseActionType.RELEASE && input.LocalRelease() ) + { + GetGame().GameScript.CallFunction( GetModule( k_m_Binding.GetObject() ), k_m_Binding.GetCallBackFunction(), NULL, 0 ); + } + + if ( action & KeyMouseActionType.HOLD && input.LocalHold() ) + { + GetGame().GameScript.CallFunction( GetModule( k_m_Binding.GetObject() ), k_m_Binding.GetCallBackFunction(), NULL, 0 ); + } + + if ( action & KeyMouseActionType.DOUBLECLICK && input.LocalDoubleClick() ) + { + GetGame().GameScript.CallFunction( GetModule( k_m_Binding.GetObject() ), k_m_Binding.GetCallBackFunction(), NULL, 0 ); + } + + if ( action & KeyMouseActionType.VALUE && input.LocalValue() != 0 ) + { + GetGame().GameScript.CallFunction( GetModule( k_m_Binding.GetObject() ), k_m_Binding.GetCallBackFunction(), NULL, input.LocalValue() ); + } + } + } + + module.onUpdate( timeslice ); + } + } + + Module GetModule( typename module_Type ) + { + for ( int i = 0; i < m_Modules.Count(); ++i ) + { + Module module = m_Modules.Get(i); + + if ( module.GetModuleType() == module_Type) + { + return module; + } + } + + return NULL; + } + + Module GetModuleByName( string module_name ) + { + for ( int i = 0; i < m_Modules.Count(); ++i ) + { + Module module = m_Modules.Get( i ); + + if (module.GetModuleName() == module_name) + { + return module; + } + } + + return NULL; + } +} + +ref ModuleManager g_com_ModuleManager; + +ModuleManager COM_GetModuleManager() +{ + if( !g_com_ModuleManager ) + { + g_com_ModuleManager = new ref ModuleManager(); + } + + return g_com_ModuleManager; +} + +ModuleManager NewModuleManager() +{ + if ( g_com_ModuleManager ) + { + delete g_com_ModuleManager; + } + + g_com_ModuleManager = new ref ModuleManager(); + + return g_com_ModuleManager; +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/StaticFunctions.c b/Missions/DayZCommunityOfflineMode.sakhal/core/StaticFunctions.c new file mode 100644 index 00000000..ff5f4121 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/StaticFunctions.c @@ -0,0 +1,395 @@ +static string COM_FormatFloat( float value, int decimals ) +{ + if ( !value.ToString().Contains(".") ) return value.ToString(); + + string result = ""; + array output = new array; + + value.ToString().Split(".", output); + + if ( output.Count() == 0 ) return value.ToString(); + + if ( decimals == 0 ) return output.Get(0); + + string right = output.Get(1).Substring(0, decimals); + result = output.Get(0) + "." + right; + return result; +} + +static string COM_VectorToString( vector vec ) +{ + string result = vec.ToString(); + result.Replace( "<", "" ); + result.Replace( ">", "" ); + result.Replace( ",", "" ); + + return result; +} + +static string COM_VectorToString( vector vec, int decimals ) +{ + string result = ""; + result = COM_FormatFloat(vec[0], decimals) + "|" + COM_FormatFloat(vec[1], decimals) + "|" + COM_FormatFloat(vec[2], decimals); + + return result; +} + +static TStringArray COM_GetChildrenFromBaseClass( string strConfigName, string strBaseClass ) +{ + string child_name = ""; + int count = GetGame().ConfigGetChildrenCount ( strConfigName ); + TStringArray class_names = new TStringArray; + + for (int p = 0; p < count; p++) + { + GetGame().ConfigGetChildName ( strConfigName, p, child_name ); + + if ( GetGame().IsKindOf(child_name, strBaseClass ) && ( child_name != strBaseClass ) ) + { + class_names.Insert(child_name); + } + } + + return class_names; +} + +static TVectorArray COM_GetSpawnPoints() +{ + return { "15135.1 0 13901.1", "15017.8 0 13892.4", "14887.1 0 14547.9", "14749.7 0 13248.7", + "14697.6 0 13418.4", "14537.3 0 14755.7", "14415.3 0 14025.2", "14338.0 0 12859.5", + "14263.8 0 12748.7", "14172.2 0 12304.9", "14071.4 0 12033.3", "14054.9 0 11341.3", + "14017.8 0 2959.1", "13905.5 0 12489.7", "13852.4 0 11686.0", "13846.6 0 12050.0", + "13676.0 0 12262.1", "13617.4 0 12759.8", "13610.1 0 11223.6", "13594.3 0 4064.0", + "13587.8 0 6026.5", "13571.1 0 3056.8", "13552.6 0 4653.7", "13529.9 0 3968.3", + "13520.8 0 4223.7", "13504.0 0 5004.5", "13476.7 0 6136.3", "13441.6 0 5262.2", + "13426.6 0 5747.3", "13416.8 0 11840.4", "13400.8 0 4120.7", "13395.8 0 5902.8", + "13385.0 0 3946.6", "13374.4 0 6454.3", "13367.1 0 10837.1", "13366.3 0 4906.0", + "13337.1 0 5120.8", "13326.7 0 5489.1", "13312.7 0 6771.1", "13288.7 0 11415.1", + "13261.6 0 11785.2", "13171.6 0 6534.8", "13159.8 0 5401.7", "13155.2 0 5475.2", + "13084.9 0 7938.6", "13056.8 0 4848.5", "13048.1 0 8357.6", "13048.1 0 3867.7", + "12991.7 0 7287.1", "12983.0 0 5539.1", "12978.9 0 9727.8", "12950.2 0 5226.7", + "12942.1 0 8393.1", "12891.5 0 3673.9", "12628.7 0 10495.2", "12574.3 0 3592.8", + "12566.3 0 6682.6", "12465.2 0 8009.0", "12354.5 0 3480.0", "13262.8 0 7225.8" }; +} + +static set< Object > COM_GetObjectsAt( vector from, vector to, Object ignore = NULL, float radius = 0.5, Object with = NULL ) +{ + vector contact_pos; + vector contact_dir; + int contact_component; + + set< Object > geom = new set< Object >; + set< Object > view = new set< Object >; + + DayZPhysics.RaycastRV( from, to, contact_pos, contact_dir, contact_component, geom, with, ignore, false, false, ObjIntersectGeom, radius ); + DayZPhysics.RaycastRV( from, to, contact_pos, contact_dir, contact_component, view, with, ignore, false, false, ObjIntersectView, radius ); + + if ( geom.Count() > 0 ) + { + return geom; + } + if ( view.Count() > 0 ) + { + return view; + } + return NULL; +} + +static Object COM_GetPointerObject( Object ignore = NULL, float radius = 0.5, Object with = NULL ) +{ + vector dir = GetGame().GetPointerDirection(); + + vector from = GetGame().GetCurrentCameraPosition(); + + vector to = from + ( dir * 10000 ); + + auto objs = COM_GetObjectsAt( from, to, ignore, radius, with ); + + if( objs.Count() > 0 ) + { + return objs[ 0 ]; + } + + return NULL; +} + +static Object COM_GetCursorObject() +{ + vector rayStart = GetGame().GetCurrentCameraPosition(); + vector rayEnd = rayStart + GetGame().GetCurrentCameraDirection() * 10000; + + auto objs = COM_GetObjectsAt( rayStart, rayEnd ); + + if( objs.Count() > 0 ) + { + return objs[ 0 ]; + } + + return NULL; +} + +static vector COM_GetPointerPos() +{ + if ( !COM_GetPB() ) + { + return "0 0 0"; + } + + vector dir = GetGame().GetPointerDirection(); + + vector from = GetGame().GetCurrentCameraPosition(); + + vector to = from + ( dir * 10000 ); + + vector rayStart = from; + vector rayEnd = to; + vector hitPos; + vector hitNormal; + int hitComponentIndex; + DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, NULL, NULL, COM_GetPB()); + + return hitPos; +} + +static vector COM_GetCursorPos() +{ + if ( !COM_GetPB() ) + { + return "0 0 0"; + } + + vector rayStart = GetGame().GetCurrentCameraPosition(); + vector rayEnd = rayStart + GetGame().GetCurrentCameraDirection() * 10000; + vector hitPos; + vector hitNormal; + int hitComponentIndex; + DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, NULL, NULL, COM_GetPB()); + + return hitPos; +} + +static void COM_Message( string txt ) +{ + COM_GetMission().OnEvent(ChatMessageEventTypeID, new ChatMessageEventParams(CCDirect, "", txt, "")); +} + +static Weapon COM_GetWeaponInHands() +{ + Weapon weapon_in_hands; + if( COM_GetPB() && COM_GetPB().GetItemInHands() ) Class.CastTo(weapon_in_hands, COM_GetPB().GetItemInHands()); + + return weapon_in_hands; +} + +static MissionBase COM_GetMission() +{ + return MissionBase.Cast( GetGame().GetMission() ); +} + +static CommunityOfflineClient COM_GetClientMission() +{ + return CommunityOfflineClient.Cast( GetGame().GetMission() ); +} + +static CommunityOfflineServer COM_GetServerMission() +{ + return CommunityOfflineServer.Cast( GetGame().GetMission() ); +} + +static PlayerBase COM_GetPB() +{ + return PlayerBase.Cast( GetGame().GetPlayer() ); +} + +static bool COM_SHIFT() +{ + return( ( KeyState( KeyCode.KC_LSHIFT ) > 0 ) || ( KeyState( KeyCode.KC_RSHIFT ) > 0 ) ); +} + +static bool COM_CTRL() +{ + return( ( KeyState( KeyCode.KC_LCONTROL ) > 0 ) || ( KeyState( KeyCode.KC_RCONTROL ) > 0 ) ); +} + +static bool COM_ALT() +{ + return( ( KeyState( KeyCode.KC_LMENU ) > 0 ) || ( KeyState( KeyCode.KC_RMENU ) > 0 ) ); +} + +static bool COM_WINKEY() +{ + return( ( KeyState( KeyCode.KC_LWIN ) > 0 ) || ( KeyState( KeyCode.KC_RWIN ) > 0 ) ); +} + +/* +static Weapon_Base COM_CreateWeapon( PlayerBase oPlayer ) +{ + Weapon_Base oWpn = Weapon_Base.Cast(oPlayer.GetInventory().CreateInInventory( "M4A1_Black" )); + oWpn.GetInventory().CreateAttachment( "M4_Suppressor" ); + oWpn.GetInventory().CreateAttachment( "M4_RISHndgrd_Black" ); + oWpn.GetInventory().CreateAttachment( "M4_MPBttstck_Black" ); + oWpn.GetInventory().CreateAttachment( "ACOGOptic" ); + + return oWpn; +} +*/ + +static Weapon_Base COM_CreateWeapon( PlayerBase oPlayer, string sWeapon ) +{ + Weapon_Base oWpn = Weapon_Base.Cast(oPlayer.GetInventory().CreateInInventory( sWeapon )); + oWpn.GetInventory().CreateAttachment( "PistolSuppressor" ); + EntityAI optic = oWpn.GetInventory().CreateAttachment( "ReflexOptic" ); + optic.GetInventory().CreateAttachment("Battery9V"); + + return oWpn; +} + +static PlayerBase COM_CreateCustomDefaultCharacter() +{ + PlayerBase oPlayer = PlayerBase.Cast( GetGame().CreatePlayer( NULL, GetGame().CreateRandomPlayer(), COM_GetSpawnPoints().GetRandomElement(), 0, "NONE") ); + + oPlayer.GetInventory().CreateInInventory( "MilitaryBeret_UN" ); + oPlayer.GetInventory().CreateInInventory( "M65Jacket_Black" ); + oPlayer.GetInventory().CreateInInventory( "TacticalGloves_Black" ); + oPlayer.GetInventory().CreateInInventory( "HunterPants_Autumn" ); + oPlayer.GetInventory().CreateInInventory( "MilitaryBoots_Black" ); + oPlayer.GetInventory().CreateInInventory( "AliceBag_Camo" ); + oPlayer.GetInventory().CreateInInventory( "Shovel" ); + + Weapon_Base oWpn = COM_CreateWeapon( oPlayer, "UMP45" ); + oPlayer.PredictiveTakeEntityToHands( oWpn ); + + Magazine oMag = Magazine.Cast( oPlayer.GetInventory().CreateInInventory( "Mag_UMP_25Rnd" ) ); + oPlayer.GetDayZPlayerInventory().PostWeaponEvent( new WeaponEventAttachMagazine( oPlayer, oMag ) ); + + oPlayer.GetInventory().CreateInInventory( "Mag_UMP_25Rnd" ); + + oPlayer.SetQuickBarEntityShortcut( oWpn, 0, true ); + oPlayer.SetQuickBarEntityShortcut( oMag, 1, true ); + + return oPlayer; +} + +static string COM_FileAttributeToString( FileAttr attr ) +{ + string fileType = ""; + if ( attr & FileAttr.DIRECTORY ) + { + fileType = fileType + "DIRECTORY"; + } + if ( attr & FileAttr.HIDDEN ) + { + fileType = fileType + "HIDDEN"; + } + if ( attr & FileAttr.READONLY ) + { + fileType = fileType + "READONLY"; + } + if ( attr & FileAttr.INVALID ) + { + fileType = fileType + "INVALID"; + } + return fileType; +} + +static vector COM_SnapToGround(vector pos) +{ + float pos_x = pos[0]; + float pos_z = pos[2]; + float pos_y = GetGame().SurfaceY( pos_x, pos_z ); + vector tmp_pos = Vector( pos_x, pos_y, pos_z ); + tmp_pos[1] = tmp_pos[1] + pos[1]; + + return tmp_pos; +} + +static bool m_COM_GodMode; // move these to player saves? Edit: Jacob says "yes" +static bool m_COM_OldAiming; +static bool COM_bc_Visible; + +static void COM_SnapToGroundNew( Object object ) +{ + vector pos = object.GetPosition(); + pos[1] = GetGame().SurfaceY(pos[0], pos[2]); + + vector clippingInfo[2]; + vector objectBBOX[2]; + + object.GetCollisionBox( objectBBOX ); + object.ClippingInfo( clippingInfo ); + + //float clipY = objectBBOX[1][1] / 2.0//- clippingInfo[0][1]; + //pos[1] = pos[1] + objectBBOX[1][1] - clipY; + pos[1] = pos[1] + clippingInfo[1][1] / 2.0;//objectBBOX[0][1] - clipY + + object.SetPosition(pos); + + COM_ForceTargetCollisionUpdate( object ); +} + +static void COM_ForceTargetCollisionUpdate( Object oObj ) +{ + if ( !oObj ) return; + + vector roll = oObj.GetOrientation(); + roll [ 2 ] = roll [ 2 ] - 1; + oObj.SetOrientation( roll ); + roll [ 2 ] = roll [ 2 ] + 1; + oObj.SetOrientation( roll ); +} + +static void COM_ToggleCursor() +{ + if ( GetGame().GetInput().HasGameFocus( INPUT_DEVICE_MOUSE ) ) + { + GetGame().GetInput().ChangeGameFocus( 1 ); + GetGame().GetUIManager().ShowUICursor( true ); + } + else + { + GetGame().GetUIManager().ShowUICursor( false ); + GetGame().GetInput().ResetGameFocus(); + } +} + +/* + Token types: + 0 - error, no token + 1 - defined token (special characters etc. . / * ) + 2 - quoted string. Quotes are removed -> TODO + 3 - alphabetic string + 4 - number + 5 - end of line -> TODO +*/ +static bool COM_CheckStringType( string str, int type ) +{ + for(int i = 0; i class_names = new array; + + for ( int p = 0; p < count; p++ ) + { + GetGame().ConfigGetChildName( strConfigName, p, child_name ); + + if( ( minScope != -1 ) && ( GetGame().ConfigGetInt( strConfigName + " " + child_name + " scope" ) < minScope ) ) continue; + + if ( GetGame().IsKindOf( child_name, strBaseClass ) && ( child_name != strBaseClass ) ) + { + class_names.Insert( child_name ); + } + } + + return class_names.GetRandomElement(); +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/PositionMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/PositionMenu.c new file mode 100644 index 00000000..e0ae3c88 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/PositionMenu.c @@ -0,0 +1,292 @@ +class PositionMenu extends PopupMenu +{ + protected TextListboxWidget m_LstPositionList; + protected EditBoxWidget m_TxtSelectedX; + protected EditBoxWidget m_TxtSelectedY; + protected EditBoxWidget m_TxtCurrentX; + protected EditBoxWidget m_TxtCurrentY; + protected ButtonWidget m_TeleportButton; + protected ButtonWidget m_CancelButton; + + autoptr map< string, vector > Positions = new map< string, vector >; + + protected bool m_bOverCurrentPos; + + void PositionMenu() + { + m_bOverCurrentPos = false; + + Positions.Insert( "Altar", "8090.49 0 9326.95" ); + Positions.Insert( "Balota", "4393.72 0 2412.05" ); + Positions.Insert( "Balota Airstrip", "5025.65 0 2363.44" ); + Positions.Insert( "Bashnya", "4156.51 0 11747.29" ); + Positions.Insert( "Bay Mutnaya", "5634.24 0 1947.33" ); + Positions.Insert( "Bay Tikhaya", "1190.83 0 2194.76" ); + Positions.Insert( "Bay Zelenaya", "11140.75 0 3090.17" ); + Positions.Insert( "Belaya Polana", "14148.24 0 15004.23" ); + Positions.Insert( "Berezhki", "15152.52 0 13815.69" ); + Positions.Insert( "Berezino", "11856.29 0 8991.54" ); + Positions.Insert( "Berezino Lumberyard", "12661.27 0 9590.91" ); + Positions.Insert( "Berezino Shipyard", "13178.96 0 10213.62" ); + Positions.Insert( "Black Forest", "9083.59 0 7555.09" ); + Positions.Insert( "Black Lake", "13360.76 0 11902.36" ); + Positions.Insert( "Black Mtn", "10246.34 0 11984.03" ); + Positions.Insert( "Bogatyrka", "1504.85 0 8940.5" ); + Positions.Insert( "Bor", "3317.02 0 4014.26" ); + Positions.Insert( "Cap Golova", "8350.07 0 2443.64" ); + Positions.Insert( "Cernaya Polana", "12199.96 0 13666.45" ); + Positions.Insert( "Chernogorsk", "6572.9 0 2447.53" ); + Positions.Insert( "Chernogorsk Factory", "6406.17 0 2710.03" ); + Positions.Insert( "Chyornaya Bay", "7706.96 0 3087.25" ); + Positions.Insert( "Crown Castle", "1430 0 9218.07" ); + Positions.Insert( "Deep Lake", "1853.38 0 14860.82" ); + Positions.Insert( "Devil's Castle", "6909.76 0 11371.53" ); + Positions.Insert( "Dichina Military", "4622.19 0 8283.76" ); + Positions.Insert( "Dobroe", "13096.32 0 14953.18" ); + Positions.Insert( "Dolina", "11327.42 0 6645.57" ); + Positions.Insert( "Drakon Island", "11185.96 0 2491.77" ); + Positions.Insert( "Drozhino", "3446.32 0 4929.12" ); + Positions.Insert( "Dubky", "6653.59 0 3674.47" ); + Positions.Insert( "Dubrovka", "10397.6 0 9795.56" ); + Positions.Insert( "Dubrovka Vyshnaya", "9952.95 0 10392.8" ); + Positions.Insert( "Electrozavodsk", "10502.8 0 2336.88" ); + Positions.Insert( "Electrozavodsk Power", "10358.14 0 2593.85" ); + Positions.Insert( "Electrozavodsk Shipyard", "9961.48 0 1788.85" ); + Positions.Insert( "Gnome Castle", "7410.93 0 9114.04" ); + Positions.Insert( "Gorka", "9646.16 0 8810.25" ); + Positions.Insert( "Green Mtn", "3744.3 0 6013.15" ); + Positions.Insert( "Grishino", "6018.26 0 10256.4" ); + Positions.Insert( "Grozovoy Pass", "3237.3 0 15293.46" ); + Positions.Insert( "Guba", "14609.06 0 13283.4" ); + Positions.Insert( "Guglovo", "8411.8 0 6687.87" ); + Positions.Insert( "Gvozdno", "8706.38 0 11895.07" ); + Positions.Insert( "Kabanino", "5298.35 0 8563.76" ); + Positions.Insert( "Kamenka", "1892.27 0 2155.87" ); + Positions.Insert( "Kamensk", "6633.17 0 14466.59" ); + Positions.Insert( "Kamyshovo", "12170.79 0 3447.95" ); + Positions.Insert( "Karmanovka", "12519.8 0 14679.5" ); + Positions.Insert( "Khelm", "12286.8 0 10794.4" ); + Positions.Insert( "Klen Mtn", "11491.72 0 11331.18" ); + Positions.Insert( "Komarovo", "3619.86 0 2342.53" ); + Positions.Insert( "Kozlova Mtn", "8826.96 0 2858.41" ); + Positions.Insert( "Kozlovka", "4451.57 0 4577.18" ); + Positions.Insert( "Krasnoe", "6486.37 0 14981.87" ); + Positions.Insert( "Krasnostav", "11228.8 0 12223.2" ); + Positions.Insert( "Krasnostav Airstrip", "12016.22 0 12490.07" ); + Positions.Insert( "Krutoy Cap", "13624.71 0 3892.25" ); + Positions.Insert( "Kumyrna", "8403.05 0 6030.65" ); + Positions.Insert( "Lopatino", "2749.87 0 9991.8" ); + Positions.Insert( "Mamino", "7981.69 0 13057.3" ); + Positions.Insert( "Map Edge NE", "15321.19 0 15327.49" ); + Positions.Insert( "Map Edge NW", "44.12 0 15330.89" ); + Positions.Insert( "Map Edge SW", "19.82 0 1584.2" ); + Positions.Insert( "Mogilevka", "7502.8 0 5237.32" ); + Positions.Insert( "Msta", "11258.3 0 5511.28" ); + Positions.Insert( "Myshkino", "2056.57 0 7425.29" ); + Positions.Insert( "Myshkino Military", "1266.66 0 7225.99" ); + Positions.Insert( "Myshkino Trainyard", "885.72 0 7696.21" ); + Positions.Insert( "Nadezhdino", "5821.39 0 4764.33" ); + Positions.Insert( "Nagornoe", "9333.93 0 14666.87" ); + Positions.Insert( "Nizhnoye", "12895.4 0 8040.79" ); + Positions.Insert( "Novaya Petrovka", "3471.91 0 12988.1" ); + Positions.Insert( "Novaya Trainyard", "3526.6 0 12579.7" ); + Positions.Insert( "Novodmitrovsk", "11595 0 14696.5" ); + Positions.Insert( "Novoselky", "6052.29 0 3285.59" ); + Positions.Insert( "Novy Sobor", "7159.26 0 7688.51" ); + Positions.Insert( "NW Airfield ATC", "4618.3 0 10439.17" ); + Positions.Insert( "NW Airfield Range", "5373.21 0 9979.8" ); + Positions.Insert( "NW Airfield South", "4520.11 0 9421.26" ); + Positions.Insert( "NW Airfield Tents", "4163.31 0 11014.24" ); + Positions.Insert( "Olha", "13320.9 0 12893.05" ); + Positions.Insert( "Oreshka Pass", "9877.39 0 6009.26" ); + Positions.Insert( "Orlovets", "12136.28 0 7281.89" ); + Positions.Insert( "Orlovets Factory", "11489.7 0 7592.98" ); + Positions.Insert( "Otmel Island", "11642.89 0 3095.52" ); + Positions.Insert( "Pavlovo", "1626.37 0 3846.56" ); + Positions.Insert( "Pavlovo Military", "2101.77 0 3290.93" ); + Positions.Insert( "Pogorevka", "4376.71 0 6413.21" ); + Positions.Insert( "Polana", "10678.7 0 8090.18" ); + Positions.Insert( "Polesovo", "5817 0 13490" ); + Positions.Insert( "Prigorodki", "7984.89 0 3302.17" ); + Positions.Insert( "Prud Lake", "6627.34 0 9288.07" ); + Positions.Insert( "Pulkovo", "4902.36 0 5650.65" ); + Positions.Insert( "Pusta", "9176.44 0 3858.71" ); + Positions.Insert( "Pustoshka", "2992.21 0 7805.54" ); + Positions.Insert( "Ratnoe", "6305.55 0 12708.4" ); + Positions.Insert( "Rify", "13783.18 0 11233" ); + Positions.Insert( "Rog Castle", "11255 0 4293.29" ); + Positions.Insert( "Rogovo", "4731 0 6775.61" ); + Positions.Insert( "Romashka", "8148.5 0 11015.2" ); + Positions.Insert( "Schadenfreude Island", "24000 0 0" ); + Positions.Insert( "Severograd", "7893.4 0 12576.3" ); + Positions.Insert( "Shakhovka", "9670.8 0 6495.85" ); + Positions.Insert( "Silence Lake", "1203.95 0 6507.42" ); + Positions.Insert( "Sinystok", "1447.49 0 11924.24" ); + Positions.Insert( "Skalisty Castle", "13493.95 0 3254.96" ); + Positions.Insert( "Skalisty Island", "13661.17 0 2960.38" ); + Positions.Insert( "Skvsch Biathlon Arena", "488.57 0 11118.7" ); + Positions.Insert( "Smirnovo", "11629.3 0 15023.1" ); + Positions.Insert( "Solnichniy", "13469.1 0 6239" ); + Positions.Insert( "Solnichniy Factory", "13069.59 0 7161.34" ); + Positions.Insert( "Sosnovka", "2512.53 0 6371.41" ); + Positions.Insert( "Sosnovy Pass", "2736.13 0 6757.38" ); + Positions.Insert( "Staroye", "10164.18 0 5460.93" ); + Positions.Insert( "Stary Sobor", "6072.64 0 7748.56" ); + Positions.Insert( "Stary Yar", "4935.61 0 15068" ); + Positions.Insert( "Storozh Island (Prison)", "2611.2 0 1306.15" ); + Positions.Insert( "Svergino", "9533.2 0 13728.4" ); + Positions.Insert( "Svetlojarsk", "13931.93 0 13231.39" ); + Positions.Insert( "Three Crosses Gas", "312.94 0 9362.44" ); + Positions.Insert( "Three Valleys", "12842.1 0 5500.33" ); + Positions.Insert( "Tisy", "3413.75 0 14810.27" ); + Positions.Insert( "Tisy Military", "1681.3 0 14116.6" ); + Positions.Insert( "Topolka Dam", "10280.5 0 3507.5" ); + Positions.Insert( "Topolniki", "2821.19 0 12366.5" ); + Positions.Insert( "Troitskoe", "7559.44 0 13515.9" ); + Positions.Insert( "Troitskoe Military", "7866.4 0 14676.1" ); + Positions.Insert( "Tulga", "12808.7 0 4457.13" ); + Positions.Insert( "Turovo", "13576.5 0 14128.6" ); + Positions.Insert( "Vavilovo", "2211.83 0 11016.4" ); + Positions.Insert( "Veresnik Mtn", "4439.42 0 8078.14" ); + Positions.Insert( "Vybor", "3800 0 8844.25" ); + Positions.Insert( "Vyshnoye", "6532.61 0 6090.53" ); + Positions.Insert( "Vysotovo", "5616.26 0 2561.77" ); + Positions.Insert( "Willow Lake", "13254.2 0 11607.8" ); + Positions.Insert( "Zabolotye", "1156.26 0 10006.2" ); + Positions.Insert( "Zaprudnoe", "4927.47 0 13027.2" ); + Positions.Insert( "Zelenogorsk", "2713.4 0 5391.75" ); + Positions.Insert( "Zelenogorsk Trainyard", "2490.65 0 5151.76" ); + Positions.Insert( "Zub Castle", "6541.79 0 5591.69" ); + Positions.Insert( "Zvir", "477.35 0 5202.98" ); + } + + void ~PositionMenu() + { + } + + override void Init() + { + m_LstPositionList = TextListboxWidget.Cast( layoutRoot.FindAnyWidget("tls_ppp_pm_positions_list") ); + m_TxtSelectedX = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("pnl_ppp_pm_selected_x_value") ); + m_TxtSelectedY = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("pnl_ppp_pm_selected_y_value") ); + m_TxtCurrentX = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("pnl_ppp_pm_current_x_value") ); + m_TxtCurrentY = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("pnl_ppp_pm_current_y_value") ); + m_TeleportButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_ppp_pm_teleport") ); + m_CancelButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_ppp_pm_cancel") ); + + for ( int nPosition = 0; nPosition < Positions.Count(); nPosition++ ) + { + m_LstPositionList.AddItem( Positions.GetKey( nPosition ), NULL, 0 ); + } + } + + override void OnShow() + { + vector player_pos = COM_GetPB().GetPosition(); + + m_TxtCurrentX.SetText( player_pos[0].ToString() ); + m_TxtCurrentY.SetText( player_pos[2].ToString() ); + } + + override void OnHide() + { + + } + + override bool OnMouseEnter(Widget w, int x, int y) + { + if ( w == m_TxtCurrentX || w == m_TxtCurrentY ) + { + m_bOverCurrentPos = true; + } + + return false; + } + + override bool OnMouseLeave( Widget w, Widget enterW, int x, int y ) + { + if ( w == m_TxtCurrentX || w == m_TxtCurrentY ) + { + m_bOverCurrentPos = false; + } + + return false; + } + + override bool OnKeyPress( Widget w, int x, int y, int key ) + { + if ( m_bOverCurrentPos ) + { + m_TxtSelectedX.SetText( "" ); + m_TxtSelectedY.SetText( "" ); + } + + return false; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + if ( w == m_TeleportButton ) + { + float pos_x = 0; + float pos_y = 0; + + if( ( m_TxtSelectedX.GetText() != "" ) && ( m_TxtSelectedY.GetText() != "" ) ) + { + pos_x = m_TxtSelectedX.GetText().ToFloat(); + pos_y = m_TxtSelectedY.GetText().ToFloat(); + } + else if( ( m_TxtCurrentX.GetText() != "" ) && ( m_TxtCurrentY.GetText() != "" ) ) + { + pos_x = m_TxtCurrentX.GetText().ToFloat(); + pos_y = m_TxtCurrentY.GetText().ToFloat(); + } + else + { + PlayerBase oPlayer = COM_GetPB(); + oPlayer.MessageStatus( "Invalid teleportation position!" ); + + return true; + } + + vector vPlayerPos; + vPlayerPos[0] = pos_x; + vPlayerPos[2] = pos_y; + + vPlayerPos = COM_SnapToGround( vPlayerPos ); + + COM_GetPB().SetPosition( vPlayerPos ); + + return true; + } + + return false; + } + + override bool OnItemSelected( Widget w, int x, int y, int row, int column, int oldRow, int oldColumn ) + { + vector position = "0 0 0"; + + if( !Positions.Find( GetCurrentPositionName(), position ) ) + { + position = "0 0 0"; + } + + m_TxtSelectedX.SetText( position[0].ToString() ); + m_TxtSelectedY.SetText( position[2].ToString() ); + + return true; + } + + string GetCurrentPositionName() + { + if ( m_LstPositionList.GetSelectedRow() != -1 ) + { + string position_name; + m_LstPositionList.GetItemText( m_LstPositionList.GetSelectedRow(), 0, position_name ); + return position_name; + } + + return ""; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/layouts/PositionMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/layouts/PositionMenu.layout new file mode 100644 index 00000000..84c2ca89 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/gui/layouts/PositionMenu.layout @@ -0,0 +1,195 @@ +PanelWidgetClass PositionMenu +{ + visible 0 + color 0 0 0 0 + position 0.0425 0.09 + size 250 450 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "PositionMenu" + style EditorPanel + { + PanelWidgetClass Background + { + visible 1 + color 0 0 0 0.45 + position 0 0 + size 500 450 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + } + + PanelWidgetClass pnl_ppp_pm_title + { + visible 1 + color 0 0 0 0.7843 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + { + TextWidgetClass txt_ppp_pm_title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Teleportation" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + TextListboxWidgetClass tls_ppp_pm_positions_list + { + visible 1 + position 0.02 30 + size 0.96 235 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Editor + lines 20 + font "gui/fonts/Metron14" + } + + TextWidgetClass txt_ppp_pm_selected_position + { + position 6.0025 274.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Teleportation target position:" + } + + TextWidgetClass pnl_ppp_pm_selected_x + { + position 14.0025 298.99689 + size 16 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "X:" + } + + TextWidgetClass pnl_ppp_pm_selected_y + { + position 14.0025 322.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Y:" + } + + EditBoxWidgetClass pnl_ppp_pm_selected_x_value + { + position 30 299 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + } + + EditBoxWidgetClass pnl_ppp_pm_selected_y_value + { + position 30 323 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + } + + TextWidgetClass txt_ppp_pm_current_position + { + position 6.0025 358.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Your position:" + } + + TextWidgetClass pnl_ppp_pm_current_x + { + position 14.0025 382.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "X:" + } + + TextWidgetClass pnl_ppp_pm_current_y + { + position 14.0025 406.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Y:" + } + + EditBoxWidgetClass pnl_ppp_pm_current_x_value + { + position 30 382.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + } + + EditBoxWidgetClass pnl_ppp_pm_current_y_value + { + position 30 406.99689 + size 267 17 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + } + + ButtonWidgetClass btn_ppp_pm_teleport + { + position 5 5 + size 80 20 + halign right_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Teleport" + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/module.c new file mode 100644 index 00000000..dccb379f --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/AdminTool/module.c @@ -0,0 +1,9 @@ +/* + Define used for optional compilations +*/ +#define MODULE_ADMIN_TOOL + +/* + Include of all .c files that belong to this module +*/ +//#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Admintool\\gui\\PositionMenu.c" \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/CustomFirstPersonCamera.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/CustomFirstPersonCamera.c new file mode 100644 index 00000000..805a1564 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/CustomFirstPersonCamera.c @@ -0,0 +1,11 @@ +modded class DayZPlayerCamera1stPerson +{ + void DayZPlayerCamera1stPerson( DayZPlayer pPlayer, HumanInputController pInput ) + { + m_iBoneIndex = pPlayer.GetBoneIndexByName("Face_Forehead"); + if (m_iBoneIndex == -1) + { + Print("modded DayZPlayerCamera1stPerson: main bone not found"); + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/BarrelCrosshair.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/BarrelCrosshair.c new file mode 100644 index 00000000..60a7a2e1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/BarrelCrosshair.c @@ -0,0 +1,107 @@ +class BarrelCrosshair extends ScriptedWidgetEventHandler +{ + protected Widget m_root; + + private Weapon m_Weapon; + private vector m_Position; + private PlayerBase m_Player; + + float distance = 0; + + void BarrelCrosshair() + { + m_Player = NULL; + m_Weapon = NULL; + + GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Insert(this.Update); + } + + void ~BarrelCrosshair() + { + GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Remove(this.Update); + } + + void OnWidgetScriptInit(Widget w) + { + m_root = w; + m_root.SetHandler(this); + m_root.Update(); + } + + private void Update() + { + if(!m_Player) Class.CastTo(m_Player, COM_GetPB()); + + if ( COM_bc_Visible ) + { + if( m_Player && m_Player.IsPlayerSelected() && !m_Player.IsInIronsights() && !GetGame().IsInventoryOpen() ) + { + float sx, sy; + + GetCrosshairPosition(); + vector screenSpace = GetGame().GetScreenPos(m_Position); + + m_root.GetSize(sx, sy); + screenSpace[0] = screenSpace[0] - sx/2.0; + screenSpace[1] = screenSpace[1] - sy/2.0; + + /* + float size = 0.005 - distance/100000.0; + if ( size < 0.002 ) size = 0.002; + m_root.SetSize(size, size); + */ + + m_root.SetPos(screenSpace[0], screenSpace[1]); + // m_root.SetAlpha(alpha); + + m_root.Show(true); + + return; + } + } + + if ( m_root.IsVisible() ) + { + m_root.Show(false); + m_Position = vector.Zero; + } + } + + Weapon COM_GetWeaponInHands() + { + Weapon weapon_in_hands; + PlayerBase player = PlayerBase.Cast(COM_GetPB()); + if( player && player.GetItemInHands() ) Class.CastTo(weapon_in_hands, player.GetItemInHands()); + + return weapon_in_hands; + } + + private void GetCrosshairPosition() + { + ItemBase itemInHands; + itemInHands = m_Player.GetItemInHands(); + if( itemInHands && itemInHands.IsWeapon() ) + { + if( Class.CastTo(m_Weapon, itemInHands) ) + { + vector usti_hlavne_position = GetGame().ObjectGetSelectionPosition( m_Weapon, "usti hlavne" ); + vector konec_hlavne_position = GetGame().ObjectGetSelectionPosition( m_Weapon, "konec hlavne" ); + + vector end_point = m_Weapon.ModelToWorld(usti_hlavne_position); + vector begin_point = m_Weapon.ModelToWorld(konec_hlavne_position); + + vector contact_dir; + int contact_component; + + vector aim_point = end_point - begin_point; + aim_point = aim_point.Normalized() * 9999; + aim_point = aim_point + end_point; + + if (DayZPhysics.RaycastRV(begin_point, aim_point, m_Position, contact_dir, contact_component, null, null, null, false, false, ObjIntersectFire)) + { + distance = vector.Distance(begin_point, m_Position); + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/layouts/BarrelCrosshair.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/layouts/BarrelCrosshair.layout new file mode 100644 index 00000000..33a2cce5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/gui/layouts/BarrelCrosshair.layout @@ -0,0 +1,39 @@ +FrameWidgetClass BarrelCrosshairFrame +{ + size 1 1 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + { + ImageWidgetClass BarrelCrosshair { + visible 1 + disabled 0 + clipchildren 1 + inheritalpha 1 + ignorepointer 0 + keepsafezone 0 + position 0 0 + size 0.004 0.004 + color 1 0 0 0.7843 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + fixaspect fixwidth + draggable 0 + scriptclass "BarrelCrosshair" + image0 "set:dayz_crosshairs image:dot_8x8" + mode blend + "src alpha" 1 + "no wrap" 0 + stretch 1 + "flip u" 0 + "flip v" 0 + filter 1 + nocache 0 + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/module.c new file mode 100644 index 00000000..31fa0d67 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/BarrelCrosshair/module.c @@ -0,0 +1,13 @@ +/* + Define used for optional compilations +*/ +#define MODULE_BARREL_CROSSHAIR + +/* + Include of all .c files that belong to this module +*/ + +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\BarrelCrosshair\\gui\\BarrelCrosshair.c" +#endif + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/CameraTool.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/CameraTool.c new file mode 100644 index 00000000..68553886 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/CameraTool.c @@ -0,0 +1,748 @@ +class CameraTool extends Module +{ + protected Camera m_oCamera; // active static camera "staticcamera" + + protected ref array m_cKeyframes = new array; + + protected vector velocity; // canera velocity + + protected float yawVelocity; + protected float pitchVelocity; + + protected float m_CamFOV = 1.0; // default FOV + protected float m_TargetFOV = 1.0; + protected float m_TargetRoll; + protected float m_DistanceToObject; + protected bool m_FollowTarget = false; + protected bool m_FreezePlayer = false; + protected bool m_OrbitalCam = false; + protected bool m_FreezeCam = false; + + protected bool m_FreezeMouse = false; + + static float CAMERA_FOV = 1.0; + static float CAMERA_TARGETFOV = 1.0; + static float CAMERA_FOV_SPEED_MODIFIER = 5.0; + static float CAMERA_SPEED = 5.0; + static float CAMERA_VELDRAG = 0.9; // 0.9 - 1.0 0.9 == no smoothing + static float CAMERA_MSENS = 0.8; // acceleration + static float CAMERA_SMOOTH = 0.65; // drag + + static bool CAMERA_DOF = false; + static bool CAMERA_AFOCUS = true; + static float CAMERA_BLUR = 0.0; // modified via ui + static float CAMERA_FLENGTH = 50.0; // modified via ui + static float CAMERA_FNEAR = 50.0; // modified via ui + static float CAMERA_FDIST = 0.0; + static float CAMERA_DOFFSET = 0.0; + + static float CAMERA_SMOOTH_BLUR = 0.0; + + static float EXPOSURE = 0.0; + static float CHROMABERX = 0.0; // these need to go somewhere else. not where this object is GC'd + static float CHROMABERY = 0.0; + static float HUESHIFT = 0.0; + + static float ROTBLUR = 0.0; + static float MINDEPTH = 2.5; + static float MAXDEPTH = 4.5; + + static float RADBLURX = 0.0; + static float RADBLURY = 0.0; + static float RADBLUROFFX = 0.0; + static float RADBLUROFFY = 0.0; + + static float VIGNETTE = 0.0; + static float VARGB[4] = { 0, 0, 0, 0 }; + + static float CARGB[4] = { 0, 0, 0, 1 }; // color overlay + + static int VIEWDISTANCE = 1600; // move later + + protected vector m_CamOffset; + + protected Object m_Target; + protected vector m_TargetPos; // Static position + + protected float m_CurrentSmoothBlur; + + void CameraTool() + { + } + + void ~CameraTool() + { + } + + override void Init() + { + super.Init(); + } + + override void onUpdate( float timeslice ) + { + float speed = 0.2; + m_CurrentSmoothBlur = Math.Lerp( m_CurrentSmoothBlur, CAMERA_SMOOTH_BLUR, speed ); + PPEffects.SetBlur( m_CurrentSmoothBlur ); + + UpdateCamera( timeslice ); + } + + override void RegisterKeyMouseBindings() + { + KeyMouseBinding toggleCamera = new KeyMouseBinding( GetModuleType(), "ToggleCamera" , "Toggle camera." ); + KeyMouseBinding freezeCamera = new KeyMouseBinding( GetModuleType(), "FreezeCamera" , "Freezes camera." ); + KeyMouseBinding freezePlayer = new KeyMouseBinding( GetModuleType(), "FreezePlayer" , "Freezes player.", true); + KeyMouseBinding followTarget = new KeyMouseBinding( GetModuleType(), "FollowTarget" , "Follows target.", true ); + KeyMouseBinding toggleOrbit = new KeyMouseBinding( GetModuleType(), "ToggleOrbital", "Toggle orbital mode", true ); + KeyMouseBinding targetCamera = new KeyMouseBinding( GetModuleType(), "TargetCamera" , "Targets objects or positions", true ); + KeyMouseBinding zoomCamera = new KeyMouseBinding( GetModuleType(), "ZoomCamera" , "Zooms camera" ); + KeyMouseBinding incCamSpeed = new KeyMouseBinding( GetModuleType(), "IncCamSpeed" , "Increase camera speed" ); + KeyMouseBinding decCamSpeed = new KeyMouseBinding( GetModuleType(), "DecCamSpeed" , "Decrease camera speed" ); + + KeyMouseBinding release = new KeyMouseBinding( GetModuleType(), "Release" , "Release mouse", true); + + toggleCamera.AddBinding( "kInsert" ); + freezeCamera.AddBinding( "kBackslash" ); + freezePlayer.AddBinding( "kCapital" ); + followTarget.AddBinding( "kLBracket" ); + toggleOrbit .AddBinding( "kRBracket" ); + + targetCamera.AddBinding( "mBMiddle" ); + + zoomCamera.AddBinding( "mBRight", KeyMouseActionType.HOLD ); + zoomCamera.AddBinding( "kLControl", KeyMouseActionType.HOLD ); + + incCamSpeed.AddBinding( "mWheelUp" ); + decCamSpeed.AddBinding( "mWheelDown" ); + + release.AddBinding( "mBRight", KeyMouseActionType.RELEASE ); + +// zoomCamera .AddBinding( MouseState.WHEEL, 0 ); + + RegisterKeyMouseBinding( toggleCamera ); + RegisterKeyMouseBinding( freezeCamera ); + RegisterKeyMouseBinding( freezePlayer ); + RegisterKeyMouseBinding( followTarget ); + RegisterKeyMouseBinding( toggleOrbit ); + RegisterKeyMouseBinding( targetCamera ); + RegisterKeyMouseBinding( zoomCamera ); + RegisterKeyMouseBinding( incCamSpeed ); + RegisterKeyMouseBinding( decCamSpeed ); + RegisterKeyMouseBinding( release ); + } + + Camera GetCamera() + { + return m_oCamera; + } + + void EnableCamera( bool staticCam = false ) + { + if ( m_oCamera ) + { + return; + } + + vector position = "0 0 0"; + + if ( COM_GetPB() ) + { + position = COM_GetPB().GetPosition(); + position[ 1 ] = position[ 1 ] + 2; + } + + m_oCamera = Camera.Cast(g_Game.CreateObject( "staticcamera", position, false )); + m_oCamera.SetActive( true ); + + if ( !staticCam ) + { + SetFreezePlayer( true ); + } + + m_DistanceToObject = 0.0; + } + + void DisableCamera() + { + if ( m_oCamera ) + { + //Close menu to give back control to player + if( GetGame().GetUIManager().GetMenu() && ( GetGame().GetUIManager().GetMenu().GetID() == 133742 ) ) + { + GetGame().GetUIManager().Back(); + } + + SetFreezePlayer( false ); + SetFreezeMouse( false ); + + vector position; + + if( COM_CTRL() || COM_SHIFT() ) // Extra + { + position = m_oCamera.GetPosition(); + position[ 1 ] = GetGame().SurfaceY( position[ 0 ], position[ 2 ] ); + } + else + { + position = COM_GetCursorPos(); + } + + if ( COM_GetPB() ) + { + COM_GetPB().SetPosition( position ); + } + + m_oCamera.SetActive( false ); + + GetGame().SelectPlayer( NULL, COM_GetPB() ); + + GetGame().ObjectDelete( m_oCamera ); + + m_oCamera = NULL; + + m_CamFOV = 1.0; + m_TargetFOV = 1.0; + m_TargetRoll = 0; + + m_FollowTarget = false; + m_OrbitalCam = false; + + m_Target = NULL; + m_TargetPos = vector.Zero; + + PPEffects.ResetDOFOverride(); + } + } + + void ToggleCamera() + { + if ( m_oCamera ) + { + DisableCamera(); + } + else + { + EnableCamera(); + } + } + + void TargetCamera() + { + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + + if ( m_Target || m_TargetPos != vector.Zero ) + { + // Stop targetting + m_Target = NULL; + m_TargetPos = vector.Zero; + + SetFreezeMouse(false); + + return; + } + + vector dir = GetGame().GetPointerDirection(); + vector from = GetGame().GetCurrentCameraPosition(); + vector to = from + ( dir * 1000 ); + + set< Object > objects = COM_GetObjectsAt(from, to); + + if ( objects ) + { + if ( objects.Count() > 0) + { + Object object = objects.Get(0); + if ( object.IsInherited( EntityAI ) && !object.IsBuilding() ) + { + m_Target = object; + return; + } + } + } + m_TargetPos = COM_GetCursorPos(); + } + } + + void SetTarget(Object oObject) + { + if (oObject) + { + m_Target = oObject; + m_TargetPos = oObject.GetPosition(); + } else + { + m_Target = NULL; + } + } + + void UpdateCamera( float timeslice) + { + if ( m_oCamera ) + { + + if ( m_CamFOV != m_TargetFOV ) + { + m_CamFOV = Math.Lerp( m_CamFOV, m_TargetFOV, timeslice*CAMERA_FOV_SPEED_MODIFIER ); + m_oCamera.SetFOV( m_CamFOV ); + } + + vector oldOrient = m_oCamera.GetOrientation(); + if ( oldOrient[2] != m_TargetRoll ) + { + //oldOrient[2] = Math.Lerp( oldOrient[2], m_TargetRoll, timeslice*CAMERA_FOV_SPEED_MODIFIER ); + //m_oCamera.SetOrientation( oldOrient ); + } + + // Camera movement + Input input = GetGame().GetInput(); + + if ( !m_FreezeCam ) + { + + float forward = KeyState(KeyCode.KC_W) - KeyState(KeyCode.KC_S); // -1, 0, 1 + float strafe = KeyState(KeyCode.KC_D) - KeyState(KeyCode.KC_A); + float altitude = KeyState(KeyCode.KC_Q) - KeyState(KeyCode.KC_Z); // change to hardcode keys? these actions can be rebinded via vanilla keybind menu + + if( KeyState(KeyCode.KC_LSHIFT) ) + { + forward *= 10.0; + strafe *= 10.0; + altitude *= 10.0; + } + float cam_speed = CAMERA_SPEED; + float drag = CAMERA_VELDRAG; + + if ( CAMERA_VELDRAG == 0.9 ) + { + cam_speed *= 15.0; + drag = 0; + } + + vector up = vector.Up; + vector direction = m_oCamera.GetDirection(); + vector directionAside = vector.Up * direction; + + up = up * altitude * cam_speed * timeslice; + direction = direction * forward * cam_speed * timeslice; + directionAside = directionAside * strafe * cam_speed * timeslice; + + velocity = velocity * drag; + velocity = ( velocity + direction + directionAside + up ); + + vector oldPos = m_oCamera.GetPosition(); + vector newPos = oldPos + velocity; + + float surfaceY = GetGame().SurfaceY( newPos[0], newPos[2] ) + 0.25; + if ( newPos[1] < surfaceY ) + { + newPos[1] = surfaceY; + } + + m_oCamera.SetPosition(newPos); + } + + if ( !m_FreezeMouse ) + { + float yawDiff = input.LocalValue("UAAimLeft") - input.LocalValue("UAAimRight"); + float pitchDiff = input.LocalValue("UAAimDown") - input.LocalValue("UAAimUp"); + + yawVelocity = yawVelocity + yawDiff * CAMERA_MSENS; + pitchVelocity = pitchVelocity + pitchDiff * CAMERA_MSENS; // 0.8 + + vector newOrient = oldOrient; + + newOrient[0] = oldOrient[0] - Math.RAD2DEG * yawVelocity * timeslice; + newOrient[1] = oldOrient[1] - Math.RAD2DEG * pitchVelocity * timeslice; + + yawVelocity *= CAMERA_SMOOTH; // drag 0.9 + pitchVelocity *= CAMERA_SMOOTH; + + if( newOrient[1] < -89 ) + newOrient[1] = -89; + if( newOrient[1] > 89 ) + newOrient[1] = 89; + + m_oCamera.SetOrientation( newOrient ); + } + + // Camera targetting + float dist = 0.0; + vector from = GetGame().GetCurrentCameraPosition(); + + if ( m_Target ) + { + vector targetPos; + + if ( m_Target.IsInherited( SurvivorBase ) ) + { + targetPos = GetTargetCenter(); + } + else + { + vector pos = m_Target.GetPosition(); + pos[1] = GetGame().SurfaceY(pos[0], pos[2]); + + vector clippingInfo; + vector objectBBOX; + + m_Target.GetCollisionBox(objectBBOX); + + pos[1] = (pos[1] - objectBBOX[1] + clippingInfo[1] - objectBBOX[1]) + 1.5; + + targetPos = pos; + } + + if ( m_OrbitalCam ) + { + m_oCamera.LookAt( targetPos ); + } + + dist = vector.Distance( from, targetPos ); + + if ( m_FollowTarget ) + { + if ( m_DistanceToObject == 0.0 ) + { + m_DistanceToObject = vector.Distance(GetTargetCenter(), m_oCamera.GetPosition()); + m_CamOffset = vector.Direction( GetTargetCenter() , m_oCamera.GetPosition() ); + m_CamOffset.Normalize(); + } + + if ( m_OrbitalCam ) + { + direction = vector.Direction( GetTargetCenter() , m_oCamera.GetPosition() ); + direction.Normalize(); + newPos = GetTargetCenter() + ( direction * m_DistanceToObject ); + } + else + { + newPos = GetTargetCenter() + ( m_CamOffset * m_DistanceToObject ); + } + + m_oCamera.SetPosition( newPos ); + dist = m_DistanceToObject; + } + } + else if ( m_TargetPos != vector.Zero ) + { + // m_oCamera.LookAt( m_TargetPos ); // auto orbital + vector lookDir = m_TargetPos - m_oCamera.GetPosition(); + float roll = m_oCamera.GetOrientation()[2]; + m_oCamera.SetDirection( lookDir ); + + vector newRoll = m_oCamera.GetOrientation(); + newRoll[2] = roll; + m_oCamera.SetOrientation(newRoll); + dist = vector.Distance( from, m_TargetPos ); + } + + if ( CAMERA_DOF ) // DOF enabled + { + if ( CAMERA_AFOCUS && !m_Target ) //auto focus + { + vector to = from + (GetGame().GetCurrentCameraDirection() * 9999); + vector contact_pos; + + DayZPhysics.RaycastRV( from, to, contact_pos, NULL, NULL, NULL , NULL, NULL, false, false, ObjIntersectIFire); + dist = vector.Distance( from, contact_pos ); + } + if ( dist > 0 ) CAMERA_FDIST = dist; + + m_oCamera.SetFocus(CAMERA_FDIST, CAMERA_BLUR); + //m_oCamera.SetNearPlane(CAMERA_FNEAR); + // PPEffects.OverrideDOF(true, CAMERA_FDIST, CAMERA_FLENGTH, CAMERA_FNEAR, CAMERA_BLUR, CAMERA_DOFFSET); broken :( + } + } + } + + void IncCamSpeed() + { + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + CAMERA_SPEED *= 1.2; + } + } + + void DecCamSpeed() + { + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + + CAMERA_SPEED *= 0.8; + if ( CAMERA_SPEED < 0.001 ) + { + CAMERA_SPEED = 0.001; + } + } + } + + void CameraSpeed() + { + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + int i = GetMouseState( MouseState.WHEEL ); + + if ( COM_ALT() ) + { + vector ori = m_oCamera.GetOrientation(); + ori[2] = ori[2] - i*5; + m_oCamera.SetOrientation( ori ); + //m_TargetRoll = ori[2] - i*5; // redo this + //COM_Message(m_TargetRoll.ToString()); + } + else + { + float value = 1.2; + if ( i < 0 ) + { + value = 0.8; + } + + CAMERA_SPEED *= value; + if ( CAMERA_SPEED < 0.001 ) + { + CAMERA_SPEED = 0.001; + } + } + } + } + + void Release() + { + if ( m_oCamera ) + { + if ( !m_OrbitalCam ) + { + SetFreezeMouse( false ); + } + } + } + + void ZoomCamera() + { + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + + int i = GetMouseState(MouseState.Y); + + if ( i != 0 ) + { + SetFreezeMouse(true); + m_TargetFOV+=i*0.000006; // zoom speed + + if ( m_TargetFOV < 0.01 ) + { + m_TargetFOV = 0.01; + } + //m_oCamera.SetFOV(m_CamFOV); + } + } + + /* + if ( m_oCamera ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + return; + } + + int i = GetMouseState( MouseState.WHEEL ); + + ObjectEditor objEditor = COM_GetModuleManager().GetModule( ObjectEditor ); + + if ( objEditor.m_SelectedObject ) + { + return; + } + + if ( COM_CTRL() ) + { + vector ori = m_oCamera.GetOrientation(); + m_TargetRoll = ori[2] - Math.RAD2DEG * i*0.09; + } + else + { + m_TargetFOV-=i*0.09; // invert + if ( m_TargetFOV < 0.01 ) + { + m_TargetFOV = 0.01; + } + } + //m_oCamera.SetFOV(m_CamFOV); + } + */ + } + + void FreezeCamera() + { + if ( m_oCamera ) + { + SetFreezeCam(!m_FreezeCam); + } + } + + void FollowTarget() + { + if ( m_oCamera ) + { + if ( m_Target || m_TargetPos != vector.Zero ) + { + m_FollowTarget = !m_FollowTarget; + SetFreezeMouse( m_FollowTarget ); + SetFreezeCam( m_FollowTarget ); + + if ( !m_FollowTarget ) + { + m_DistanceToObject = 0.0; + m_CamOffset = vector.Zero; + } + } + } + } + + void FreezePlayer() + { + if ( m_oCamera ) + { + SetFreezePlayer( !m_FreezePlayer ); + } + } + + void ToggleOrbital() + { + if ( m_oCamera ) + { + if ( m_Target || m_TargetPos != vector.Zero ) + { + m_OrbitalCam = !m_OrbitalCam; + SetFreezeMouse(m_OrbitalCam); + if (! m_OrbitalCam ) + { + SetFreezeCam(false); + } + } + } + } + + override void onKeyRelease( int key ) // Fix + { + switch( key ) + { + case KeyCode.KC_W: + case KeyCode.KC_A: + case KeyCode.KC_S: + case KeyCode.KC_D: + case KeyCode.KC_Q: + case KeyCode.KC_Z: + { + if ( m_oCamera ) + { + if ( m_Target ) + { + m_CamOffset = vector.Direction( GetTargetCenter() , m_oCamera.GetPosition() ); + m_CamOffset.Normalize(); + break; + } + } + } + } + } + + override void onMouseButtonRelease( int button ) + { + if ( m_oCamera ) + { + if ( button == MouseState.RIGHT ) + { + if ( !m_OrbitalCam ) + { + SetFreezeMouse( false ); + } + } + } + } + + override void onMouseButtonPress( int button ) + { + } + + bool IsUsingCamera() + { + return m_oCamera != NULL; + } + + vector GetTargetCenter() + { + vector targetPosition; + + if ( m_Target.IsInherited( SurvivorBase )) + { + targetPosition = m_Target.GetPosition(); + targetPosition[1] = targetPosition[1] + 1.5; + } + else + { + targetPosition = m_Target.GetPosition(); + targetPosition[1] = GetGame().SurfaceY(targetPosition[0], targetPosition[2]); + + vector clippingInfo; + vector objectBBOX; + + m_Target.GetCollisionBox(objectBBOX); + + targetPosition[1] = (targetPosition[1] - objectBBOX[1] + clippingInfo[1] - objectBBOX[1]) + 1.5; + } + + return targetPosition; + } + + Object GetTargetObject() + { + return m_Target; + } + + vector GetTargetPos() + { + return m_TargetPos; + } + + void SetFreezePlayer( bool freeze ) + { + m_FreezePlayer = freeze; + COM_GetPB().GetInputController().OverrideMovementSpeed( freeze, 0 ); + COM_GetPB().GetInputController().OverrideAimChangeX( freeze, 0 ); + COM_GetPB().GetInputController().OverrideAimChangeY( freeze, 0 ); + } + + void SetFreezeCam( bool freeze ) + { + m_FreezeCam = freeze; + } + + void SetFreezeMouse( bool freeze ) + { + m_FreezeMouse = freeze; + } +}; \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/WidgetStore.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/WidgetStore.c new file mode 100644 index 00000000..04a006e1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/WidgetStore.c @@ -0,0 +1,184 @@ +class WidgetStore +{ + private Widget layoutRoot; + + private ref array< TextWidget > textWidgets; + private ref array< ButtonWidget > buttonWidgets; + private ref array< EditBoxWidget > editBoxWidgets; + private ref array< SliderWidget > sliderWidgets; + private ref array< TextListboxWidget > textListBoxWidgets; + + private ref array< Widget > allWidgets; + + void WidgetStore( Widget root ) + { + layoutRoot = root; + + textWidgets = new array< TextWidget >; + buttonWidgets = new array < ButtonWidget >; + editBoxWidgets = new array < EditBoxWidget >; + sliderWidgets = new array < SliderWidget >; + textListBoxWidgets = new array < TextListboxWidget >; + allWidgets = new array < Widget >; + + Init(); + } + + void ~WidgetStore() + { + } + + void Init() + { + SearchChildren( layoutRoot ); //recursion + + Print( "WidgetStore Init - Testing widget loading count: " + allWidgets.Count() ); + } + + void SearchChildren( Widget widget ) + { + Widget child = widget.GetChildren(); + while ( child ) + { + //Print( child.GetName() ); + allWidgets.Insert( child ); + AddWidget( child ); + SearchSibling( child ); + child = child.GetChildren(); + } + } + + void SearchSibling( Widget widget ) + { + Widget sibling = widget.GetSibling(); + while ( sibling ) + { + //Print( sibling.GetName() ); + allWidgets.Insert( sibling ); + AddWidget( sibling ); + SearchChildren( sibling ); + sibling = sibling.GetSibling(); + } + } + + void FindDuplicates() //debugging + { + int duplicates = 0; + foreach( Widget widget : allWidgets ) + { + string name = widget.GetName(); + + int count = 0; + foreach ( Widget check : allWidgets ) + { + if ( name == check.GetName() ) + { + count++; + } + if ( count > 1 ) + { + Print( "Found duplicate: " + name ); + duplicates++; + break; + } + } + } + Print( "Duplicates: " + duplicates ); + } + + void AddWidget( Widget widget ) + { + if ( widget.IsInherited( TextWidget ) ) + { + textWidgets.Insert( TextWidget.Cast(widget) ); + } + if ( widget.IsInherited( ButtonWidget ) ) + { + buttonWidgets.Insert( ButtonWidget.Cast(widget) ); + } + if ( widget.IsInherited( EditBoxWidget ) ) + { + editBoxWidgets.Insert( EditBoxWidget.Cast(widget) ); + } + if ( widget.IsInherited( SliderWidget ) ) + { + sliderWidgets.Insert( SliderWidget.Cast(widget) ); + } + if ( widget.IsInherited( TextListboxWidget )) + { + textListBoxWidgets.Insert( TextListboxWidget.Cast(widget) ); + } + } + + Widget GetWidget( string name ) + { + foreach( Widget widget : allWidgets ) + { + if ( widget.GetName() == name ) + { + return widget; + } + } + return null; + } + + TextWidget GetTextWidget( string name ) + { + foreach( Widget widget : textWidgets ) + { + if ( widget.GetName() == name ) + { + return TextWidget.Cast(widget); + } + } + return null; + } + + ButtonWidget GetButtonWidget( string name ) + { + foreach( Widget widget : buttonWidgets ) + { + if ( widget.GetName() == name ) + { + return ButtonWidget.Cast(widget); + } + } + return null; + } + + EditBoxWidget GetEditBoxWidget( string name ) + { + foreach( Widget widget : editBoxWidgets ) + { + if ( widget.GetName() == name ) + { + return EditBoxWidget.Cast(widget); + } + } + return null; + } + + SliderWidget GetSliderWidget( string name ) + { + foreach( Widget widget : sliderWidgets ) + { + if ( widget.GetName() == name ) + { + return SliderWidget.Cast(widget); + } + } + return null; + } + + TextListboxWidget GetListboxWidget( string name ) + { + foreach( Widget widget : textListBoxWidgets ) + { + if ( widget.GetName() == name ) + { + return TextListboxWidget.Cast(widget); + } + } + return null; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/cKeyframe.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/cKeyframe.c new file mode 100644 index 00000000..6b023a3b --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/cKeyframe.c @@ -0,0 +1,9 @@ +class cKeyframe +{ + vector position; + vector orientation; + + float fov; +} + +// static proto native void InterpolateTo(Camera targetCamera, float time, int type); \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/CameraSettings.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/CameraSettings.c new file mode 100644 index 00000000..a03ccf7d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/CameraSettings.c @@ -0,0 +1,459 @@ +class CameraSettings extends PopupMenu +{ + + private SliderWidget m_SldCamBlur; + private TextWidget m_TxtCamBlur; + + private SliderWidget m_SldCamDist; + private TextWidget m_TxtCamDist; + + private SliderWidget m_SldCamFLen; + private TextWidget m_TxtCamFlen; + + private SliderWidget m_SldCamFnear; + private TextWidget m_TxtCamFnear; + + private SliderWidget m_SldCamExp; + private TextWidget m_TxtCamExp; + + private ButtonWidget m_btn_rot; + private ButtonWidget m_btn_phi + + static Widget CAMERA_ROT; + static Widget CAMERA_PHI; + + private SliderWidget m_SldChromX; + private SliderWidget m_SldChromY; + + private TextWidget m_TxtChromX; + private TextWidget m_TxtChromY; + + private ref WidgetStore widgetStore; + + void CameraSettings() + { + } + + void ~CameraSettings() + { + } + + override void Init() + { + widgetStore = new WidgetStore( layoutRoot ); + + m_SldCamBlur = SliderWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_blur") ); + m_TxtCamBlur = TextWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_blur_value") ); + + m_SldCamDist = SliderWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_dist") ); + m_TxtCamDist = TextWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_dist_value") ); + + m_SldCamFLen = SliderWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_flen" ) ); + m_TxtCamFlen = TextWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_flen_value") ); + + m_SldCamFnear = SliderWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_fnear") ); + m_TxtCamFnear = TextWidget.Cast( layoutRoot.FindAnyWidget("camera_slider_fnear_value") ); + + m_SldCamExp = SliderWidget.Cast(layoutRoot.FindAnyWidget("camera_slider_exp")); + m_TxtCamExp = TextWidget.Cast(layoutRoot.FindAnyWidget("camera_slider_exp_value")); + + m_btn_rot = ButtonWidget.Cast( layoutRoot.FindAnyWidget("camera_btn_rot")); + m_btn_phi = ButtonWidget.Cast( layoutRoot.FindAnyWidget("camera_btn_phi")); + + m_TxtChromX = TextWidget.Cast(layoutRoot.FindAnyWidget("camera_slider_chrom_value_x")); + m_TxtChromY = TextWidget.Cast(layoutRoot.FindAnyWidget("camera_slider_chrom_value_y")); + + CAMERA_ROT = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\gui\\layouts\\CameraROT.layout" ); + CAMERA_PHI = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\gui\\layouts\\CameraPHI.layout" ); + } + + + override void OnShow() + { + super.OnShow(); + + GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Insert( this.Update ); + + UpdateEditBox(); + } + + override void OnHide() + { + super.OnHide(); + + } + + override void Update() + { + UpdateSliders(); + } + + void UpdateEditBox() + { + widgetStore.GetEditBoxWidget("camera_input_chrom_x").SetText( CameraTool.CHROMABERX.ToString()); + widgetStore.GetEditBoxWidget("camera_input_chrom_y").SetText( CameraTool.CHROMABERY.ToString()); + } + + override bool OnMouseLeave(Widget w, Widget enterW, int x, int y) + { + SetFocus( layoutRoot ); + return false; + } + + override bool OnClick(Widget w, int x, int y, int button) + { + if ( w.GetName() == "close_button" ) + { + GetLayoutRoot().Show( false ); + OnHide(); + } + + if ( w.GetName() == "camera_toggle" ) + { + CameraTool cmt = CameraTool.Cast(COM_GetModuleManager().GetModule( CameraTool )); + GetGame().GetCallQueue( CALL_CATEGORY_GAMEPLAY ).Call( cmt.ToggleCamera ); // Fix crash + } + + Widget effectsFrame = widgetStore.GetWidget( "camera_effects_frame" ); + Widget settingsFrame = widgetStore.GetWidget( "camera_settings_frame" ); + + if ( w.GetName() == "camera_slider_tab_effects" ) + { + if ( !effectsFrame.IsVisible() ) + { + effectsFrame.Show(!effectsFrame.IsVisible()); + settingsFrame.Show(!effectsFrame.IsVisible()); + } + } + if ( w.GetName() == "camera_slider_tab_settings" ) + { + if ( !settingsFrame.IsVisible() ) + { + settingsFrame.Show(!settingsFrame.IsVisible()); + effectsFrame.Show(!settingsFrame.IsVisible()); + } + } + + if ( w == m_btn_rot ) + { + CAMERA_ROT.Show( !CAMERA_ROT.IsVisible() ); + } + + if ( w == m_btn_phi ) + { + CAMERA_PHI.Show( !CAMERA_PHI.IsVisible() ); + } + + if ( w.GetName() == "camera_fov_speed_btn_inc" ) + { + CameraTool.CAMERA_FOV_SPEED_MODIFIER += 1; + } + + if ( w.GetName() == "camera_fov_speed_btn_dec" ) + { + CameraTool.CAMERA_FOV_SPEED_MODIFIER -= 1; + if ( CameraTool.CAMERA_FOV_SPEED_MODIFIER < 0 ) CameraTool.CAMERA_FOV_SPEED_MODIFIER = 0; + } + + if ( w.GetName() == "camera_smooth_btn_inc" ) + { + CameraTool.CAMERA_SMOOTH += 0.025; + CameraTool.CAMERA_SMOOTH = Math.Clamp(CameraTool.CAMERA_SMOOTH, 0.0, 1.0); // ugh + } + + if ( w.GetName() == "camera_smooth_btn_dec" ) + { + CameraTool.CAMERA_SMOOTH -= 0.025; + CameraTool.CAMERA_SMOOTH = Math.Clamp(CameraTool.CAMERA_SMOOTH, 0.0, 1.0); + } + + if ( w.GetName() == "camera_msens_btn_inc" ) + { + CameraTool.CAMERA_MSENS += 0.05; + CameraTool.CAMERA_MSENS = Math.Clamp(CameraTool.CAMERA_MSENS, 0.0, 1.5); + } + + if ( w.GetName() == "camera_msens_btn_dec" ) + { + CameraTool.CAMERA_MSENS -= 0.05; + CameraTool.CAMERA_MSENS = Math.Clamp(CameraTool.CAMERA_MSENS, 0.0, 1.5); + } + if ( w.GetName() == "camera_msmooth_btn_inc" ) + { + CameraTool.CAMERA_VELDRAG += 0.01; // percent + CameraTool.CAMERA_VELDRAG = Math.Clamp(CameraTool.CAMERA_VELDRAG, 0.9, 1.0); + } + if ( w.GetName() == "camera_msmooth_btn_dec" ) + { + CameraTool.CAMERA_VELDRAG -= 0.01; + CameraTool.CAMERA_VELDRAG = Math.Clamp(CameraTool.CAMERA_VELDRAG, 0.9, 1.0); // 10 clicks + } + + return false; + } + + override bool OnChange( Widget w, int x, int y, bool finished ) + { + Material chromAber = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/chromaber"); + Material matColors = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/glow"); + Material rotBlur = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/rotblur"); + Material radBlur = GetGame().GetWorld().GetMaterial("graphics/materials/postprocess/radialblur"); + + SliderWidget changeSlider = widgetStore.GetSliderWidget( w.GetName() ); + EditBoxWidget editBox = widgetStore.GetEditBoxWidget( w.GetName() ); + + if ( editBox ) + { + string text = editBox.GetText(); + float value = text.ToFloat(); + + if ( editBox.GetName() == "camera_input_chrom_x" ) + { + CameraTool.CHROMABERX = value; + chromAber.SetParam( "PowerX", CameraTool.CHROMABERX ); + } + + if ( editBox.GetName() == "camera_input_chrom_y" ) + { + CameraTool.CHROMABERY = value; + chromAber.SetParam( "PowerY", CameraTool.CHROMABERY ); + } + return false; + } + /* + switch ( changeSlider.GetName() ) + { + case + } + */ + + if ( w == m_SldCamBlur ) + { + CameraTool.CAMERA_BLUR = m_SldCamBlur.GetCurrent() * 0.01; // percent + + if ( m_SldCamBlur.GetCurrent() == 0 ) + { + CameraTool.CAMERA_DOF = false; + PPEffects.ResetDOFOverride(); + } + else + { + CameraTool.CAMERA_DOF = true; + } + } + else if ( w == m_SldCamDist ) + { + if ( m_SldCamDist.GetCurrent() == 0 ) + { + CameraTool.CAMERA_AFOCUS = true; + } + else + { + CameraTool.CAMERA_AFOCUS = false; + CameraTool.CAMERA_FDIST = m_SldCamDist.GetCurrent() * 15; + } + } + else if ( w == m_SldCamFLen ) + { + CameraTool.CAMERA_FLENGTH = (m_SldCamFLen.GetCurrent() * 2.0); + } + else if ( w == m_SldCamFnear ) + { + CameraTool.CAMERA_FNEAR = (m_SldCamFnear.GetCurrent() * 2.0); + } + else if ( w == m_SldCamExp ) + { + CameraTool.EXPOSURE = (m_SldCamExp.GetCurrent() * 0.1) - 5.0; + GetGame().SetEVUser( CameraTool.EXPOSURE ); + //PPEffects.SetBlur( exposure ); + + //float color[4]; + //matColors.SetParam("LensDistort", CameraTool.EXPOSURE ); + //GetPlayer().MessageStatus( CameraTool.EXPOSURE.ToString() ); + //matColors.SetParam("PowerX", exposure); + // matColors.SetParam("PowerY", exposure); + } + else if ( changeSlider.GetName() == "camera_slider_hue" ) + { + CameraTool.HUESHIFT = (changeSlider.GetCurrent() * 0.1) - 5.0; + matColors.SetParam( "Saturation", CameraTool.HUESHIFT ); + } + else if ( changeSlider.GetName() == "camera_slider_rotblur_power" ) + { + CameraTool.ROTBLUR = 0.5 * (changeSlider.GetCurrent() * 0.01); + rotBlur.SetParam( "Power", CameraTool.ROTBLUR ); + } + else if ( changeSlider.GetName() == "camera_slider_rotblur_mindepth" ) + { + CameraTool.MINDEPTH = 2.5 * (changeSlider.GetCurrent() * 0.01); + rotBlur.SetParam( "MinDepth", CameraTool.MINDEPTH ); + } + else if ( changeSlider.GetName() == "camera_slider_rotblur_maxdepth" ) + { + CameraTool.MAXDEPTH = (changeSlider.GetCurrent() * 0.1); + rotBlur.SetParam( "MaxDepth", CameraTool.MAXDEPTH ); + } + else if ( changeSlider.GetName() == "camera_slider_radblur_x" ) + { + CameraTool.RADBLURX = (changeSlider.GetCurrent() * 0.01); + radBlur.SetParam( "PowerX", CameraTool.RADBLURX ); + } + else if ( changeSlider.GetName() == "camera_slider_radblur_y" ) + { + CameraTool.RADBLURY = (changeSlider.GetCurrent() * 0.01); + radBlur.SetParam( "PowerY", CameraTool.RADBLURY ); + } + else if ( changeSlider.GetName() == "camera_slider_radblur_offsetx" ) + { + CameraTool.RADBLUROFFX = (changeSlider.GetCurrent() * 0.01); + radBlur.SetParam( "OffsetX", CameraTool.RADBLUROFFX ); + } + else if ( changeSlider.GetName() == "camera_slider_radblur_offsety" ) + { + CameraTool.RADBLUROFFY = (changeSlider.GetCurrent() * 0.01); + radBlur.SetParam( "OffsetY", CameraTool.RADBLUROFFY ); + } + else if ( changeSlider.GetName() == "camera_slider_vign" ) + { + CameraTool.VIGNETTE = (changeSlider.GetCurrent() * 0.02); + matColors.SetParam( "Vignette", CameraTool.VIGNETTE ); + } + else if ( changeSlider.GetName() == "camera_slider_vign_r" ) + { + CameraTool.VARGB[0] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("VignetteColor", CameraTool.VARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_vign_g" ) + { + CameraTool.VARGB[1] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("VignetteColor", CameraTool.VARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_vign_b" ) + { + CameraTool.VARGB[2] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("VignetteColor", CameraTool.VARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_color_r" ) + { + CameraTool.CARGB[0] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("OverlayColor", CameraTool.CARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_color_g" ) + { + CameraTool.CARGB[1] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("OverlayColor", CameraTool.CARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_color_b" ) + { + CameraTool.CARGB[2] = ((changeSlider.GetCurrent() * 0.1) - 5.0); + matColors.SetParam("OverlayColor", CameraTool.CARGB ); + } + else if ( changeSlider.GetName() == "camera_slider_color_a" ) + { + CameraTool.CARGB[3] = ((changeSlider.GetCurrent() * 0.05) - 4.0); + matColors.SetParam("OverlayFactor", CameraTool.CARGB[3] ); + } + else if ( changeSlider.GetName() == "camera_slider_view" ) + { + CameraTool.VIEWDISTANCE = 100*changeSlider.GetCurrent(); + GetGame().GetWorld().SetPreferredViewDistance(CameraTool.VIEWDISTANCE); + } + return false; + } + + override bool OnMouseWheel( Widget w, int x, int y, int wheel ) + { + SliderWidget slider = widgetStore.GetSliderWidget( w.GetName() ); + + if ( slider ) + { + bool up = wheel < 0; + int value = 1; + + if ( up ) value = -1; + + float current = slider.GetCurrent(); + slider.SetCurrent( current + value ); + + OnChange( slider, x, y, false ); + } + return false; + } + + void UpdateSliders() + { + string cameraTarget = "None"; + + Object targetObject = CameraTool.Cast(COM_GetModuleManager().GetModule(CameraTool)).GetTargetObject(); + + if ( targetObject ) + { + cameraTarget = targetObject.GetType(); + } + + vector targetPos = CameraTool.Cast(COM_GetModuleManager().GetModule(CameraTool)).GetTargetPos(); + if ( targetPos != vector.Zero ) + { + cameraTarget = COM_VectorToString( targetPos, 1 ); + } + + widgetStore.GetTextWidget("camera_target_txt").SetText("Target: " + cameraTarget ); + + m_TxtCamBlur.SetText((CameraTool.CAMERA_BLUR * 100.0).ToString() + "%"); + + string autoF = ""; + if ( CameraTool.CAMERA_AFOCUS ) + { + autoF = " (AUTO)"; + } + m_TxtCamDist.SetText(CameraTool.CAMERA_FDIST.ToString()+"m" + autoF); + m_TxtCamFlen.SetText(CameraTool.CAMERA_FLENGTH.ToString()); + m_TxtCamFnear.SetText(CameraTool.CAMERA_FNEAR.ToString()); + m_TxtCamExp.SetText( CameraTool.EXPOSURE.ToString() ); + + widgetStore.GetTextWidget("camera_slider_hue_value").SetText( CameraTool.HUESHIFT.ToString() ); // make script param that updates child textwidget of slider based on vvariable? + widgetStore.GetTextWidget("camera_slider_rotblur_power_value").SetText( CameraTool.ROTBLUR.ToString() ); + widgetStore.GetTextWidget("camera_slider_rotblur_mindepth_value").SetText( CameraTool.MINDEPTH.ToString() ); + widgetStore.GetTextWidget("camera_slider_rotblur_maxdepth_value").SetText( CameraTool.MAXDEPTH.ToString() ); + widgetStore.GetTextWidget("camera_slider_radblur_value_x").SetText( CameraTool.RADBLURX.ToString() ); + widgetStore.GetTextWidget("camera_slider_radblur_value_y").SetText( CameraTool.RADBLURY.ToString() ); + widgetStore.GetTextWidget("camera_slider_radblur_value_offsetx").SetText( CameraTool.RADBLUROFFX.ToString() ); + widgetStore.GetTextWidget("camera_slider_radblur_value_offsety").SetText( CameraTool.RADBLUROFFY.ToString() ); + widgetStore.GetTextWidget("camera_slider_vign_value").SetText( CameraTool.VIGNETTE.ToString() ); + widgetStore.GetTextWidget("camera_slider_vign_value_r").SetText( CameraTool.VARGB[0].ToString() ); + widgetStore.GetTextWidget("camera_slider_vign_value_g").SetText( CameraTool.VARGB[1].ToString() ); + widgetStore.GetTextWidget("camera_slider_vign_value_b").SetText( CameraTool.VARGB[2].ToString() ); + widgetStore.GetTextWidget("camera_slider_color_value_r").SetText( CameraTool.CARGB[0].ToString() ); + widgetStore.GetTextWidget("camera_slider_color_value_g").SetText( CameraTool.CARGB[1].ToString() ); + widgetStore.GetTextWidget("camera_slider_color_value_b").SetText( CameraTool.CARGB[2].ToString() ); + widgetStore.GetTextWidget("camera_slider_color_value_a").SetText( CameraTool.CARGB[3].ToString() ); + widgetStore.GetTextWidget("camera_slider_view_value").SetText( CameraTool.VIEWDISTANCE.ToString() ); + + // get child and update text? + + // Set slider current to value + widgetStore.GetSliderWidget("camera_slider_hue").SetCurrent( (CameraTool.HUESHIFT + 5.0) / 0.1); // this could probably be moved to a proper system + widgetStore.GetSliderWidget("camera_slider_rotblur_power").SetCurrent( (CameraTool.ROTBLUR / 0.5) / 0.01); + widgetStore.GetSliderWidget("camera_slider_rotblur_mindepth").SetCurrent( (CameraTool.MINDEPTH / 0.01) / 2.5); + widgetStore.GetSliderWidget("camera_slider_rotblur_maxdepth").SetCurrent( CameraTool.MAXDEPTH / 0.1); + widgetStore.GetSliderWidget("camera_slider_radblur_x").SetCurrent( CameraTool.RADBLURX / 0.01); + widgetStore.GetSliderWidget("camera_slider_radblur_y").SetCurrent( CameraTool.RADBLURY / 0.01); + widgetStore.GetSliderWidget("camera_slider_radblur_offsetx").SetCurrent( CameraTool.RADBLUROFFX / 0.01); + widgetStore.GetSliderWidget("camera_slider_radblur_offsety").SetCurrent( CameraTool.RADBLUROFFY / 0.01); + widgetStore.GetSliderWidget("camera_slider_view").SetCurrent( CameraTool.VIEWDISTANCE / 100.0); + + // fk me ok im lazy. cbf doing this for all the sliders. + + TextWidget speedTxt = TextWidget.Cast(layoutRoot.FindAnyWidget( "camera_fov_speed_text" )); + speedTxt.SetText("FOV Smooth: " + CameraTool.CAMERA_FOV_SPEED_MODIFIER ); + + TextWidget smoothTxt = TextWidget.Cast(layoutRoot.FindAnyWidget( "camera_smooth_text" )); + smoothTxt.SetText("Cam Smooth: " + CameraTool.CAMERA_SMOOTH ); + + TextWidget sensTxt = TextWidget.Cast(layoutRoot.FindAnyWidget( "camera_msens_text" )); + sensTxt.SetText("Cam Sens: " + CameraTool.CAMERA_MSENS ); + + TextWidget flySpeed = TextWidget.Cast(layoutRoot.FindAnyWidget("camera_msmooth_text")); + flySpeed.SetText("Fly smooth: " + (CameraTool.CAMERA_VELDRAG - 0.9) / 0.1); + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraPHI.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraPHI.layout new file mode 100644 index 00000000..960ae707 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraPHI.layout @@ -0,0 +1,61 @@ +PanelWidgetClass CameraPHI +{ + ignorepointer 1 + visible 0 + position 0 0 + size 1 1 + halign left_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Editor + { + PanelWidgetClass line_horizontal_bottom + { + ignorepointer 1 + color 1 1 1 1 + visible 1 + position 0 0.618 + size 1 1 + vexactsize 1 + style EditorPanel + } + + PanelWidgetClass line_horizontal_top + { + ignorepointer 1 + color 1 1 1 1 + visible 1 + position 0 0.618 + valign bottom_ref + size 1 1 + vexactsize 1 + style EditorPanel + } + + PanelWidgetClass line_vertical_left + { + ignorepointer 1 + color 1 1 1 1 + visible 1 + position 0.618 0 + size 1 1 + hexactsize 1 + style EditorPanel + } + + PanelWidgetClass line_vertical_right + { + ignorepointer 1 + color 1 1 1 1 + visible 1 + position 0.618 0 + halign right_ref + size 1 1 + hexactsize 1 + style EditorPanel + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraROT.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraROT.layout new file mode 100644 index 00000000..815d67b6 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraROT.layout @@ -0,0 +1,54 @@ +PanelWidgetClass CameraROT +{ + ignorepointer 1 + visible 0 + position 0 0 + size 1 1 + halign left_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Editor + { + PanelWidgetClass line_horizontal_top + { + color 1 1 1 1 + visible 1 + position 0 0.3333 + size 1 1 + vexactsize 1 + style EditorPanel + } + PanelWidgetClass line_horizontal_bottom + { + color 1 1 1 1 + visible 1 + position 0 0.3333 + size 1 1 + vexactsize 1 + valign bottom_ref + style EditorPanel + } + PanelWidgetClass line_vertical_left + { + color 1 1 1 1 + visible 1 + position 0.3333 0 + size 1 1 + hexactsize 1 + style EditorPanel + } + PanelWidgetClass line_vertical_right + { + color 1 1 1 1 + visible 1 + position 0.3333 0 + size 1 1 + hexactsize 1 + halign right_ref + style EditorPanel + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraSettings.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraSettings.layout new file mode 100644 index 00000000..d544a097 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/gui/layouts/CameraSettings.layout @@ -0,0 +1,1466 @@ +PanelWidgetClass CameraMenu +{ + visible 0 + position 0.045 0.45 + color 0 0 0 0 + size 400 300 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "CameraSettings" + style EditorPanel + { + PanelWidgetClass Background + { + visible 1 + color 0 0 0.1 0.7 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style DayZDefaultPanelTop + { + PanelWidgetClass TitleBar + { + color 0 0 0 0.7843 + position 0 0 + size 1 0.1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style DayZDefaultPanelTop + { + TextWidgetClass TitleBarText + { + visible 1 + position 0.01 0 + size 0.8 0.8 + valign center_ref + text "Camera Settings" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 20 + } + + ButtonWidgetClass close_button + { + color 1 0 0 1 + position 0 0 + size 25 25 + halign right_ref + valign center_ref + hexactsize 1 + vexactsize 1 + { + ImageWidgetClass close_button_image + { + ignorepointer 1 + position 0 0 + size 25 25 + halign right_ref + valign center_ref + hexactsize 1 + vexactsize 1 + image0 "set:dayz_gui image:icon_x" + mode additive + "src alpha" 1 + } + } + } + } + } + + ButtonWidgetClass camera_slider_tab_settings + { + color 1 1 1 1 + position 0.575 0.115 + size 80 20 + halign left_ref + valign top_ref + hexactsize 1 + vexactsize 1 + style Default + { + TextWidgetClass camera_slider_tab_settings_txt + { + visible 1 + ignorepointer 1 + text "Settings" + "text halign" center + "text valign" center + } + } + } + + ButtonWidgetClass camera_slider_tab_effects + { + color 1 1 1 1 + position 0.775 0.115 + size 80 20 + halign left_ref + valign top_ref + hexactsize 1 + vexactsize 1 + style Default + { + TextWidgetClass camera_slider_tab_effects_txt + { + visible 1 + ignorepointer 1 + text "Effects" + "text halign" center + "text valign" center + } + } + } + + TextWidgetClass camera_target_txt + { + ignorepointer 1 + color 1 1 1 1 + position 0.02 0.115 + size 200 20 + hexactsize 1 + vexactsize 1 + text "Target: " + "text halign" left + "text valign" center + } + + FrameWidgetClass camera_effects_frame + { + ignorepointer 1 + visible 0 + { + PanelWidgetClass camera_sliders_effects + { + position 0 0.175 + size 1 0.825 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass camera_slider_chrom_text + { + position 0.025 0.05 + size 1 20 + hexactsize 0 + vexactsize 1 + valign top_ref + halign left_ref + text "Chromatic Abb:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + EditBoxWidgetClass camera_input_chrom_x + { + visible 1 + color 1 1 1 1 + position 0.25 0 + size 0.35 1 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + text "0.0" + style Editor + "exact text" 1" + } + EditBoxWidgetClass camera_input_chrom_y + { + visible 1 + color 1 1 1 1 + position 0.6 0 + size 0.35 1 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + text "0.0" + style Editor + "exact text" 1" + } + } + } + + TextWidgetClass camera_slider_hue_text + { + position 0.025 0.15 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Hue:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_hue + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_hue_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_rotblur_text + { + position 0.025 0.25 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Rotation Blur:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_rotblur_power + { + position 0.25 0 + size 0.2 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_rotblur_power_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_rotblur_mindepth + { + position 0.5 0 + size 0.2 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_rotblur_mindepth_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_rotblur_maxdepth + { + position 0.75 0 + size 0.2 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_rotblur_maxdepth_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_radblur_text + { + position 0.025 0.35 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Radial Blur:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_radblur_x + { + position 0.25 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_radblur_value_x + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_radblur_y + { + position 0.425 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_radblur_value_y + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_radblur_offsetx + { + position 0.6 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_radblur_value_offsetx + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_radblur_offsety + { + position 0.775 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_radblur_value_offsety + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_vign_txt + { + position 0.025 0.45 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Vignette:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_vign + { + position 0.25 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_vign_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_vign_r + { + position 0.425 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_vign_value_r + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_vign_g + { + position 0.6 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_vign_value_g + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_vign_b + { + position 0.775 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_vign_value_b + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_color_txt + { + position 0.025 0.55 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Overlay Color:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_color_a + { + position 0.25 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_color_value_a + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_color_r + { + position 0.425 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_color_value_r + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_color_g + { + position 0.6 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_color_value_g + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + SliderWidgetClass camera_slider_color_b + { + position 0.775 0 + size 0.175 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_color_value_b + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_view_txt + { + position 0.025 0.65 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "View Dist:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_view + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_view_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + } + } + } + } + + FrameWidgetClass camera_settings_frame + { + visible 1 + ignorepointer 1 + { + PanelWidgetClass camera_sliders + { + position 0 0.175 + size 1 0.5 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass camera_slider_blur_text + { + position 0.025 0.05 + size 1 20 + hexactsize 0 + vexactsize 1 + valign top_ref + halign left_ref + text "Blur strength:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_blur + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_blur_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_dist_text + { + position 0.025 0.25 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Focus Distance:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_dist + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_dist_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_flen_text + { + visible 0 + position 0.025 0.45 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Focal Length:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_flen + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_flen_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_fnear_text + { + visible 0 + position 0.025 0.65 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Focal Near:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_fnear + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_fnear_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass camera_slider_exp_txt + { + position 0.025 0.45 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Exposure:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + { + SliderWidgetClass camera_slider_exp + { + position 0.25 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + hexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass camera_slider_exp_value + { + ignorepointer 1 + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactpos 0 + vexactpos 0 + text "0.0" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + } + } + + PanelWidgetClass camera_options_pnl + { + position 0 0.675 + color 1 1 1 0 + size 1 0.4 + valign top_ref + halign left_ref + style EditorPanel + { + TextWidgetClass camera_smooth_text + { + position 0.025 0.35 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Cam Smooth:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + } + + ButtonWidgetClass camera_smooth_btn_dec + { + position 0.3 0.3 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_smooth_btn_dec_txt + { + ignorepointer 1 + position 0 0 + color 1 0 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "-" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + ButtonWidgetClass camera_smooth_btn_inc + { + position 0.375 0.3 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_smooth_btn_inc_txt + { + ignorepointer 1 + position 0 0 + color 0 1 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "+" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + TextWidgetClass camera_msens_text + { + position 0.025 0.125 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Cam Sens:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + } + + ButtonWidgetClass camera_msens_btn_dec + { + position 0.3 0.1 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_msens_btn_dec_txt + { + ignorepointer 1 + position 0 0 + color 1 0 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "-" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + ButtonWidgetClass camera_msens_btn_inc + { + position 0.375 0.1 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_msens_btn_inc_txt + { + ignorepointer 1 + position 0 0 + color 0 1 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "+" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + TextWidgetClass camera_fov_speed_text + { + position 0.5 0.125 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "FOV Smooth:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + } + ButtonWidgetClass camera_fov_speed_btn_inc + { + position 0.825 0.1 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_fov_speed_btn_inc_txt + { + ignorepointer 1 + position 0 0 + color 0 1 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "+" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + ButtonWidgetClass camera_fov_speed_btn_dec + { + position 0.75 0.1 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_fov_speed_btn_dec_txt + { + ignorepointer 1 + position 0 0 + color 1 0 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "-" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + TextWidgetClass camera_msmooth_text + { + position 0.5 0.35 + size 1 20 + valign top_ref + halign left_ref + vexactsize 1 + text "Fly smooth:" + font "gui/fonts/MetronBook16" + "text halign" left + "exact text" 1 + "exact text size" 14 + } + + ButtonWidgetClass camera_msmooth_btn_dec + { + position 0.75 0.3 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_msmooth_btn_dec_txt + { + ignorepointer 1 + position 0 0 + color 1 0 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "-" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + ButtonWidgetClass camera_msmooth_btn_inc + { + position 0.825 0.3 + size 25 25 + vexactsize 1 + hexactpos 0 + hexactsize 1 + style Default + { + TextWidgetClass camera_msmooth_btn_inc_txt + { + ignorepointer 1 + position 0 0 + color 0 1 0 1 + size 25 25 + hexactsize 1 + vexactsize 1 + hexactpos 1 + vexactpos 1 + valign top_ref + halign left_ref + text "+" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + } + + } + } + + ButtonWidgetClass camera_btn_rot + { + visible 1 + size 100 25 + color 1 1 1 1 + position 0.025 0.55 + valign top_ref + halign left_Ref + vexactsize 1 + hexactsize 1 + hexactpos 0 + vexactpos 0 + style Default + { + TextWidgetClass camera_btn_rot_text + { + ignorepointer 1 + size 1 1 + position 0 0 + text "Rule of Thirds" + "exact text" 1 + "exact text size" 14 + "text halign" center + "text valign" center + } + } + } + + ButtonWidgetClass camera_btn_phi + { + visible 1 + size 100 25 + color 1 1 1 1 + position 0.3 0.55 + valign top_ref + halign left_Ref + vexactsize 1 + hexactsize 1 + hexactpos 0 + vexactpos 0 + style Default + { + TextWidgetClass camera_btn_phi_text + { + ignorepointer 1 + size 1 1 + position 0 0 + text "PHI Grid" + "exact text" 1 + "exact text size" 14 + "text halign" center + "text valign" center + } + } + } + + ButtonWidgetClass camera_toggle + { + visible 1 + size 150 25 + color 1 1 1 1 + position 0.6 0.55 + valign top_ref + halign left_Ref + vexactsize 1 + hexactsize 1 + hexactpos 0 + vexactpos 0 + style Default + { + TextWidgetClass camera_toggle_text + { + ignorepointer 1 + size 1 1 + position 0 0 + text "Toggle Camera" + "exact text" 1 + "exact text size" 16 + "text halign" center + "text valign" center + font "gui/fonts/MetronBook-Bold28" + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/module.c new file mode 100644 index 00000000..f92b47dd --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/CameraTool/module.c @@ -0,0 +1,24 @@ +#ifndef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" +#endif + +/* + Define used for optional compilations +*/ +#define MODULE_CAMERA_TOOL + +/* + Include of all .c files that belong to this module +*/ +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\CameraTool.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\gui\\CameraSettings.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\WidgetStore.c" +#endif + +#ifndef COM_MODULES_OLDLOADING +void RegisterModule() +{ + COM_GetModuleManager().RegisterModule( new CameraTool ); +} +#endif \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/ObjectEditor.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/ObjectEditor.c new file mode 100644 index 00000000..eb5f8f37 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/ObjectEditor.c @@ -0,0 +1,538 @@ +class ObjectEditor extends Module +{ + protected bool m_ObjectEditorActive = false; + protected bool m_IsDragging; + Object m_SelectedObject; + Object building; + + // protected ref Scene active_Scene; + autoptr array m_Objects = new array; + + string BASE_COM_DIR = "$saves:CommunityOfflineMode"; + string BASE_SCENE_DIR = BASE_COM_DIR + "\\Scenes"; + + ref SceneManager sceneManager; + SceneData currentSceneData; + + void ObjectEditor() + { +// MakeDirectory( BASE_COM_DIR ); +// MakeDirectory( BASE_SCENE_DIR ); + + sceneManager = new SceneManager(); + } + + void ExportObjectLoad() // requested by robotstar78 + { + // Copy paste your exported objects in here to make it look like the example below: + /* + SpawnObject( "Land_CementWorks_Hall2_Brick", "12941.188477 60.166824 5238.811523", "0.000000 0.000000 0.000000" ); + SpawnObject( "Land_CementWorks_Hall2_Brick", "12961.633789 54.630013 5247.288086", "0.000000 0.000000 0.000000" ); + SpawnObject( "Land_CementWorks_MillA", "12965.892578 70.050812 5223.445313", "0.000000 0.000000 0.000000" ); + SpawnObject( "Land_CementWorks_RotFurnace", "12957.807617 69.867195 5234.208984", "0.000000 0.000000 0.000000" ); + */ + } + + void SpawnObject( string type, vector position, vector orientation ) + { + auto obj = GetGame().CreateObject( type, position ); + obj.SetPosition( position ); + obj.SetOrientation( orientation ); + obj.SetOrientation( obj.GetOrientation() ); + obj.Update(); + obj.SetAffectPathgraph( true, false ); + GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, obj ); + + m_Objects.Insert( obj ); + } + + void addObject( Object trackedObject ) + { + m_Objects.Insert( trackedObject ); + } + + override void Init() + { + super.Init(); + + LoadScene(); + ExportObjectLoad(); + } + + /** + + Works very similar to pluginkeybinding system with extended features such as multiple keybinds (mouse + keyboard) per function + Please refrain from assigning same mouse keys to different functions even with more keybinds. + ie: shift+click function vs click function will both call when pressing the former. + + WORK AROUND COULD BE TO MAKE PRIORITY TO FUNCTIONS THAT REQUIRE MORE KEYS/MOUSE BINDS + IE: SHIFT+END TOGGLEOBJECTEDITOR VS CTRL+SHIFT+END SOMEOTHERFUNCTION + THE FUNCTION WITH MORE BINDS SHOULD BE REGISTERED FIRST. + + TODO: MAKE SYSTEM LIKE THAT ^ + - dannydog + + **/ + override void RegisterKeyMouseBindings() + { +// KeyMouseBinding toggleEditor = new KeyMouseBinding( GetModuleType(), "ToggleEditor" , "[Shift]+[End]" , "Toggle object editor." ); + KeyMouseBinding objectSelect = new KeyMouseBinding( GetModuleType(), "ClickObject" , "Selects object on cursor.", true ); + KeyMouseBinding objectDrag = new KeyMouseBinding( GetModuleType(), "DragObject" , "Drag objects on cursor.", true ); + KeyMouseBinding objectDelete = new KeyMouseBinding( GetModuleType(), "DeleteObject" , "Deletes selected object.", true ); + KeyMouseBinding objectGround = new KeyMouseBinding( GetModuleType(), "GroundObject" , "Snaps objects to ground.", true ); + KeyMouseBinding sceneSave = new KeyMouseBinding( GetModuleType(), "ExportScene" , "Saves current scene of objects", true); + KeyMouseBinding tabFix = new KeyMouseBinding( GetModuleType(), "TabFix" , "Fixes issue with tabbing out of the game", true ); +// KeyMouseBinding objectScroll = new KeyMouseBinding( GetModuleType(), "ScrollObject" , "[Shift][Ctrl][Alt]+(Wheel)" , "Raise or lower objects with mouse wheel as well as rotate.", true ); + +// toggleEditor.AddBinding( KeyCode.KC_LSHIFT, KeyMouseBinding.KB_EVENT_HOLD ); +// toggleEditor.AddBinding( KeyCode.KC_END , KeyMouseBinding.KB_EVENT_RELEASE ); // Press END. Using Release prevents key HOLD spam from onKeyPress (could use ClearKey in onKeyPress however) + objectDelete.AddBinding( "kDelete" ); // Pretty much making KB_EVENT_PRESS useless since you can just use KB_EVENT_HOLD instead. + sceneSave.AddBinding( "kLControl" ); + sceneSave.AddBinding( "kS" ); + tabFix.AddBinding( "kLMenu" ); + + objectSelect.AddBinding( "mBLeft" ); // Left Click + objectDrag.AddBinding( "mBLeft" ); + objectDrag.SetActionType( KeyMouseActionType.HOLD ); + objectGround.AddBinding( "mBMiddle" ); + + RegisterKeyMouseBinding( objectSelect ); + RegisterKeyMouseBinding( objectDrag ); + RegisterKeyMouseBinding( objectDelete ); + RegisterKeyMouseBinding( objectGround ); + RegisterKeyMouseBinding( sceneSave ); + RegisterKeyMouseBinding( tabFix ); + } + + void TabFix() + { + m_SelectedObject = NULL; + } + + void ExportScene() + { + string toCopy; + toCopy += "//Spawn helper function\n"; + toCopy += "void SpawnObject( string type, vector position, vector orientation )\n"; + toCopy += "{\n"; + toCopy += " auto obj = GetGame().CreateObject_WIP( type, position, ECE_CREATEPHYSICS );\n"; + toCopy += " obj.SetFlags( EntityFlags.STATIC, false );\n"; + toCopy += " obj.SetPosition( position );\n"; + toCopy += " obj.SetOrientation( orientation );\n"; + toCopy += " obj.SetOrientation( obj.GetOrientation() ); //Collision fix\n"; + toCopy += " obj.Update();\n"; + toCopy += " obj.SetAffectPathgraph( true, false );\n"; + toCopy += " if( obj.CanAffectPathgraph() ) GetGame().GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( GetGame().UpdatePathgraphRegionByObject, 100, false, obj );\n"; + toCopy += "}\n"; + toCopy += "\n"; + toCopy += "//Your custom spawned objects\n"; + + foreach( Object m_object : m_Objects ) + { + toCopy = toCopy + "SpawnObject( \"" + m_object.GetType() + "\", \"" + COM_VectorToString( m_object.GetPosition() ) + "\", \"" + COM_VectorToString( m_object.GetOrientation() ) + "\" );\n"; + } + + GetGame().CopyToClipboard( toCopy ); + + COM_Message( "Copied to clipboard" ); + } + + void SaveScene() + { + + // loot spots + // pumpkins = civilian + // apple = medical + // orange = industral + // plum = military + +/* + SceneInfo sceneData = new SceneInfo("Test"); + // vector position = COM_GetPB().WorldToModel(); // origin point + + foreach( Object m_object : m_Objects ) + { + vector pos = COM_GetPB().WorldToModel( m_object.GetPosition() ); + + if ( m_object.GetType() != "Pumpkin" ) + { + sceneData.AddObject( m_object, pos ); // add objects + } + // then add loot spots + } + + foreach( Object m_objectt : m_Objects ) + { + vector poss = COM_GetPB().WorldToModel( m_object.GetPosition() ); + + if ( m_object.GetType() == "Pumpkin" ) + { + sceneData.AddObject( m_objectt, poss ); // add objects + } + // then add loot spots + } + + JsonFileLoader< SceneInfo >.JsonSaveFile( SCENE_DATA + "\\" + sceneData.GetName() + ".json", sceneData ); + + */ + + /* + string toCopy = ""; + + foreach( Object m_object : m_Objects ) + { + if ( m_object.GetType() == "Pot" ) //save loot positions + { + vector modelPos = m_SelectedObject.WorldToModel( m_object.GetPosition() ); + + toCopy = toCopy + "{" + modelPos[0] + "," + modelPos[1] + "," + modelPos[2] + "},"; + } + } + toCopy = m_SelectedObject.GetType() + "[] = {" + toCopy + "};"; + + GetGame().CopyToClipboard( toCopy ); + m_Objects.Clear(); + */ + + /* + ref SceneSaveST scene = new SceneSaveST(); + scene.name = "latest"; + + foreach( Object m_object : m_Objects ) + { + ref Param objectParam = new Param3( m_object.GetType(), m_object.GetPosition(), m_object.GetOrientation() ); + scene.m_SceneObjects.Insert( objectParam ); + } + */ + + auto exportFile = OpenFile( "$saves:COMObjectEditorSave.json", FileMode.WRITE ); + + if( !exportFile ) + { + COM_Message( "Error writing COMObjectEditorSave.json. Current changes could not NOT be saved!!!" ); + return; + } + + FPrint( exportFile, "{\"name\":\"latest\",\"m_SceneObjects\":[" ); + + auto serial = new JsonSerializer; + string file_content; + foreach(int nObject, Object object : m_Objects ) + { + auto objectParam = new Param3( object.GetType(), object.GetPosition(), object.GetOrientation() ); + serial.WriteToString( objectParam, false, file_content ); + FPrint( exportFile, file_content ); + if( nObject < m_Objects.Count() - 1 ) FPrint( exportFile, "," ); + } + + FPrint( exportFile, "]}" ); + + CloseFile( exportFile ); + + COM_Message( "Saved objects to COMObjectEditorSave.json (User/Documents/DayZ)." ); +// JsonFileLoader< SceneSaveST >.JsonSaveFile( BASE_SCENE_DIR + "\\" + "latest.json", scene ); +// JsonFileLoader< SceneSaveST >.JsonSaveFile( "$saves:COMObjectEditorSave.json", scene ); + } + + void LoadScene() + { + SceneSaveST scene = new SceneSaveST(); + +// JsonFileLoader.JsonLoadFile( BASE_SCENE_DIR + "\\" + "latest.json", scene ); + JsonFileLoader.JsonLoadFile( "$saves:COMObjectEditorSave.json", scene ); + + foreach( auto param : scene.m_SceneObjects ) + { + Object object = GetGame().CreateObject( param.param1, param.param2, false, false ); + object.SetOrientation( param.param3 ); + COM_ForceTargetCollisionUpdate( object ); + + m_Objects.Insert( object ); + } + } + + void EditorState( bool state ) + { + if ( m_ObjectEditorActive == state ) + { + return; + } + + m_ObjectEditorActive = state; + + if ( m_ObjectEditorActive ) + { + COM_GetPB().MessageStatus("Object Editor Enabled"); + } + else + { + COM_GetPB().MessageStatus("Object Editor Disabled"); + } + } + + void ToggleEditor() + { + m_ObjectEditorActive = !m_ObjectEditorActive; + + if ( m_ObjectEditorActive ) + { + COM_GetPB().MessageStatus("Object Editor Enabled"); + } + else + { + COM_GetPB().MessageStatus("Object Editor Disabled"); + } + } + + bool IsEditing() + { + return m_ObjectEditorActive; + } + + void SelectObject( Object object ) + { + if ( ( ( m_SelectedObject != NULL ) && ( m_SelectedObject == object ) ) || object.IsInherited( PlayerBase ) ) + { + return; + } + + if ( COM_CTRL() ) + { + vector modelPos = m_SelectedObject.WorldToModel( object.GetPosition() ); + + ObjectInfoMenu.infoPosX.SetText( modelPos[0].ToString() ); + ObjectInfoMenu.infoPosY.SetText( modelPos[1].ToString() ); + ObjectInfoMenu.infoPosZ.SetText( modelPos[2].ToString() ); + + } + else + { + ObjectInfoMenu.infoPosX.SetText( object.GetPosition()[0].ToString() ); + ObjectInfoMenu.infoPosY.SetText( object.GetPosition()[1].ToString() ); + ObjectInfoMenu.infoPosZ.SetText( object.GetPosition()[2].ToString() ); + + ObjectInfoMenu.infoPosYaw.SetText( object.GetOrientation()[0].ToString() ); + ObjectInfoMenu.infoPosPitch.SetText( object.GetOrientation()[1].ToString() ); + ObjectInfoMenu.infoPosRoll.SetText( object.GetOrientation()[2].ToString() ); + } + + m_SelectedObject = object; + } + + void DeselectObject() + { + m_SelectedObject = NULL; + } + + void DragObject() + { + if ( !m_ObjectEditorActive ) + { + return; + } + + if ( m_SelectedObject ) + { + vector dir = GetGame().GetPointerDirection(); + + vector from = GetGame().GetCurrentCameraPosition(); + + vector to = from + ( dir * 10000 ); + + vector contact_pos; + vector contact_dir; + vector bbox; + + int contact_component; + + m_SelectedObject.GetCollisionBox( bbox ); + + if ( DayZPhysics.RaycastRV( from, to, contact_pos, contact_dir, contact_component, NULL, m_SelectedObject, COM_GetPB(), false, false ) ) + { + //vector oOrgPos = m_SelectedObject.GetPosition(); + //float fSurfaceHight = GetGame().SurfaceY( oOrgPos [ 0 ], oOrgPos [ 2 ] ); + + //float nHightOffsetToGround = oOrgPos [ 1 ] - fSurfaceHight; // todo: store offset of existing objects for later use. for snap to ground perhaps? + + //contact_pos [ 1 ] = contact_pos [ 1 ] + nHightOffsetToGround; + + m_SelectedObject.SetPosition( contact_pos ); + m_SelectedObject.PlaceOnSurface(); + + COM_ForceTargetCollisionUpdate( m_SelectedObject ); + + ObjectInfoMenu.infoPosX.SetText( m_SelectedObject.GetPosition()[0].ToString() ); + ObjectInfoMenu.infoPosY.SetText( m_SelectedObject.GetPosition()[1].ToString() ); + ObjectInfoMenu.infoPosZ.SetText( m_SelectedObject.GetPosition()[2].ToString() ); + } + } + } + +// void ScrollObject( int state ) +// { +// if ( !m_ObjectEditorActive ) +// { +// return; +// } +// /* +// +// if ( m_SelectedObject ) +// { +// vector pos = m_SelectedObject.GetPosition(); +// vector ori = m_SelectedObject.GetOrientation(); +// +// bool up = state < 0; +// int value = 1; +// if ( up ) value = -1; +// +// if ( COM_SHIFT() ) +// { +// if ( ori[0] > 0 ) // seemless pitch change +// { +// value = -value; +// } +// ori[1] = ori[1] + value; +// +// m_SelectedObject.SetOrientation( ori ); +// } +// else if ( COM_CTRL() ) +// { +// ori [ 0 ] = ori [ 0 ] + value; +// +// m_SelectedObject.SetOrientation( ori ); +// } +// else if ( COM_ALT() ) +// { +// ori[ 2 ] = ori[ 2 ] + value; +// +// m_SelectedObject.SetOrientation( ori ); +// } +// else +// { +// pos [ 1 ] = pos [ 1 ] + value*0.05; +// +// m_SelectedObject.SetPosition( pos ); +// } +// } +// */ +// } + + void ClickObject() + { + if ( !m_ObjectEditorActive ) + { + return; + } + Widget widgetCursor = GetGame().GetUIManager().GetWidgetUnderCursor(); + + if ( widgetCursor && widgetCursor.GetName() != "EditorMenu" ) + { + return; + } + + vector dir = GetGame().GetPointerDirection(); + vector from = GetGame().GetCurrentCameraPosition(); + vector to = from + ( dir * 100 ); + + set< Object > objects = COM_GetObjectsAt(from, to, COM_GetPB(), 0.5 ); + bool selected = false; + //Print ("Building Type = " + building.GetType()); + + if ( objects ) + { + for ( int newObject = 0; ( ( newObject < objects.Count() ) && !selected ); ++newObject ) + { + Object obj = objects.Get( newObject ); + + if ( COM_CTRL() ) + { + + vector modelPos = obj.WorldToModel( m_SelectedObject.GetPosition() ); + + ObjectInfoMenu.infoPosX.SetText( modelPos[0].ToString() ); + ObjectInfoMenu.infoPosY.SetText( modelPos[1].ToString() ); + ObjectInfoMenu.infoPosZ.SetText( modelPos[2].ToString() ); + } + else + { + SelectObject( obj ); + selected = true; + + ObjectInfoMenu.infoPosX.SetText( m_SelectedObject.GetPosition()[0].ToString() ); + ObjectInfoMenu.infoPosY.SetText( m_SelectedObject.GetPosition()[1].ToString() ); + ObjectInfoMenu.infoPosZ.SetText( m_SelectedObject.GetPosition()[2].ToString() ); + + ObjectInfoMenu.infoPosYaw.SetText( m_SelectedObject.GetOrientation()[0].ToString() ); + ObjectInfoMenu.infoPosPitch.SetText( m_SelectedObject.GetOrientation()[1].ToString() ); + ObjectInfoMenu.infoPosRoll.SetText( m_SelectedObject.GetOrientation()[2].ToString() ); + } + } + } + + if ( !selected && m_SelectedObject ) + { + COM_GetPB().MessageStatus("Current object deselected."); + DeselectObject(); + } + } + + void DeleteObject() + { + if ( !m_ObjectEditorActive ) + { + return; + } + + if ( m_SelectedObject ) + { + m_Objects.RemoveItem(m_SelectedObject); + m_SelectedObject.SetPosition(vector.Zero); // If object does not physically delete, teleport it to 0 0 0 + GetGame().ObjectDelete( m_SelectedObject ); + + ObjectInfoMenu.UpdateObjectList(); + + m_SelectedObject = NULL; + } + } + + void GroundObject() + { + if ( !m_ObjectEditorActive ) + { + return; + } + + if ( m_SelectedObject ) + { + /* + TStringArray sArray = new TStringArray; + m_SelectedObject.GetSelectionList( sArray ); + + foreach( string s : sArray ) + { + Print( s ); + //GetPlayer().MessageStatus( s); + } + */ + /* + + vector pos = m_SelectedObject.GetPosition(); + pos[1] = GetGame().SurfaceY(pos[0], pos[2]); + + vector clippingInfo[2]; + vector objectBBOX[2]; + + m_SelectedObject.GetCollisionBox( objectBBOX ); + m_SelectedObject.ClippingInfo( clippingInfo ); + + //float clipY = objectBBOX[1][1] / 2.0//- clippingInfo[0][1]; + //pos[1] = pos[1] + objectBBOX[1][1] - clipY; + pos[1] = pos[1] + clippingInfo[1][1] / 2.0;//objectBBOX[0][1] - clipY + + m_SelectedObject.SetPosition(pos); + */ + //COM_SnapToGroundNew( m_SelectedObject ); + m_SelectedObject.PlaceOnSurface(); + } + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/EditorMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/EditorMenu.c new file mode 100644 index 00000000..d1a584ef --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/EditorMenu.c @@ -0,0 +1,260 @@ +class EditorMenu extends UIScriptedMenu +{ + static const int MENU_ID = 133742; + + protected ButtonWidget m_ObjectButton; + protected ButtonWidget m_PositionButton; + protected ButtonWidget m_WeatherButton; + protected ButtonWidget m_GameButton; + protected ButtonWidget m_CameraButton; + protected ButtonWidget m_ObjectEditorButton; + + protected Widget m_objectMenu; + protected Widget m_weatherMenu; + protected Widget m_positionMenu; + protected Widget m_gameMenu; + protected Widget m_objectInfoMenu; + protected Widget m_cameraMenu; + + void EditorMenu() + { + SetID(MENU_ID); + } + + override int GetID() + { + return MENU_ID; + } + + override Widget Init() + { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\EditorMenu.layout" ); + + m_ObjectButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("objects_button") ); + m_PositionButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("position_button") ); + m_WeatherButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("weather_button") ); + m_GameButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("game_button") ); + m_CameraButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("camera_button") ); + m_ObjectEditorButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget( "objectEditor_button" )); + + + // object menu + m_objectMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\ObjectMenu.layout", layoutRoot ); + m_weatherMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\WeatherMenu.layout", layoutRoot ); + m_positionMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Admintool\\gui\\layouts\\PositionMenu.layout", layoutRoot ); + m_gameMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\GameMenu.layout", layoutRoot ); + m_objectInfoMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\ObjectEditorInfo.layout", layoutRoot ); + m_cameraMenu = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\CameraTool\\gui\\layouts\\CameraSettings.layout", layoutRoot ); + + return layoutRoot; + } + + override void LockControls() + { + super.LockControls(); + + GetGame().GetInput().ChangeGameFocus(1); + } + + override void UnlockControls() + { + super.UnlockControls(); + + GetGame().GetInput().ChangeGameFocus(-1); + } + + override void OnHide() + { + super.OnHide(); + + ObjectEditor.Cast( COM_GetModuleManager().GetModule( ObjectEditor )).EditorState( false ); + + if ( !CameraTool.Cast(COM_GetModuleManager().GetModule(CameraTool)).IsUsingCamera() ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( false, 0 ); + } + + CameraSettings.CAMERA_ROT.Show( false ); + CameraSettings.CAMERA_PHI.Show( false ); + } + + override bool OnDoubleClick( Widget w, int x, int y, int button ) + { + if ( w == layoutRoot ) + { + ObjectMenu objectMenu; + m_objectMenu.GetScript( objectMenu ); + string strSelection = objectMenu.GetCurrentSelection(); + + if ( strSelection != "" ) + { + bool ai = false; + + if ( GetGame().IsKindOf( strSelection, "DZ_LightAI" ) ) + { + ai = true; + } + + Object obj = GetGame().CreateObject( strSelection, COM_GetPointerPos(), true, ai ); + obj.PlaceOnSurface(); // reeeeeeeeeeeee + COM_ForceTargetCollisionUpdate( obj ); + ObjectEditor.Cast(COM_GetModuleManager().GetModule( ObjectEditor )).SelectObject( obj ); + ObjectEditor.Cast(COM_GetModuleManager().GetModule( ObjectEditor )).addObject( obj ); + + ObjectInfoMenu.listBox.AddItem(obj.GetType(), obj, 0); + } + } + + return false; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + PopupMenu popMenu; + + if ( w == m_ObjectButton ) + { + m_objectMenu.GetScript( popMenu ); + } + if ( w == m_PositionButton ) + { + m_positionMenu.GetScript( popMenu ); + } + + if ( w == m_WeatherButton ) + { + m_weatherMenu.GetScript( popMenu ); + } + + if ( w == m_GameButton ) + { + m_gameMenu.GetScript( popMenu ); + } + if ( w == m_ObjectEditorButton ) + { + m_objectInfoMenu.GetScript( popMenu ); + + ObjectEditor.Cast( COM_GetModuleManager().GetModule( ObjectEditor )).ToggleEditor(); + } + + if ( w == m_CameraButton ) + { + m_cameraMenu.GetScript( popMenu ); + } + + if ( popMenu ) + { + + if ( popMenu.GetLayoutRoot().IsVisible() ) + { + popMenu.GetLayoutRoot().Show( false ); + popMenu.OnHide(); + } + else + { + popMenu.GetLayoutRoot().Show( true ); + popMenu.OnShow(); + } + + SetButtonFocus( w ); + HideMenus( popMenu.GetLayoutRoot() ); + } + + return false; + } + + void SetButtonFocus( Widget focus ) + { + // todo change this so that its based on visible layout and not click event + + Widget m_ObjectButtonBkg = layoutRoot.FindAnyWidget("objects_button_bkg"); + Widget m_PositionButtonBkg = layoutRoot.FindAnyWidget("position_button_bkg"); + Widget m_WeatherButtonBkg = layoutRoot.FindAnyWidget("weather_button_bkg"); + Widget m_GameButtonBkg = layoutRoot.FindAnyWidget("game_button_bkg"); + Widget m_ObjectEditorBkg = layoutRoot.FindAnyWidget("objectEditor_button_bkg"); + Widget m_CameraButtonBkg = layoutRoot.FindAnyWidget("camera_button_bkg"); + + m_ObjectButtonBkg.SetColor(ARGB(0, 255, 255, 255)); // reset colors + m_PositionButtonBkg.SetColor(ARGB(0, 255, 255, 255)); + m_WeatherButtonBkg.SetColor(ARGB(0, 255, 255, 255)); + m_GameButtonBkg.SetColor(ARGB(0, 255, 255, 255)); + m_ObjectEditorBkg.SetColor(ARGB(0, 255, 255, 255)); + m_CameraButtonBkg.SetColor(ARGB(0, 255, 255, 255)); + + if ( m_ObjectButton == focus && m_objectMenu.IsVisible() ) + { + m_ObjectButtonBkg.SetColor(ARGB(255, 255, 0, 0)); + } + if ( m_WeatherButton == focus && m_weatherMenu.IsVisible() ) + { + m_WeatherButtonBkg.SetColor(ARGB(255, 255, 0, 0)); + } + if ( m_PositionButton == focus && m_positionMenu.IsVisible() ) + { + m_PositionButtonBkg.SetColor(ARGB(255, 255, 0, 0)); + } + if ( m_GameButton == focus && m_gameMenu.IsVisible() ) + { + m_GameButtonBkg.SetColor(ARGB(255, 255, 0, 0)); + } + if ( m_ObjectEditorButton == focus && m_objectInfoMenu.IsVisible() ) + { + m_ObjectEditorBkg.SetColor(ARGB(255, 255, 0, 0)); + } + if ( m_CameraButton == focus && m_cameraMenu.IsVisible() ) + { + m_CameraButtonBkg.SetColor(ARGB(255, 255, 0, 0)); + } + } + + void HideMenus( Widget focus ) + { + if ( m_objectInfoMenu != focus && m_objectMenu != focus && m_objectMenu.IsVisible() ) + { + m_objectMenu.Show(false); + } + if ( m_weatherMenu != focus && m_weatherMenu.IsVisible() ) + { + m_weatherMenu.Show(false); + } + if ( m_positionMenu != focus && m_positionMenu.IsVisible() ) + { + m_positionMenu.Show(false); + } + if ( m_gameMenu != focus && m_gameMenu.IsVisible() ) + { + m_gameMenu.Show(false); + } + if ( m_cameraMenu != focus && m_cameraMenu.IsVisible() ) + { + m_cameraMenu.Show(false); + } + if ( m_objectMenu != focus && m_objectInfoMenu != focus && m_objectInfoMenu.IsVisible() ) + { + m_objectInfoMenu.Show(false); + ObjectEditor.Cast( COM_GetModuleManager().GetModule( ObjectEditor )).ToggleEditor(); + } + } + + override void Update( float timeslice ) + { + //GetPlayer().MessageStatus( (GetMouseState( MouseState.RIGHT ) & MB_PRESSED_MASK).ToString() ); + + if ( GetMouseState( MouseState.RIGHT ) & MB_PRESSED_MASK ) + { + if ( GetGame().GetUIManager().IsCursorVisible() ) + { + GetGame().GetUIManager().ShowUICursor( false ); + GetGame().GetInput().ResetGameFocus( ); + } + } + else + { + if ( !GetGame().GetUIManager().IsCursorVisible() ) + { + GetGame().GetUIManager().ShowUICursor( true ); + GetGame().GetInput().ChangeGameFocus( 1 ); + } + } + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/GameMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/GameMenu.c new file mode 100644 index 00000000..82d38d0d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/GameMenu.c @@ -0,0 +1,250 @@ +class GameMenu extends PopupMenu +{ + TextListboxWidget m_gameScriptList; + Widget m_checkboxPanel; + ButtonWidget m_gameScriptButton; + + protected ref map< string, string > checkBoxMap = new map< string, string >; // store widget name + + string checkboxLayout = "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\layouts\\CheckboxTemplate.layout"; + + override void Init() + { + m_checkboxPanel = layoutRoot.FindAnyWidget("game_checkbox_panel"); + m_gameScriptList = TextListboxWidget.Cast(layoutRoot.FindAnyWidget("game_list_box")); + m_gameScriptButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("game_script_button")); + + m_gameScriptList.AddItem( "Spawn HMMWV", new Param1< string >( "SpawnHMMWV" ), 0 ); + m_gameScriptList.AddItem( "Spawn Hatchback", new Param1< string >( "SpawnHatchback" ), 0 ); + m_gameScriptList.AddItem( "Spawn Sedan", new Param1< string >( "SpawnSedan" ), 0 ); + m_gameScriptList.AddItem( "Spawn Gunter 2", new Param1< string >( "SpawnGunter" ), 0 ); + m_gameScriptList.AddItem( "Spawn Sarka", new Param1< string >( "SpawnSarka" ), 0 ); +// m_gameScriptList.AddItem( "Spawn V3S", new Param1< string >( "SpawnV3S" ), 0 ); +// m_gameScriptList.AddItem( "Spawn V3S_Cargo", new Param1< string >( "SpawnV3SCargo" ), 0 ); +// m_gameScriptList.AddItem( "Spawn Bus", new Param1< string >( "SpawnBus" ), 0 ); +// m_gameScriptList.AddItem( "Spawn Van", new Param1< string >( "SpawnVan" ), 0 ); + + CheckBoxWidget checkBoxGodmode = CheckBoxWidget.Cast(GetGame().GetWorkspace().CreateWidgets( checkboxLayout, m_checkboxPanel )); + checkBoxGodmode.SetName( "Godmode" ); + checkBoxGodmode.SetText( "Godmode" ); + +// CheckBoxWidget checkBoxAiming = CheckBoxWidget.Cast(GetGame().GetWorkspace().CreateWidgets( checkboxLayout, m_checkboxPanel )); +// checkBoxAiming.SetName("OldAiming"); +// checkBoxAiming.SetText("Old Aiming"); +// +// CheckBoxWidget checkBoxLaser = CheckBoxWidget.Cast(GetGame().GetWorkspace().CreateWidgets( checkboxLayout, m_checkboxPanel )); +// checkBoxLaser.SetName("LaserPointer"); +// checkBoxLaser.SetText("Laser Pointer"); + + checkBoxMap.Insert( checkBoxGodmode.GetName(), "ToggleGodMode" ); +// checkBoxMap.Insert( checkBoxAiming.GetName(), "ToggleOldAiming" ); +// checkBoxMap.Insert( checkBoxLaser.GetName(), "ToggleLaser" ); + } + + override void OnShow() + { + // Update checkbox checked + UpdateCheckBoxes(); + } + + void UpdateCheckBoxes() + { + foreach( string widgetName, string function : checkBoxMap ) + { + Widget widget = m_checkboxPanel.FindWidget( widgetName ); + + if ( widget.IsInherited( CheckBoxWidget )) + { + CheckBoxWidget checkbox = CheckBoxWidget.Cast( widget ); + bool checked; + GetGame().GameScript.CallFunction( this , function , checked, NULL ); + checkbox.SetChecked( checked ); + } + } + } + + bool ToggleOldAiming( CheckBoxWidget widget ) + { + if ( widget ) // Temp work around. I'm lazy xd + { + m_COM_OldAiming = !m_COM_OldAiming; + + COM_GetPB().OverrideShootFromCamera( !m_COM_OldAiming ); + } + return m_COM_OldAiming; + } + + bool ToggleGodMode( CheckBoxWidget widget ) + { + if ( widget ) + { + m_COM_GodMode = !m_COM_GodMode; + + COM_GetPB().SetAllowDamage( !m_COM_GodMode ); + } + return m_COM_GodMode; + } + + bool ToggleLaser( CheckBoxWidget widget ) + { + if ( widget ) + { + COM_bc_Visible = !COM_bc_Visible; + } + return COM_bc_Visible; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + + string param; + Param1 param1; + + if ( w == m_gameScriptButton ) + { + int selectRow = m_gameScriptList.GetSelectedRow(); + + if ( selectRow == -1 ) return false; + + m_gameScriptList.GetItemData( selectRow, 0, param1 ); + + if ( param1 ) + { + GetGame().GameScript.CallFunction( this , param1.param1 , NULL, 0 ); + } + } + + if ( w.IsInherited( CheckBoxWidget ) ) + { + param = checkBoxMap.Get( w.GetName() ); + + if ( param ) + { + GetGame().GameScript.CallFunction( this , param , NULL, CheckBoxWidget.Cast( w ) ); + } + } + + return false; + } + + void SpawnHMMWV() + { + TStringArray attArr = { + "HeadlightH7", "HeadlightH7", "CarBattery", "GlowPlug", + "Offroad_02_Wheel", "Offroad_02_Wheel", "Offroad_02_Wheel", "Offroad_02_Wheel", "Offroad_02_Wheel", + "Offroad_02_Hood", "Offroad_02_Trunk", + "Offroad_02_Door_1_1", "Offroad_02_Door_1_2", "Offroad_02_Door_2_1", "Offroad_02_Door_2_2", + }; + + SpawnVehicle( "Offroad_02", attArr ); + } + + void SpawnHatchback() + { + TStringArray attArr = { + "HeadlightH7", "HeadlightH7", + "HatchbackWheel", "HatchbackWheel", "HatchbackWheel", "HatchbackWheel", + "CarBattery", "CarRadiator", "EngineBelt", "SparkPlug", "HatchbackHood", + "HatchbackTrunk", "HatchbackDoors_Driver", "HatchbackDoors_CoDriver", + }; + + SpawnVehicle( "OffroadHatchback", attArr ); + } + + void SpawnSedan() + { + TStringArray attArr = { + "HeadlightH7", "HeadlightH7", + "CivSedanWheel", "CivSedanWheel", "CivSedanWheel", "CivSedanWheel", + "CarBattery", "CarRadiator","EngineBelt", "SparkPlug","CivSedanHood", + "CivSedanTrunk", "CivSedanDoors_Driver","CivSedanDoors_CoDriver", + "CivSedanDoors_BackLeft", "CivSedanDoors_BackRight", + }; + + SpawnVehicle( "CivilianSedan", attArr ); + } + + void SpawnGunter() + { + TStringArray attArr = { + "HeadlightH7", "HeadlightH7", "CarBattery", "CarRadiator", "SparkPlug", "Hatchback_02_Door_1_1", + "Hatchback_02_Door_1_2", "Hatchback_02_Door_2_1","Hatchback_02_Door_2_2", + "Hatchback_02_Trunk", "Hatchback_02_Hood", "Hatchback_02_Wheel", "Hatchback_02_Wheel", + "Hatchback_02_Wheel", "Hatchback_02_Wheel", "CivSedanDoors_BackRight", + }; + + SpawnVehicle( "Hatchback_02", attArr ); + } + + void SpawnSarka() + { + TStringArray attArr = { + "HeadlightH7", "HeadlightH7", "CarBattery", "CarRadiator", "SparkPlug", "Sedan_02_Hood", + "Sedan_02_Hood","Sedan_02_Trunk","Sedan_02_Door_1_1", + "Sedan_02_Door_2_1","Sedan_02_Door_1_2","Sedan_02_Door_2_2","Sedan_02_Wheel", + "Sedan_02_Wheel","Sedan_02_Wheel","Sedan_02_Wheel", + }; + + SpawnVehicle( "Sedan_02", attArr ); + } + + void SpawnV3SCargo() + { + TStringArray attArr = { + "V3SWheel","V3SWheel", "V3SWheel","V3SWheel", "V3SWheelDouble","V3SWheelDouble", "V3SWheelDouble","V3SWheelDouble", + "TruckBattery","TruckRadiator","EngineBelt","GlowPlug","V3SHood", + "V3SDoors_Driver_Orange","V3SDoors_CoDriver_Orange", + }; + + SpawnVehicle( "V3S_Cargo_Blue", attArr ); + } + + void SpawnV3S() + { + TStringArray attArr = { + "V3SWheel","V3SWheel", "V3SWheel","V3SWheel", "V3SWheelDouble","V3SWheelDouble", "V3SWheelDouble","V3SWheelDouble", + "TruckBattery","TruckRadiator","EngineBelt","GlowPlug","V3SHood", + "V3SDoors_Driver_Orange","V3SDoors_CoDriver_Orange", + }; + + SpawnVehicle( "V3S_Chassis_Blue", attArr ); + } + + void SpawnBus() + { + TStringArray attArr = { + "TransitBusWheel","TransitBusWheel", "TransitBusWheelDouble","TransitBusWheelDouble", + "TruckBattery","TruckRadiator","EngineBelt","GlowPlug","BusHood", + "BusDoors_Left","BusDoors_Right", "BusDoors_Left","BusDoors_Right", "BusDoors_Left","BusDoors_Right", + }; + + SpawnVehicle( "TransitBus", attArr ); + } + + void SpawnVan() + { + TStringArray attArr = { + "CivVanWheel","CivVanWheel","CivVanWheel","CivVanWheel", + "CarBattery","CarRadiator","EngineBelt","SparkPlug","CivVanTrunk", + "CivVanDoors_Driver","CivVanDoors_CoDriver","CivVanDoors_BackRight", + "CivVanDoors_TrumpDown", "CivVanDoors_TrumpUp", + }; + + SpawnVehicle( "CivilianVan", attArr ); + } + + void SpawnVehicle( string vehicle, TStringArray attachments) + { + Car oCar = Car.Cast( GetGame().CreateObject( vehicle, COM_GetCursorPos(), false, false ) ); + + for (int j = 0; j < attachments.Count(); j++) { oCar.GetInventory().CreateAttachment( attachments.Get(j) ); } + + oCar.Fill( CarFluid.FUEL, 1000 ); + oCar.Fill( CarFluid.OIL, 1000 ); + oCar.Fill( CarFluid.BRAKE, 1000 ); + oCar.Fill( CarFluid.COOLANT, 1000 ); + + //oCar.EngineStart(); + //oCar.SwitchLights(); + } +}; diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectInfoMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectInfoMenu.c new file mode 100644 index 00000000..fd8851ab --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectInfoMenu.c @@ -0,0 +1,354 @@ +class ObjectInfoMenu extends PopupMenu +{ + static EditBoxWidget infoPosX; + static EditBoxWidget infoPosY; + static EditBoxWidget infoPosZ; + + static EditBoxWidget infoPosYaw; + static EditBoxWidget infoPosPitch; + static EditBoxWidget infoPosRoll; + + static TextListboxWidget listBox; + + private ref WidgetStore widgetStore; + + void ObjectInfoMenu() + { + + } + + void ~ObjectInfoMenu() + { + GetGame().GetCallQueue( CALL_CATEGORY_GUI ).Remove( Update ); + } + + static void UpdateObjectList() + { + listBox.ClearItems(); + + auto objects = ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).m_Objects; + + foreach( Object obj : objects ) + { + listBox.AddItem(obj.GetType(), obj, 0); // store object ref into list? + } + } + + Object GetSelectedRowObject() + { + if ( listBox.GetSelectedRow() != -1 ) + { + Object result; + listBox.GetItemData( listBox.GetSelectedRow(), 0, result ); + return result; + } + + return NULL; + } + + override void Init( ) + { + + widgetStore = new WidgetStore( layoutRoot ); + + listBox = widgetStore.GetListboxWidget("object_editor_info_list"); + + infoPosX = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_pos_x" )); + infoPosY = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_pos_y" )); + infoPosZ = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_pos_z" )); + infoPosYaw = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_yaw_input" )); + infoPosPitch = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_pitch_input" )); + infoPosRoll = EditBoxWidget.Cast(layoutRoot.FindAnyWidget( "object_info_roll_input" )); + } + + override bool OnItemSelected( Widget w, int x, int y, int row, int column, int oldRow, int oldColumn ) + { + if ( w.GetName() == "object_editor_info_list") + { + Object selected = GetSelectedRowObject(); + if ( selected ) + { + ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).SelectObject( selected ); + } + } + + return false; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + if ( w.GetName() == "object_editor_info_export") + { + ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).ExportScene(); + } + if ( w.GetName() == "object_editor_info_save") + { + ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).SaveScene(); + } + if ( w.GetName() == "object_editor_info_clear") + { + auto objects = ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).m_Objects; + + foreach( Object obj : objects ) + { + GetGame().ObjectDelete( obj ); + } + objects.Clear(); + UpdateObjectList(); + } + if ( w.GetName() == "object_editor_info_dumplods" ) + { + string toCopy = ""; + array lods = new array; + Object object = ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).m_SelectedObject; + object.GetLODS(lods); + + foreach( LOD lod : lods ) + { + toCopy = toCopy + object.GetLODName( lod ) + "\n"; + array selections = new array; + lod.GetSelections( selections ); + foreach ( Selection selection : selections ) + { + toCopy = toCopy + " " + selection.GetName() + "\n"; + } + } + GetGame().CopyToClipboard(toCopy); + COM_Message("Dumped LODs to clipboard"); + } + if ( w.GetName() == "object_editor_info_load") + { + objects = ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).m_Objects; + + foreach( Object obj2 : objects ) + { + GetGame().ObjectDelete( obj2 ); + } + objects.Clear(); + ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)).LoadScene(); + UpdateObjectList(); + } + return false; + } + + override bool OnMouseWheel(Widget w, int x, int y, int wheel) + { + if ( !GetSelectedObject() ) + { + return false; + } + vector orientation = GetSelectedObject().GetOrientation(); + vector position = GetSelectedObject().GetPosition(); + + bool up = wheel < 0; + int value = 1; + + if ( up ) value = -1; + + if ( w == infoPosYaw ) + { + orientation[0] = orientation[0] + value; + + if( Math.AbsFloat( orientation[0] ) < 0.001 ) + { + orientation[0] = 0; + } + + GetSelectedObject().SetOrientation( orientation ); + infoPosYaw.SetText( orientation[0].ToString() ); + } + if ( w == infoPosPitch ) + { + if ( orientation[0] > 0 ) // seemless pitch change + { + value = -value; + } + + orientation[1] = orientation[1] + value; + + if( Math.AbsFloat( orientation[1] ) < 0.001 ) + { + orientation[1] = 0; + } + + GetSelectedObject().SetOrientation( orientation ); + infoPosPitch.SetText( orientation[1].ToString() ); + + } + if ( w == infoPosRoll ) + { + orientation[2] = orientation[2] + value; + + if( Math.AbsFloat( orientation[2] ) < 0.001 ) + { + orientation[2] = 0; + } + + GetSelectedObject().SetOrientation( orientation ); + infoPosRoll.SetText( orientation[2].ToString() ); + } + if ( w == infoPosY ) + { + position[1] = position[1] + value * 0.05; + GetSelectedObject().SetPosition( position ); + COM_ForceTargetCollisionUpdate( GetSelectedObject() ); + infoPosY.SetText( position[1].ToString() ); + } + if ( w == infoPosX ) + { + position[0] = position[0] + (value * 0.05); + GetSelectedObject().SetPosition( position ); + COM_ForceTargetCollisionUpdate( GetSelectedObject() ); + infoPosX.SetText( position[0].ToString() ); + } + if ( w == infoPosZ ) + { + position[2] = position[2] + value * 0.05; + GetSelectedObject().SetPosition( position ); + COM_ForceTargetCollisionUpdate( GetSelectedObject() ); + infoPosZ.SetText( position[2].ToString() ); + } + return false; + } + + override bool OnChange( Widget w, int x, int y, bool finished ) // finished = press enter + { + if ( !w.IsInherited( EditBoxWidget )) + { + return false; + } + + vector pos = GetSelectedObject().GetPosition(); + vector orientation = GetSelectedObject().GetOrientation(); + + EditBoxWidget editWidget = EditBoxWidget.Cast(w); + string text = editWidget.GetText(); + + float value = text.ToFloat(); + +// Print("float value = text.ToFloat() = " + value); + + if ( editWidget == infoPosYaw ) + { + orientation[0] = value; + } + if ( editWidget == infoPosPitch ) + { + orientation[1] = value; + } + if ( editWidget == infoPosRoll ) + { + orientation[2] = value; + } + if ( editWidget == infoPosX ) + { + pos[0] = value; + } + if ( editWidget == infoPosY ) + { + pos[1] = value; + } + if ( editWidget == infoPosZ ) + { + pos[2] = value; + } + GetSelectedObject().SetPosition( pos ); + GetSelectedObject().SetOrientation( orientation ); + +/* + bool check = false; //????????????? + + if ( editWidget == infoPosPitch ) + { + for(int i = 0; i < text.Length(); i++ ) + { + string token; + string character = text.Get(i); + int result = character.ParseStringEx(token); + + if ( result == 4 || text.Get(i) == "." ) + { + newText = newText + token; + check = true; // lol wtf why this crashing. come back to this + } + } + + if ( check ) // idk why this bool is causing unknown module crash + { + orientation[1] = newText.ToFloat(); + GetSelectedObject().SetOrientation(orientation); + } + else + { + editWidget.SetText( newText ); + } + + return false; + } + + */ + + return false; + } + + override bool OnMouseEnter(Widget w, int x, int y) + { + return false; + } + override bool OnMouseLeave(Widget w, Widget enterW, int x, int y) + { + SetFocus( layoutRoot ); + return false; + } + + override void OnShow() + { + UpdateObjectList(); + GetGame().GetCallQueue( CALL_CATEGORY_GUI ).CallLater( Update, 100, true ); + } + + override void OnHide() + { + //GetGame().GetUpdateQueue( CALL_CATEGORY_GUI ).Remove( Update ); + } + + override void Update() + { + Object selectedObject = GetSelectedObject(); + string text = "No object Selected"; + TStringArray paths = new TStringArray; + + bool selected = false; + + Widget focusedWidget = GetFocus(); + + if ( selectedObject ) + { + infoPosX.ClearFlags( WidgetFlags.IGNOREPOINTER ); + infoPosY.ClearFlags( WidgetFlags.IGNOREPOINTER ); + infoPosZ.ClearFlags( WidgetFlags.IGNOREPOINTER ); + infoPosYaw.ClearFlags( WidgetFlags.IGNOREPOINTER ); + infoPosPitch.ClearFlags( WidgetFlags.IGNOREPOINTER ); + infoPosRoll.ClearFlags( WidgetFlags.IGNOREPOINTER ); + + text = selectedObject.GetType(); + } else + { + infoPosX.SetFlags( WidgetFlags.IGNOREPOINTER ); + infoPosY.SetFlags( WidgetFlags.IGNOREPOINTER ); + infoPosZ.SetFlags( WidgetFlags.IGNOREPOINTER ); + infoPosYaw.SetFlags( WidgetFlags.IGNOREPOINTER ); + infoPosPitch.SetFlags( WidgetFlags.IGNOREPOINTER ); + infoPosRoll.SetFlags( WidgetFlags.IGNOREPOINTER ); + } + + TextWidget selectedObjectWidget = TextWidget.Cast(layoutRoot.FindAnyWidget( "object_editor_info_select_input" )); + selectedObjectWidget.SetText( text ); + // SetFlags(int flags, bool immedUpdate = true); + } + + Object GetSelectedObject() + { + return ObjectEditor.Cast(COM_GetModuleManager().GetModule( ObjectEditor )).m_SelectedObject; + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectMenu.c new file mode 100644 index 00000000..4cb8c38f --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/ObjectMenu.c @@ -0,0 +1,331 @@ +class ObjectMenu extends PopupMenu +{ + protected TextListboxWidget m_classList; + protected EditBoxWidget m_SearchBox; + protected ButtonWidget m_btnSpawnGround; + protected ButtonWidget m_btnSpawnCursor; + protected ButtonWidget m_btnSpawnInventory; + protected ButtonWidget m_btnCancel; + protected EditBoxWidget m_QuantityItem; + protected EditBoxWidget m_StateItem; + + private ItemPreviewWidget m_item_widget; + protected EntityAI previewItem; + private int m_characterRotationX; + private int m_characterRotationY; // Borrowed from inspectmenu + private int m_characterScaleDelta; + private vector m_characterOrientation; + + protected EditBoxWidget m_editBox; + + protected autoptr array m_excludeBroken = { + "GP25Base", + "GP25", + "GP25_Standalone", + "M203Base", + "M203", + "M203_Standalone", + "ItemOptics", + }; + + void ~ObjectMenu() + { + if ( previewItem ) + { + GetGame().ObjectDelete( previewItem ); + } + } + + override void Init() + { + m_classList = TextListboxWidget.Cast( layoutRoot.FindAnyWidget( "classlist" ) ); + m_SearchBox = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "search_input" ) ); + m_btnSpawnGround = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_spawn_ground" ) ); + m_btnSpawnCursor = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_spawn_cursorpos" ) ); + m_btnSpawnInventory = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_spawn_inventory" ) ); + m_btnCancel = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_cancel" ) ); + + m_QuantityItem = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "quantity_items" ) ); + m_StateItem = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "state_items" ) ); + + m_editBox = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("className_spawner_box")); + } + + override void OnShow() + { + UpdateList( "All" ); + } + + override void OnHide() + { + if ( previewItem ) + { + GetGame().ObjectDelete( previewItem ); + } + } + + override bool OnChange( Widget w, int x, int y, bool finished ) + { + if ( w == m_SearchBox ) + { + UpdateList( "All" ); + return true; + } + + return false; + } + + override bool OnMouseEnter( Widget w , int x, int y ) + { + if ( w == m_SearchBox ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( true, 0 ); + } + return false; + } + + override bool OnMouseLeave( Widget w, Widget enterW, int x, int y ) + { + if ( w == m_SearchBox ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( false, 0 ); + } + return false; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + if (w.GetName().Contains("btn_filter")) + { + string buttonName = w.GetName(); + buttonName.Replace("btn_filter_", ""); + UpdateList(buttonName); + return true; + } + + if ((w != m_btnSpawnCursor) && (w != m_btnSpawnGround) && (w != m_btnSpawnInventory)) + return true; + + string strSelection = GetCurrentSelection(); + if (!strSelection) + strSelection = GetEditBoxInput(); + + if (!strSelection) + return true; + + if( m_excludeBroken.Find(strSelection) != -1 ) + return true; + + strSelection.ToLower(); + + ObjectEditor obEditor = ObjectEditor.Cast(COM_GetModuleManager().GetModule(ObjectEditor)); + + EntityAI spawned; + if (w == m_btnSpawnInventory) + { + spawned = g_Game.GetPlayer().GetInventory().CreateInInventory( strSelection ); + } + else + { + vector position = COM_GetPB().GetPosition(); + if (w == m_btnSpawnCursor) + position = COM_GetCursorPos(); + + bool isAi = GetGame().IsKindOf(strSelection, "DZ_LightAI"); + spawned = EntityAI.Cast(g_Game.CreateObject(strSelection, position, true, isAi)); + spawned.PlaceOnSurface(); + COM_ForceTargetCollisionUpdate(spawned); + + obEditor.addObject(spawned); + ObjectInfoMenu.listBox.AddItem(spawned.GetType(), spawned, 0); + } + + ItemBase spawnedItem = ItemBase.Cast(spawned); + if (spawnedItem) + { + float quantity01 = m_QuantityItem.GetText().ToFloat() / spawnedItem.GetQuantityMax(); + float health = m_StateItem.GetText().ToFloat(); + SetupSpawnedItem(spawnedItem, health, quantity01); + } + + return true; + } + + override bool OnItemSelected( Widget w, int x, int y, int row, int column, int oldRow, int oldColumn ) + { + if ( w == m_classList ) + { + string strSelection = GetCurrentSelection(); + m_characterOrientation = vector.Zero; + + if ( !m_item_widget ) + { + Widget preview_panel = layoutRoot.FindAnyWidget("preview_pnl"); + + if ( preview_panel ) + { + float width; + float height; + preview_panel.GetSize(width, height); + + m_item_widget = ItemPreviewWidget.Cast( GetGame().GetWorkspace().CreateWidget(ItemPreviewWidgetTypeID, 0, 0, 1, 1, WidgetFlags.VISIBLE, ARGB(255, 255, 255, 255), 10, preview_panel) ); + } + } + + if ( previewItem ) GetGame().ObjectDelete( previewItem ); + + if( m_excludeBroken.Find( strSelection ) != -1 ) return false; + + Print(strSelection); + + previewItem = EntityAI.Cast(GetGame().CreateObject( strSelection, vector.Zero, false )); + + if( !previewItem ) return false; + + m_item_widget.SetItem( previewItem ); + m_item_widget.SetModelPosition( Vector(0,0,0.5) ); + m_item_widget.SetModelOrientation( m_characterOrientation ); + + float itemx, itemy; + m_item_widget.GetPos(itemx, itemy); + + m_item_widget.SetSize( 1.5, 1.5 ); + + // align to center + m_item_widget.SetPos( -0.225, -0.225 ); + + // Calculate and Set QuantityMax on text box in quantity_items + if (previewItem.IsInherited(Magazine)) + { + m_QuantityItem.SetText(Magazine.Cast(previewItem).GetAmmoCount().ToString()); + } + else if (previewItem.IsInherited(ItemBase)) + { + m_QuantityItem.SetText(ItemBase.Cast(previewItem).GetQuantityMax().ToString()); + } + } + + return true; + } + + override bool OnMouseButtonDown( Widget w, int x, int y, int button ) + { + if (w == m_item_widget) + { + GetGame().GetDragQueue().Call(this, "UpdateRotation"); + GetMousePos(m_characterRotationX, m_characterRotationY); + return true; + } + return false; + } + + override bool OnMouseWheel( Widget w, int x, int y, int wheel ) + { + if ( w == m_item_widget ) + { + GetGame().GetDragQueue().Call(this, "UpdateScale"); + m_characterScaleDelta = wheel ; + } + return false; + } + + void UpdateScale(int mouse_x, int mouse_y, int wheel, bool is_dragging) // Borrowed from inspect menu + { + float w, h, x, y; + m_item_widget.GetPos(x, y); + m_item_widget.GetSize(w,h); + w = w + ( m_characterScaleDelta / 4); + h = h + ( m_characterScaleDelta / 4 ); + if ( w > 0.5 && w < 4 ) + { + m_item_widget.SetSize( w, h ); + + // align to center + int screen_w, screen_h; + GetScreenSize(screen_w, screen_h); + float new_x = x - ( m_characterScaleDelta / 8 ); + float new_y = y - ( m_characterScaleDelta / 8 ); + m_item_widget.SetPos( new_x, new_y ); + } + } + + void UpdateRotation(int mouse_x, int mouse_y, bool is_dragging) // Borrowed from inspect menu + { + vector o = m_characterOrientation; + o[0] = o[0] + (m_characterRotationY - mouse_y); + o[1] = o[1] - (m_characterRotationX - mouse_x); + + m_item_widget.SetModelOrientation( o ); + + if (!is_dragging) + { + m_characterOrientation = o; + } + } + + void UpdateList( string classFilter ) // All default + { + m_classList.ClearItems(); + + TStringArray configs = new TStringArray; + configs.Insert( CFG_VEHICLESPATH ); + configs.Insert( CFG_WEAPONSPATH ); + configs.Insert( CFG_MAGAZINESPATH ); + + string strSearch = m_SearchBox.GetText(); + + strSearch.ToLower(); + + for ( int nConfig = 0; nConfig < configs.Count(); ++nConfig ) + { + string strConfigPath = configs.Get( nConfig ); + + int nClasses = g_Game.ConfigGetChildrenCount( strConfigPath ); + + for ( int nClass = 0; nClass < nClasses; ++nClass ) + { + string strName; + + g_Game.ConfigGetChildName( strConfigPath, nClass, strName ); + + int scope = g_Game.ConfigGetInt( strConfigPath + " " + strName + " scope" ); + + if ( scope == 0 ) + { + continue; + } + + auto strNameLower = strName; + + strNameLower.ToLower(); + + if ( GetGame().IsKindOf( strNameLower, classFilter ) || classFilter == "All" ) // Fix for weapon_base not being child of "All" + { + if ( (strSearch != "" && (!strNameLower.Contains( strSearch ))) ) + { + continue; + } + + m_classList.AddItem( strName, NULL, 0 ); + } + } + } + } + + string GetCurrentSelection() + { + if ( m_classList.GetSelectedRow() != -1 ) + { + string result; + m_classList.GetItemText( m_classList.GetSelectedRow(), 0, result ); + return result; + } + + return ""; + } + + string GetEditBoxInput() + { + return m_editBox.GetText(); + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/OverrideVerticalSpacer.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/OverrideVerticalSpacer.c new file mode 100644 index 00000000..5ad79986 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/OverrideVerticalSpacer.c @@ -0,0 +1,21 @@ +// ----------------------------------------------------------- +class OverrideVerticalSpacer : SpacerBase +{ + reference int border; + reference int gap; + reference int maxheight; + + override protected void UpdateChild(Widget child, float w, float h, int index) + { + float itemWidth = w - (2 * border); + float itemHeight = (h - (border * 2) - ((m_count - 1) * gap)) / m_count; + + if ( itemHeight > maxheight ) + { + itemHeight = maxheight; + } + + child.SetPos(border, border + ((itemHeight + gap) * index)); + child.SetSize(itemWidth, itemHeight); + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/PopupMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/PopupMenu.c new file mode 100644 index 00000000..9344f6b6 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/PopupMenu.c @@ -0,0 +1,45 @@ +class PopupMenu extends ScriptedWidgetEventHandler +{ + protected Widget layoutRoot; + + void PopupMenu() + { + + } + + void ~PopupMenu() + { + } + + void OnWidgetScriptInit( Widget w ) + { + layoutRoot = w; + layoutRoot.SetHandler( this ); + + Init(); + } + + void Init() + { + + } + + void OnShow() + { + } + + void OnHide() + { + } + + void Update() + { + + } + + Widget GetLayoutRoot() + { + return layoutRoot; + } + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/WeatherMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/WeatherMenu.c new file mode 100644 index 00000000..bf979591 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/WeatherMenu.c @@ -0,0 +1,328 @@ +class WeatherMenu extends PopupMenu +{ + private static const int m_DaysInMonth [ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + + protected ButtonWidget m_BtnSave; + protected ButtonWidget m_BtnCancel; + protected TextWidget m_TxtWeatherTime; + protected TextWidget m_TxtAirTemperature; + protected SliderWidget m_SldStartTime; + protected TextWidget m_TxtStartTimeValue; + protected SliderWidget m_SldStartDay; + protected TextWidget m_TxtStartDayValue; + protected SliderWidget m_SldOvercast; + protected TextWidget m_TxtOvercastValue; + protected SliderWidget m_SldRain; + protected TextWidget m_TxtRainValue; + protected SliderWidget m_SldFog; + protected TextWidget m_TxtFogValue; + protected SliderWidget m_SldWindForce; + protected TextWidget m_TxtWindForceValue; + + private int m_OrigYear; + private int m_OrigMonth; + private int m_OrigDay; + private int m_OrigHour; + private int m_OrigMinute; + private float m_OrigOvercast; + private float m_OrigRain; + private float m_OrigFog; + private float m_OrigWindForce; + + private int m_CurrYear; + private int m_CurrMonth; + private int m_CurrDay; + private int m_CurrHour; + private int m_CurrMinute; + private float m_CurrOvercast; + private float m_CurrRain; + private float m_CurrFog; + private float m_CurrWindForce; + + void WeatherMenu() + { + } + + void ~WeatherMenu() + { + } + + override void Init() + { + + m_BtnSave = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_save" ) ); + m_BtnCancel = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_cancel" ) ); + + m_TxtWeatherTime = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_w_time_value" ) ); + m_TxtAirTemperature = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_w_air_temp_value" ) ); + + m_SldStartTime = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_start_time" ) ); + m_TxtStartTimeValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_start_time_value" ) ); + + m_SldStartDay = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_start_day" ) ); + m_TxtStartDayValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_start_day_value" ) ); + + m_SldOvercast = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_overcast" ) ); + m_TxtOvercastValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_overcast_value" ) ); + + m_SldRain = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_rain" ) ); + m_TxtRainValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_rain_value" ) ); + + m_SldFog = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_fog" ) ); + m_TxtFogValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_fog_value" ) ); + + m_SldWindForce = SliderWidget.Cast( layoutRoot.FindAnyWidget( "sld_ppp_st_wind_force" ) ); + m_TxtWindForceValue = TextWidget.Cast( layoutRoot.FindAnyWidget( "txt_ppp_st_wind_force_value" ) ); + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + + if ( w == m_BtnSave ) + { + m_OrigYear = m_CurrYear; + m_OrigMonth = m_CurrMonth; + m_OrigDay = m_CurrDay; + m_OrigHour = m_CurrHour; + m_OrigMinute = m_CurrMinute; + m_OrigOvercast = m_CurrOvercast; + m_OrigRain = m_CurrRain; + m_OrigFog = m_CurrFog; + m_OrigWindForce = m_CurrWindForce; + + PluginSceneManager editor = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) ); + if(editor) + { + editor.SetWeather(m_CurrOvercast, m_CurrRain, m_CurrFog, m_CurrWindForce); + editor.SetDate(m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute); + } + + GetGame().GetWeather().SetWindFunctionParams( m_OrigWindForce, m_CurrWindForce, 1 ); + + return true; + } + + return false; + } + + override bool OnChange( Widget w, int x, int y, bool finished ) + { + if ( w == m_SldStartTime ) + { + float slider_value_start_time = m_SldStartTime.GetCurrent() * 0.01; + float start_time_f = slider_value_start_time * 1439; + int start_time = start_time_f; + m_CurrHour = start_time / 60; + m_CurrMinute = start_time % 60; + + UpdateSliderStartTime( m_CurrHour, m_CurrMinute ); + + GetGame().GetWorld().SetDate( m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute ); + + return true; + } + else if ( w == m_SldStartDay ) + { + float slider_value_start_day = m_SldStartDay.GetCurrent(); + float start_day_f = slider_value_start_day * 3.64 + 1; + int start_day = start_day_f; + + for ( int i = 0; i < 12; i++ ) + { + int days = m_DaysInMonth[i]; + if ( start_day <= days ) + { + m_CurrMonth = i+1; + m_CurrDay = start_day; + break; + } + else + { + start_day -= days; + } + } + + UpdateSliderStartDay( m_CurrMonth, m_CurrDay ); + + GetGame().GetWorld().SetDate( m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute ); + + return true; + } + else if ( w == m_SldOvercast ) + { + UpdateSliderOvercast(); + + m_CurrOvercast = m_SldOvercast.GetCurrent() * 0.01; + GetGame().GetWeather().GetOvercast().Set( m_CurrOvercast, 0, 0 ); + GetGame().GetWorld().SetDate( m_CurrYear, m_CurrMonth, m_CurrDay, m_CurrHour, m_CurrMinute+5 ); + + return true; + } + else if ( w == m_SldRain ) + { + UpdateSliderRain(); + + m_CurrRain = m_SldRain.GetCurrent() * 0.01; + GetGame().GetWeather().GetRain().Set( m_CurrRain, 0, 0 ); + + float density = m_CurrRain * m_CurrRain; + float threshold = 0.8; + float timeOut = 4000; + + GetGame().GetWeather().SetStorm(density, threshold, timeOut); + + return true; + } + else if ( w == m_SldFog ) + { + UpdateSliderFog(); + + m_CurrFog = m_SldFog.GetCurrent() * 0.01; + GetGame().GetWeather().GetFog().Set( m_CurrFog, 0, 0 ); + + return true; + } + else if ( w == m_SldWindForce ) + { + UpdateSliderWindForce(); + + m_CurrWindForce = m_SldWindForce.GetCurrent() * 0.01; + + GetGame().GetWeather().SetWindFunctionParams( m_OrigWindForce, m_CurrWindForce, 1 ); + + return true; + } + + return false; + } + + override void OnShow() + { + GetGame().GetWorld().GetDate( m_OrigYear, m_OrigMonth, m_OrigDay, m_OrigHour, m_OrigMinute ); + + Weather weather = GetGame().GetWeather(); + + m_OrigOvercast = weather.GetOvercast().GetActual(); + m_OrigRain = weather.GetRain().GetActual(); + m_OrigFog = weather.GetFog().GetActual(); + m_OrigWindForce = weather.GetWindSpeed(); + + m_CurrYear = m_OrigYear; + m_CurrMonth = m_OrigMonth; + m_CurrDay = m_OrigDay; + m_CurrHour = m_OrigHour; + m_CurrMinute = m_OrigMinute; + m_CurrOvercast = m_OrigOvercast; + m_CurrRain = m_OrigRain; + m_CurrFog = m_OrigFog; + m_CurrWindForce = m_OrigWindForce; + + GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Insert(Update); + + ResetSliders(); + } + + override void OnHide() + { + /* + Weather weather = GetGame().GetWeather(); + + GetGame().GetWorld().SetDate( m_OrigYear, m_OrigMonth, m_OrigDay, m_OrigHour, m_OrigMinute ); + weather.GetOvercast().Set( m_OrigOvercast, 0, 1000 ); + weather.GetRain().Set( m_OrigRain, 0, 1000 ); + weather.GetFog().Set( m_OrigFog, 0, 1000 ); + weather.SetWindSpeed( m_OrigWindForce ); + + */ + } + + override void Update() + { + m_TxtWeatherTime.SetText( GetGame().GetWeather().GetTime().ToString() ); + // m_TxtAirTemperature.SetText( GetGame().GetWeather().GetAirTemperature().ToString() ); + } + + void ResetSliders() + { + int year, month, day, hour, minute; + + GetGame().GetWorld().GetDate( year, month, day, hour, minute ); + + m_SldStartTime.SetCurrent( ((hour * 60) + minute) / 14.39 ); + + UpdateSliderStartTime( hour, minute ); + + + float start_day = day; + + int month_tmp = month; + + while ( month_tmp > 1 ) + { + month_tmp--; + start_day += m_DaysInMonth[month]; + } + + m_SldStartDay.SetCurrent( start_day / 3.64 ); + + UpdateSliderStartDay( month, day ); + + Weather weather = GetGame().GetWeather(); + + m_SldOvercast.SetCurrent(weather.GetOvercast().GetActual() * 100); + UpdateSliderOvercast(); + + m_SldRain.SetCurrent(weather.GetRain().GetActual() * 100); + UpdateSliderRain(); + + m_SldFog.SetCurrent(weather.GetFog().GetActual() * 100); + UpdateSliderFog(); + + float slider_wind_value = ( weather.GetWindSpeed() / weather.GetWindMaximumSpeed() ) * 100; + + if( weather.GetWindSpeed() < 0.01 ) + { + slider_wind_value = 0.0; + } + + m_SldWindForce.SetCurrent( slider_wind_value ); + + UpdateSliderWindForce(); + } + + void UpdateSliderStartTime( int hour, int minute ) + { + string label_text = hour.ToStringLen(2) + ":" + minute.ToStringLen(2); + m_TxtStartTimeValue.SetText( label_text ); + } + + void UpdateSliderStartDay( int month, int day ) + { + string label_text = day.ToString() + "." + month.ToString() + ". " + m_CurrYear.ToString(); + m_TxtStartDayValue.SetText( label_text ); + } + + void UpdateSliderOvercast() + { + string label_text = m_SldOvercast.GetCurrent().ToString()+"%"; + m_TxtOvercastValue.SetText( label_text ); + } + + void UpdateSliderRain() + { + string label_text = m_SldRain.GetCurrent().ToString()+"%"; + m_TxtRainValue.SetText( label_text ); + } + + void UpdateSliderFog() + { + string label_text = m_SldFog.GetCurrent().ToString()+"%"; + m_TxtFogValue.SetText( label_text ); + } + + void UpdateSliderWindForce() + { + string label_text = m_SldWindForce.GetCurrent().ToString()+"%"; + m_TxtWindForceValue.SetText( label_text ); + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/CheckboxTemplate.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/CheckboxTemplate.layout new file mode 100644 index 00000000..51f44615 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/CheckboxTemplate.layout @@ -0,0 +1,8 @@ +CheckBoxWidgetClass checkboxTemplate +{ + visible 1 + color 1 1 1 1 + halign left_ref + valign top_ref + style Default +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/EditorMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/EditorMenu.layout new file mode 100644 index 00000000..7b8eb06f --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/EditorMenu.layout @@ -0,0 +1,337 @@ +FrameWidgetClass EditorMenu +{ + visible 0 + color 0 0 0 0 + position 0 0 + size 1 1 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style EditorPanel + { + PanelWidgetClass RightPanel + { + visible 1 + color 0 0 0 0.95 + position 0.005 0.02 + halign right_ref + size 60 550 + hexactsize 1 + vexactsize 1 + style DayZDefaultPanelTop + { + PanelWidgetClass TitleBar + { + visible 1 + position 0 0 + size 1 25 + color 0 0 0 0.7843 + vexactsize 1 + { + TextWidgetClass TitleBarText + { + visible 1 + position 0.1 0 + size 0.8 0.8 + valign center_ref + text "Tools" + font "gui/fonts/Metron-Bold58" + "text halign" left + "exact text" 1 + "exact text size" 20 + } + + } + } + + PanelWidgetClass objects_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 25 + size 50 50 + halign left_ref + valign top_ref + hexactpos 0 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass objects_button + { + color 1 0 0 1 + position 0 0 + size 50 50 + hexactsize 1 + vexactsize 1 + "no focus" 1 + { + TextWidgetClass objects_button_text + { + ignorepointer 1 + position 0 0 + size 1 1 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + text "OB" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "text halign" center + "text valign" center + "exact text size" 32 + } + } + } + } + } + + PanelWidgetClass position_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 75 + size 50 50 + halign left_ref + valign top_ref + hexactpos 0 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass position_button + { + color 1 0 0 1 + position 0 0 + size 50 50 + hexactsize 1 + vexactsize 1 + "no focus" 1 + { + TextWidgetClass position_button_text + { + ignorepointer 1 + position 0 0 + size 1 1 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + text "TP" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "text halign" center + "text valign" center + "exact text size" 32 + } + } + } + } + } + + PanelWidgetClass weather_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 125 + size 50 50 + halign left_ref + valign top_ref + hexactpos 0 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass weather_button + { + color 1 0 0 1 + position 0 0 + size 50 50 + hexactsize 1 + vexactsize 1 + "no focus" 1 + { + TextWidgetClass weather_button_text + { + ignorepointer 1 + position 0 0 + size 1 1 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + text "W" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "text halign" center + "text valign" center + "exact text size" 32 + } + } + } + } + } + + PanelWidgetClass game_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 175 + size 50 50 + halign left_ref + valign top_ref + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass game_button + { + color 1 0 0 1 + position 0 0 + size 50 50 + hexactsize 1 + vexactsize 1 + "no focus" 1 + { + TextWidgetClass game_button_text + { + ignorepointer 1 + position 0 0 + size 1 1 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + text "G" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "text halign" center + "text valign" center + "exact text size" 32 + } + } + } + } + } + PanelWidgetClass sceneManager_button_bkg + { + visible 0 + color 0 0 0 0.25 + position 0.1 105 + size 50 50 + halign left_ref + valign bottom_ref + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass sceneManager_button + { + color 1 0 0 1 + position 0 0 + size 1 1 + "no focus" 1 + { + ImageWidgetClass sceneManager_image + { + ignorepointer 1 + color 1 1 1 0.65 + position 0 0 + size 1 1 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + image0 "set:ccgui_enforce image:HudBuild" + mode additive + "src alpha" 1 + } + } + } + } + } + PanelWidgetClass objectEditor_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 55 + size 50 50 + halign left_ref + valign bottom_ref + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass objectEditor_button + { + color 1 0 0 1 + position 0 0 + size 1 1 + "no focus" 1 + { + ImageWidgetClass objectEditor_image + { + ignorepointer 1 + position 0 0 + size 0.75 0.75 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + image0 "set:rover_imageset image:robotic_instrument" + mode additive + "src alpha" 1 + } + } + } + } + } + PanelWidgetClass camera_button_bkg + { + visible 1 + color 0 0 0 0.25 + position 0.1 5 + size 50 50 + halign left_ref + valign bottom_ref + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + { + ButtonWidgetClass camera_button + { + color 1 0 0 1 + position 0 0 + size 1 1 + "no focus" 1 + { + ImageWidgetClass camera_button_image + { + ignorepointer 1 + position 0 0 + size 0.75 0.75 + halign center_ref + valign center_ref + hexactsize 0 + vexactsize 0 + image0 "set:rover_imageset image:camera" + mode additive + "src alpha" 1 + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/GameMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/GameMenu.layout new file mode 100644 index 00000000..4c9fed0d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/GameMenu.layout @@ -0,0 +1,114 @@ +PanelWidgetClass GameMenu +{ + visible 0 + color 0 0 0 0 + position 0.045 0.182 + size 400 350 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "GameMenu" + style EditorPanel + + { + PanelWidgetClass Background + { + visible 1 + color 0 0 0 0.45 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.7843 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Script Functions" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + TextListboxWidgetClass game_list_box + { + visible 1 + position 5 30 + size 225 280 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style Editor + lines 20 + font "gui/fonts/Metron14" + } + + PanelWidgetClass game_checkbox_panel + { + visible 1 + color 0 0 0 0.5 + position 5 30 + size 160 280 + halign right_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + scriptclass "OverrideVerticalSpacer" + { + ScriptParamsClass + { + gap 0 + border 5 + maxheight 20 + } + } + } + + ButtonWidgetClass game_script_button + { + position 80 10 + size 80 20 + halign left_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Execute" + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectEditorInfo.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectEditorInfo.layout new file mode 100644 index 00000000..e0aeaffb --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectEditorInfo.layout @@ -0,0 +1,289 @@ +PanelWidgetClass object_editor_info +{ + visible 0 + color 0 0 0 1 + position 0.045 0.475 + size 400 400 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "ObjectInfoMenu" + style EditorPanel + { + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.92 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Object Info" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + PanelWidgetClass object_editor_info_bkg + { + visible 1 + color 0 0 0 0.75 + position 0 25 + size 1 1 + hexactsize 0 + vexactsize 0 + vexactpos 1 + style rover_sim_colorable + { + TextWidgetClass object_editor_info_select_input + { + color 1 1 1 1 + position 0.05 0.05 + size 0.9 0.055 + text "No object Selected" + } + FrameWidgetClass objectInfo_scene + { + visible 1 + position 0.65 0 + size 0.3 0.95 + style EditorPanel + { + TextWidgetClass object_editor_info_objects + { + color 1 1 1 1 + position 0 0.05 + size 1 0.055 + text "Objects Placed" + } + + TextListboxWidgetClass object_editor_info_list + { + visible 1 + position 0 0.15 + size 1 0.6 + style Editor + lines 20 + font "gui/fonts/Metron14" + } + ButtonWidgetClass object_editor_info_load + { + position 0 0.75 + size 0.5 0.055 + text "Load" + } + ButtonWidgetClass object_editor_info_save + { + position 0.5 0.75 + size 0.5 0.055 + text "Save" + } + ButtonWidgetClass object_editor_info_export + { + position 0 0.8 + size 1 0.055 + text "Export" + } + ButtonWidgetClass object_editor_info_clear + { + position 0 0.85 + size 1 0.055 + text "Clear" + } + ButtonWidgetClass object_editor_info_dumplods + { + position 0 0.9 + size 1 0.055 + text "Dump LODS" + } + } + } + FrameWidgetClass objectInfo + { + visible 1 + position 0 0.1 + size 0.65 1 + style EditorPanel + { + PanelWidgetClass objectInfo_pos_panel + { + position 0.05 0.05 + color 0 0 0 1 + size 0.9 0.35 + halign left_ref + hexactsize 0 + vexactsize 0 + style EditorPanel + { + TextWidgetClass object_info_x + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0 + text "Pos X" + "exact text" 1 + "text halign" center + "text valign" center + } + TextWidgetClass object_info_y + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0.33 + text "Pos Y" + "exact text" 1 + "text halign" center + "text valign" center + } + TextWidgetClass object_info_z + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0.66 + text "Pos Z" + "exact text" 1 + "text halign" center + "text valign" center + } + + EditBoxWidgetClass object_info_pos_x + { + visible 1 + color 1 1 1 1 + position 0.5 0 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + EditBoxWidgetClass object_info_pos_y + { + visible 1 + color 1 1 1 1 + position 0.5 0.33 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + EditBoxWidgetClass object_info_pos_z + { + visible 1 + color 1 1 1 1 + position 0.5 0.66 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + } + } + PanelWidgetClass objectInfo_orientation_panel + { + visible 1 + color 0 0 0 1 + position 0.05 0.45 + size 0.9 0.35 + halign left_ref + hexactsize 0 + vexactsize 0 + style EditorPanel + { + TextWidgetClass object_info_yaw + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0 + text "Yaw" + "exact text" 1 + "text halign" center + "text valign" center + } + TextWidgetClass object_info_pitch + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0.33 + text "Pitch" + "exact text" 1 + "text halign" center + "text valign" center + } + TextWidgetClass object_info_roll + { + visible 1 + color 1 1 1 1 + size 0.5 0.33 + position 0 0.66 + text "Roll" + "exact text" 1 + "text halign" center + "text valign" center + } + EditBoxWidgetClass object_info_yaw_input + { + visible 1 + color 1 1 1 1 + position 0.5 0 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + EditBoxWidgetClass object_info_pitch_input + { + visible 1 + color 1 1 1 1 + position 0.5 0.33 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + EditBoxWidgetClass object_info_roll_input + { + visible 1 + color 1 1 1 1 + position 0.5 0.66 + size 0.5 0.33 + text "0.0" + style Default + "exact text" 1 + } + } + } + + + } + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectMenu.layout new file mode 100644 index 00000000..5d5fa859 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/ObjectMenu.layout @@ -0,0 +1,354 @@ +PanelWidgetClass ObjectMenu +{ + visible 0 + color 0 0 0 0 + position 0.0425 0.0425 + size 650 450 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "ObjectMenu" + style EditorPanel + { + + PanelWidgetClass Background + { + visible 1 + color 0 0 0 0.45 + position 0 0 + size 500 450 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + } + + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.7843 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Items and Objects" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + TextWidgetClass search_text + { + position 6 34 + size 50 18 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Search:" + } + + EditBoxWidgetClass search_input + { + position 58 32 + size 437 20 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style ServerBrowser + } + + PanelWidgetClass hr + { + visible 1 + color 0 0 0 0.7843 + position 5 58 + size 0.985 2 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + } + + ButtonWidgetClass btn_filter_All + { + position 5 65 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "All" + text_proportion 0.75 + } + + ButtonWidgetClass btn_filter_edible_base + { + position 5 100 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Food" + text_proportion 0.75 + } + + ButtonWidgetClass btn_filter_weapon_base + { + position 5 135 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Firearms" + text_proportion 0.75 + } + + ButtonWidgetClass btn_filter_clothing_base + { + position 5 170 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Clothing" + text_proportion 0.75 + } + + ButtonWidgetClass btn_filter_transport + { + position 5 205 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Vehicles" + text_proportion 0.75 + } + ButtonWidgetClass btn_filter_house + { + position 5 240 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Buildings" + text_proportion 0.75 + } + + ButtonWidgetClass btn_filter_dz_lightai + { + position 5 275 + size 80 30 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Ai" + text_proportion 0.75 + } + + TextListboxWidgetClass classlist + { + visible 1 + position 95 65 + size 275 300 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style Editor + lines 20 + font "gui/fonts/Metron14" + } + + PanelWidgetClass preview_pnl + { + visible 1 + color 0 0 0 0.8 + position 375 65 + size 270 300 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style rover_sim_colorable + } + + PanelWidgetClass buttonframe + { + position 0 0.825 + size 1 1 + halign left_ref + valign top_ref + hexactpos 1 + vexactpos 0 + { + TextWidgetClass search_text + { + position 5 30 + size 100 18 + halign left_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Spawn type:" + } + + ButtonWidgetClass btn_spawn_cursorpos + { + position 460 30 + size 80 20 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Cursor" + } + + ButtonWidgetClass btn_spawn_ground + { + position 380 30 + size 80 20 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Ground" + } + + ButtonWidgetClass btn_spawn_inventory + { + position 300 30 + size 80 20 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Inventory" + } + + TextWidgetClass state_text + { + position 100 5 + size 180 18 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Health:" + } + + EditBoxWidgetClass state_items + { + position 175 5 + size 60 16 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "100" + style ServerBrowser + } + + TextWidgetClass quantity_text + { + position 100 30 + size 180 18 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Quantity:" + } + + EditBoxWidgetClass quantity_items + { + position 145 30 + size 70 16 + halign right_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "" + style ServerBrowser + } + + TextWidgetClass className_spawner + { + position 5 5 + size 150 20 + halign left_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Class Name:" + } + + EditBoxWidgetClass className_spawner_box + { + color 1 1 1 1 + position 110 5 + size 240 20 + halign left_ref + valign top_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "" + style ServerBrowser + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/SceneManager.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/SceneManager.layout new file mode 100644 index 00000000..6b96ca8a --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/SceneManager.layout @@ -0,0 +1,4 @@ +PanelWidgetClass scene_manager_panel +{ + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/WeatherMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/WeatherMenu.layout new file mode 100644 index 00000000..d96f0944 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/gui/layouts/WeatherMenu.layout @@ -0,0 +1,429 @@ + +PanelWidgetClass WeatherMenu +{ + visible 0 + color 0 0 0 0 + position 0.045 0.136 + size 570 250 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "WeatherMenu" + style EditorPanel + + { + PanelWidgetClass Background + { + visible 1 + color 0 0 0 0.45 + position 0 0 + size 570 250 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + } + + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.7843 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Weather Manager" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + TextWidgetClass txt_ppp_st_w_time + { + position 5 30 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Weather Time:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + TextWidgetClass txt_ppp_st_w_time_value + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "153" + "exact text" 1 + "text valign" center + } + } + } + + TextWidgetClass txt_ppp_st_w_air_temp + { + position 5 50 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Air Temperature:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + TextWidgetClass txt_ppp_st_w_air_temp_value + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "18" + "exact text" 1 + "text valign" center + } + } + } + + PanelWidgetClass slider_wrapper + { + position 5 72 + size 560 1 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 0 + + { + TextWidgetClass txt_ppp_st_start_time + { + position 0 0 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Start Time:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_start_time + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + + { + TextWidgetClass txt_ppp_st_start_time_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass txt_ppp_st_start_day + { + position 0 25 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Start Day:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_start_day + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass txt_ppp_st_start_day_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass txt_ppp_st_overcast + { + position 0 50 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Weather Overcast:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_overcast + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + + style Editor + { + TextWidgetClass txt_ppp_st_overcast_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass txt_ppp_st_rain + { + position 0 75 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Weather Rain:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_rain + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + + style Editor + { + + TextWidgetClass txt_ppp_st_rain_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass txt_ppp_st_fog + { + position 0 100 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Weather Fog:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_fog + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + + { + TextWidgetClass txt_ppp_st_fog_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + + TextWidgetClass txt_ppp_st_wind_force + { + position 0 125 + size 1 20 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + text "Weather Wind Force:" + font "gui/fonts/Metron" + "exact text" 1 + "text valign" center + + { + SliderWidgetClass sld_ppp_st_wind_force + { + position 0.3 0 + size 0.7 1 + hexactpos 0 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "fill in" 1 + "listen to input" 1 + style Editor + { + TextWidgetClass txt_ppp_st_wind_force_value + { + size 1 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "50.5%" + font "gui/fonts/Metron" + "exact text" 1 + "text halign" center + "text valign" center + } + } + } + } + } + } + } + + ButtonWidgetClass btn_save + { + position 5 5 + size 80 20 + halign right_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Save" + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/module.c new file mode 100644 index 00000000..e6cbe2db --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/module.c @@ -0,0 +1,35 @@ +#ifndef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" +#endif +/* + Define used for optional compilations +*/ +#define MODULE_COM_EDITOR + +/* + Include of all .c files that belong to this module +*/ +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\ObjectEditor.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\EditorMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\ObjectMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\AdminTool\\gui\\PositionMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\WeatherMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\GameMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\PopupMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\ObjectInfoMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\gui\\OverrideVerticalSpacer.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\Scene.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\SceneManager.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\SceneInfo.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\ObjectData.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\LootSpot.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComEditor\\scene\\SceneSaveST.c" +#endif + +#ifndef COM_MODULES_OLDLOADING +void RegisterModule() +{ + COM_GetModuleManager().RegisterModule( new ObjectEditor ); +} +#endif \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/LootSpot.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/LootSpot.c new file mode 100644 index 00000000..558c2b64 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/LootSpot.c @@ -0,0 +1,31 @@ +class LootSpot +{ + LootType type; + vector position; + + void LootSpot( vector pos, LootType lootType ) + { + position = pos; + type = lootType; + } + + vector GetPosition() + { + return position; + } + + LootType GetType() + { + return type; + } +} + +enum LootType +{ + INDUSTRIAL, // tools + VEHICLE, // vehicle parts + MEDICAL, // medical items + CIVILIAN, // civ items - axe, can opener, knife, etc + FOOD, + MILITARY +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/ObjectData.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/ObjectData.c new file mode 100644 index 00000000..5d892b06 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/ObjectData.c @@ -0,0 +1,28 @@ +class ObjectData +{ + string classname; + vector position; + vector orientation; + + void ObjectData( string name, vector pos, vector ori ) + { + classname = name; + position = pos; + orientation = ori; + } + + string GetClassName() + { + return classname; + } + + vector GetPosition() + { + return position; + } + + vector GetOrientation() + { + return orientation; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/Scene.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/Scene.c new file mode 100644 index 00000000..2acc6d54 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/Scene.c @@ -0,0 +1,19 @@ +/** +\brief Represents active loaded scenes in the game + +*/ +class Scene +{ + ref array s_Objects = new array; // All active spawned objects + ref SceneData sceneData; + + void Scene( SceneData data ) + { + sceneData = data; + } + + void ~Scene() + { + + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneInfo.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneInfo.c new file mode 100644 index 00000000..f220f732 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneInfo.c @@ -0,0 +1,72 @@ +/** +\brief Stores loaded scene data information from json file. ie object positions, loot positions, duration etc + +*/ +class SceneInfo +{ + + //ref map< ObjectData, array< LootSpot >> m_objects = new map< ObjectData, array< LootSpot >>; + string name; + ref array< ObjectData > m_objects = new array< ObjectData >; + ref array< LootSpot > m_lootSpots = new array< LootSpot >; + + bool persistent = false; + int duration = 0; // in seconds + + void SceneInfo( string sceneName ) + { + name = sceneName; + } + + void ~SceneInfo() + { + + } + + string GetName() + { + return name; + } + +/* + ObjectData GetObjectData( vector position ) + { + for(int i = 0; i ); + } +*/ +} + +// create scene (set origin point to player position) +// create object containers with loot spots +// add object container to scene \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneManager.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneManager.c new file mode 100644 index 00000000..e77d3c3c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneManager.c @@ -0,0 +1,47 @@ +string SCENE_DIR = "$profile:SceneManager"; +string SCENE_ACTIVE = SCENE_DIR + "\\ActiveScenes"; +string SCENE_DATA = SCENE_DIR + "\\Scenes"; + +class SceneManager +{ + ref map< SceneData, ref array< Scene >> sm_Scenes = new map< SceneData, ref array< Scene>>; + + void SceneManager() + { + MakeDirectory( SCENE_DATA ); + + Init(); + } + + void ~SceneManager() + { + + } + + void Init() + { + // load scenes + } + + void LoadScenes() + { + FileAttr fileAttr; + string fileName; + + FindFileHandle fileHandle = FindFile( SCENE_DIR + "\\" + "*.json", fileName, fileAttr, FindFileFlags.ALL ); + if ( fileName != "" ) + { + while (FindNextFile( fileHandle, fileName, fileAttr )) + { + sm_Scenes.Insert( LoadSceneData( fileName ), new array< Scene > ); + } + } + } + + SceneData LoadSceneData( string fileName ) + { + SceneData data; + JsonFileLoader.JsonLoadFile( SCENE_DIR + "\\" + fileName + ".json", data ); + return data; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneSaveST.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneSaveST.c new file mode 100644 index 00000000..ce5461b1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/SceneSaveST.c @@ -0,0 +1,6 @@ +class SceneSaveST +{ + // temporary class + string name; + ref array> m_SceneObjects = new array< ref Param3>; +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.c new file mode 100644 index 00000000..6a4bc20c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.c @@ -0,0 +1,4 @@ +class SceneMenu extends PopupMenu +{ + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.layout new file mode 100644 index 00000000..60fc5bd1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComEditor/scene/gui/SceneMenu.layout @@ -0,0 +1,72 @@ +PanelWidgetClass scene_manager_info +{ + visible 0 + color 0 0 0 1 + position 0.045 0.425 + size 300 400 + halign right_ref + valign top_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + scriptclass "SceneMenu" + style EditorPanel + { + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.92 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "Scene Manager" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + PanelWidgetClass object_editor_info_bkg + { + visible 1 + color 0 0 0 0.75 + position 0 25 + size 1 1 + hexactsize 0 + vexactsize 0 + vexactpos 1 + style rover_sim_colorable + { + FrameWidgetClass objectInfo + { + visible 1 + position 0 0.1 + style EditorPanel + { + + } + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/COMKeyBinds.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/COMKeyBinds.c new file mode 100644 index 00000000..b4cefedb --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/COMKeyBinds.c @@ -0,0 +1,280 @@ +/* + Manages all keybinds for COM +*/ +class COMKeyBinds extends Module +{ + bool m_IsHudVisible = true; + protected int m_nAutoWalkMode = 0; + + void COMKeyBinds() + { + } + + void ~COMKeyBinds() + { + } + + override void Init() + { + super.Init(); + } + + override void onUpdate( float timeslice ) + { + UpdateAutoWalk(); + + UpdateGodMode(); + } + + override void RegisterKeyMouseBindings() + { + KeyMouseBinding toggleCursor = new KeyMouseBinding( GetModuleType() , "ToggleCursor" , "Toggles the cursor." , true ); + KeyMouseBinding toggleCOMEditor = new KeyMouseBinding( GetModuleType() , "ShowCOMEditor" , "Opens the COM Editor." ); + KeyMouseBinding teleport = new KeyMouseBinding( GetModuleType() , "TeleportCursor", "Teleport to cursor position." ); + KeyMouseBinding reload = new KeyMouseBinding( GetModuleType() , "Reload" , "Instantly reloads mag." ); + KeyMouseBinding spawnZ = new KeyMouseBinding( GetModuleType() , "SpawnZ" , "Spawns infected." ); + KeyMouseBinding hideHud = new KeyMouseBinding( GetModuleType() , "HideHud" , "Hides ui completely." ); + KeyMouseBinding printPlayer = new KeyMouseBinding( GetModuleType() , "PrintPlayer" , "Print current player position." ); + KeyMouseBinding autoRun = new KeyMouseBinding( GetModuleType() , "AutoRun" , "Toggle autorun." ); +// KeyMouseBinding keyFrame = new KeyMouseBinding( GetModuleType() , "OpenKeyframe" , "Toggle dayz dev cinematic tool." ); + KeyMouseBinding closeMenu = new KeyMouseBinding( GetModuleType() , "CloseOpenMenu" , "Close the menu on esc.", true ); + + toggleCursor .AddBinding( "kU" ); + toggleCOMEditor.AddBinding( "kY" ); + teleport .AddBinding( "kEnd" ); + reload .AddBinding( "kR" ); + spawnZ .AddBinding( "kO" ); + hideHud .AddBinding( "kHome" ); + printPlayer .AddBinding( "kP" ); + autoRun .AddBinding( "kX" ); +// keyFrame .AddBinding( "kPrior" ); + closeMenu .AddBinding( "kEscape" ); + + RegisterKeyMouseBinding( toggleCursor ); + RegisterKeyMouseBinding( toggleCOMEditor ); + RegisterKeyMouseBinding( teleport ); + RegisterKeyMouseBinding( reload ); + RegisterKeyMouseBinding( spawnZ ); + RegisterKeyMouseBinding( hideHud ); + RegisterKeyMouseBinding( printPlayer ); + RegisterKeyMouseBinding( autoRun ); +// RegisterKeyMouseBinding( keyFrame ); + RegisterKeyMouseBinding( closeMenu ); + } + +// void OpenKeyframe() +// { +// GetGame().GetUIManager().ShowScriptedMenu( COM_GetMission().CreateScriptedMenu(MENU_CAMERA_TOOLS) , NULL ); +// } + + void COM_ToggleCursor() + { + if ( GetGame().GetInput().HasGameFocus( INPUT_DEVICE_MOUSE ) ) + { + GetGame().GetInput().ChangeGameFocus( 1 ); + GetGame().GetUIManager().ShowUICursor( true ); + FreeDebugCamera.GetInstance().SetFreezed(true); + } + else + { + GetGame().GetUIManager().ShowUICursor( false ); + GetGame().GetInput().ResetGameFocus(); + FreeDebugCamera.GetInstance().SetFreezed(false); + } + COM_Message(GetDayZGame().GetMissionFolderPath()); + } + + void CloseOpenMenu() + { + if( GetGame().GetUIManager().GetMenu() && ( GetGame().GetUIManager().GetMenu().GetID() == 133742 ) ) + { + GetGame().GetUIManager().Back(); + } + } + + void ShowCOMEditor() + { + GetGame().GetUIManager().EnterScriptedMenu(EditorMenu.MENU_ID, NULL); + } + + void TeleportCursor() + { + Print( "COMKeyBinds::TeleportCursor()" ); + +// if ( CameraTool.Cast( m_Mission.GetModule( CameraTool ) ).IsUsingCamera() ) //Todo renable after module manager is done +// { +// COM_GetPB().MessageStatus( "You can not teleport while you are inside the freecam!" ); +// return; +// } + + vector hitPos = COM_GetCursorPos(); + + float distance = vector.Distance( COM_GetPB().GetPosition(), hitPos ); + + if ( distance < 5000 ) + { + EntityAI oVehicle = COM_GetPB().GetDrivingVehicle(); + + if( oVehicle ) + { + COM_GetPB().MessageStatus( "Get out of the vehicle first!" ); + } + else + { + COM_GetPB().SetPosition( hitPos ); + COM_GetPB().MessageStatus( "Teleported!" ); + } + } + else + { + COM_GetPB().MessageStatus( "Distance for teleportation is too far!" ); + } + } + + void Reload() + { + auto wpn = COM_GetPB().GetHumanInventory().GetEntityInHands(); + + if( wpn ) + { + auto magAtt = wpn.GetAttachmentByConfigTypeName( "DefaultMagazine" ); + + if( magAtt ) + { + auto mag = Magazine.Cast( magAtt ); + + if( mag && mag.IsMagazine() ) + { + mag.LocalSetAmmoMax(); + } + } + + auto suppAtt = wpn.GetAttachmentByConfigTypeName( "ItemSuppressor" ); + + if( suppAtt ) + { + auto supp = suppAtt; + + if( supp ) + { + supp.SetHealth( supp.GetMaxHealth( "", "" ) ); + } + } + } + } + + void SpawnZ() + { + if( COM_CTRL() ) + { + GetGame().CreateObject( "Animal_CanisLupus_Grey", COM_GetCursorPos(), false, true ); + } + else if( COM_SHIFT() ) + { + GetGame().CreateObject( COM_GetRandomChildFromBaseClass( "cfgVehicles", "AnimalBase" ), COM_GetCursorPos(), false, true ); + } + else + { + GetGame().CreateObject( COM_GetRandomChildFromBaseClass( "cfgVehicles", "ZombieBase", 2 ), COM_GetCursorPos(), false, true ); + } + } + + void HideHud() + { + Widget hudWidget = IngameHud.Cast(COM_GetClientMission().GetHud()).GetHudPanelWidget(); + hudWidget.Show(!hudWidget.IsVisible()); + } + + void PrintPlayer() + { + Print( "Position:" + COM_GetPB().GetPosition().ToString() ); + Print( "Orientation" + COM_GetPB().GetOrientation().ToString() ); + COM_Message( "POS X:" + COM_GetPB().GetPosition()[0] + " Y:" + COM_GetPB().GetPosition()[2] + " Z:" + COM_GetPB().GetPosition()[1] ); + COM_Message( "Player position and orientation vector were written to the game logs too." ); + } + + void AutoRun() + { + if( m_nAutoWalkMode && !COM_SHIFT() && !COM_CTRL() ) + { + m_nAutoWalkMode = 0; + COM_GetPB().GetInputController().OverrideMovementSpeed( false, 0 ); + COM_GetPB().GetInputController().OverrideMovementAngle( false, 0 ); + } + else + { + if( COM_SHIFT() ) + { + m_nAutoWalkMode = 3; + } + else if( COM_CTRL() ) + { + m_nAutoWalkMode = 1; //CTRL == slow mode + } + else + { + m_nAutoWalkMode = 2; + } + } + } + + void UpdateAutoWalk() + { + if( m_nAutoWalkMode > 0 ) + { + if( m_nAutoWalkMode == 1 ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( true, 1 ); + } + else if( ( COM_GetPB().GetInputController().LimitsIsSprintDisabled() ) || ( m_nAutoWalkMode == 2 ) ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( true, 2 ); + } + else if( m_nAutoWalkMode == 3 ) + { + COM_GetPB().GetInputController().OverrideMovementSpeed( true, 3 ); + } + + COM_GetPB().GetInputController().OverrideMovementAngle( true, 1 ); + } + } + + void UpdateGodMode() + { + // just putting this here for now + if ( m_COM_GodMode ) // located in staticfunctions + { + COM_GetPB().SetHealth( COM_GetPB().GetMaxHealth( "", "" ) ); + COM_GetPB().SetHealth( "","Blood", COM_GetPB().GetMaxHealth( "", "Blood" ) ); + COM_GetPB().SetHealth( "","Shock", COM_GetPB().GetMaxHealth( "", "Shock" ) ); + + //GetPlayer().GetStaminaHandler().SyncStamina(1000, 1000); + COM_GetPB().GetStatStamina().Set(COM_GetPB().GetStaminaHandler().GetStaminaCap()); + COM_GetPB().GetStatEnergy().Set(1000); + COM_GetPB().GetStatWater().Set(1000); +// COM_GetPB().GetStatStomachVolume().Set(300); +// COM_GetPB().GetStatStomachWater().Set(300); +// COM_GetPB().GetStatStomachEnergy().Set(300); + COM_GetPB().GetStatHeatComfort().Set(0); + + EntityAI oWeapon = COM_GetPB().GetHumanInventory().GetEntityInHands(); + + if( oWeapon ) + { + Magazine oMag = Magazine.Cast(oWeapon.GetAttachmentByConfigTypeName( "DefaultMagazine" )); + + if( oMag && oMag.IsMagazine() ) + { + oMag.LocalSetAmmoMax(); + } + + Object oSupressor = ( Object ) oWeapon.GetAttachmentByConfigTypeName( "SuppressorBase" ); + + if( oSupressor ) + { + oSupressor.SetHealth( oSupressor.GetMaxHealth( "", "" ) ); + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/module.c new file mode 100644 index 00000000..4d2449ae --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComKeybinds/module.c @@ -0,0 +1,21 @@ +#ifndef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" +#endif +/* + Define used for optional compilations +*/ +#define MODULE_COM_KEYBINDS + +/* + Include of all .c files that belong to this module +*/ +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComKeybinds\\COMKeyBinds.c" +#endif + +#ifndef COM_MODULES_OLDLOADING +void RegisterModule() +{ + COM_GetModuleManager().RegisterModule( new COMKeyBinds ); +} +#endif \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/WelcomeMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/WelcomeMenu.c new file mode 100644 index 00000000..66c25d9b --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/WelcomeMenu.c @@ -0,0 +1,70 @@ +class WelcomeMenu extends UIScriptedMenu +{ + MultilineTextWidget m_InfoBox; + ButtonWidget m_BtnOk; + + void WelcomeMenu() + { + } + + void ~WelcomeMenu() + { + } + + override Widget Init() + { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComMenu\\gui\\layouts\\WelcomeMenu.layout" ); + + m_InfoBox = MultilineTextWidget.Cast(TextWidget.Cast( layoutRoot.FindAnyWidget( "infotext" ) )); + m_BtnOk = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "btn_ok" ) ); + + string infotext; + + infotext = "Enjoy the DayZ Community Sandbox Mode."; + infotext += "\n \n \nThe current game build is still ALPHA!"; + infotext += "\nCrashes and bugs can occur."; + infotext += "\nNot all features are implemented or working yet!"; + infotext += "\nProvide feedback on the game via feedback.dayz.com"; + infotext += "\n \n \nCreated and Managed by Arkensor, DannyDog and Jacob_Mango."; + infotext += "\n \n \nContributions from:"; + infotext += "\n DuhOneZ, Watchman, n8m4re, wriley and gallexme."; + + m_InfoBox.SetText( infotext ); + + return layoutRoot; + } + + override void OnShow() + { + super.OnShow(); + } + + override void OnHide() + { + super.OnHide(); + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + super.OnClick(w, x, y, button); + + if ( w == m_BtnOk ) + { + Close(); + + return true; + } + + return false; + } + + override bool OnKeyPress( Widget w, int x, int y, int key ) + { + if( key == KeyCode.KC_ESCAPE ) + { + Close(); + } + + return false; + } +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/layouts/WelcomeMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/layouts/WelcomeMenu.layout new file mode 100644 index 00000000..de9415d4 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/gui/layouts/WelcomeMenu.layout @@ -0,0 +1,92 @@ +FrameWidgetClass WelcomeMenu +{ + visible 0 + color 0 0 0 0 + position 0 0 + size 650 395 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + style EditorPanel + + { + PanelWidgetClass Background + { + visible 1 + color 0 0 0 0.45 + position 0 0 + size 650 395 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + } + + PanelWidgetClass title_wrapper + { + visible 1 + color 0 0 0 0.7843 + position 0 0 + size 1 25 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style rover_sim_colorable + + { + TextWidgetClass title_text + { + position 0 0 + size 1 0.6 + halign center_ref + valign center_ref + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 0 + style Normal + text "DayZ Community Offline Mode" + font "gui/fonts/Metron-Bold58" + "exact text" 1 + "exact text size" 20 + "text halign" center + "text valign" center + } + } + } + + MultilineTextWidgetClass infotext + { + position 5 35 + size 640 320 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Lloyd!" + font "gui/fonts/sdf_MetronBook24" + "exact text" 0 + "text halign" center + "text valign" center + wrap 1 + } + + ButtonWidgetClass btn_ok + { + position 5 5 + size 80 20 + halign right_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + text "Ok" + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/module.c new file mode 100644 index 00000000..79998ab5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/ComMenu/module.c @@ -0,0 +1,9 @@ +/* + Define used for optional compilations +*/ +#define MODULE_COM_MENU + +/* + Include of all .c files that belong to this module +*/ +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\ComMenu\\gui\\WelcomeMenu.c" \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/CustomDebugMonitor.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/CustomDebugMonitor.c new file mode 100644 index 00000000..477e1927 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/CustomDebugMonitor.c @@ -0,0 +1,96 @@ +/* + Manages all keybinds for COM +*/ +class CustomDebugMonitor extends Module +{ + protected bool m_IsVisible = false; + protected ref ArkDebugMonitor m_debugMonitor; + + void CustomDebugMonitor() + { + m_debugMonitor = new ArkDebugMonitor; + } + + void ~CustomDebugMonitor() + { + } + + override void Init() + { + super.Init(); + + m_debugMonitor.Init(); + m_debugMonitor.Hide(); + } + + override void onUpdate( float timeslice ) + { + if( m_IsVisible ) + { + PlayerBase player = PlayerBase.Cast( COM_GetPB() ); + + if ( player ) + { + DebugMonitorValues values = player.GetDebugMonitorValues(); + + if ( values ) + { + auto health = player.GetHealth("","Health"); + auto blood = player.GetHealth("","Blood"); + auto lastdamage = values.GetLastDamage(); + + if( lastdamage == "" ) + { + lastdamage = "Unknown"; + } + + auto position = player.GetPosition(); + auto orientation = GetGame().GetCurrentCameraDirection().VectorToAngles(); + + m_debugMonitor.SetHealth( health ); + m_debugMonitor.SetBlood( blood ); + m_debugMonitor.SetLastDamage( lastdamage ); + m_debugMonitor.SetPosition( position ); + m_debugMonitor.SetOrientation( orientation ); + + int year; + int month; + int day; + int hour; + int minute; + int second; + + GetYearMonthDay(year, month, day); + GetHourMinuteSecond(hour, minute, second); + + string date = day.ToStringLen(2) + "-" + month.ToStringLen(2) + "-" + year.ToStringLen(2) + " " + hour.ToStringLen(2) + ":" + minute.ToStringLen(2) + ":" + second.ToStringLen(2); + + m_debugMonitor.SetDateTime( date ); + } + } + } + } + + override void RegisterKeyMouseBindings() + { + auto oToggleMonitor = new KeyMouseBinding( GetModuleType(), "ToggleMonitor", "Toggles the debug monitor." ); + + oToggleMonitor.AddBinding( "kB" ); + + RegisterKeyMouseBinding( oToggleMonitor ); + } + + void ToggleMonitor() + { + m_IsVisible = !m_IsVisible; + + if( m_IsVisible ) + { + m_debugMonitor.Show(); + } + else + { + m_debugMonitor.Hide(); + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/DebugMonitor.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/DebugMonitor.c new file mode 100644 index 00000000..f2d34d11 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/DebugMonitor.c @@ -0,0 +1,103 @@ +class ArkDebugMonitor +{ + private Widget m_WidgetRoot; + private TextWidget m_pWindowLabelText; + private TextListboxWidget m_pNamesListboxWidget; + private TextListboxWidget m_pValuesListboxWidget; + private MultilineTextWidget m_pModifiersMultiTextWidget; + + void ArkDebugMonitor() + { + m_WidgetRoot = GetGame().GetWorkspace().CreateWidgets("$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\DebugMonitor\\gui\\layouts\\day_z_debug_monitor.layout"); + m_WidgetRoot.Show(false); + + m_pWindowLabelText = TextWidget.Cast( m_WidgetRoot.FindAnyWidget("WindowLabel") ); + m_pNamesListboxWidget = TextListboxWidget.Cast( m_WidgetRoot.FindAnyWidget("NamesListboxWidget") ); + m_pValuesListboxWidget = TextListboxWidget.Cast( m_WidgetRoot.FindAnyWidget("ValuesListboxWidget") ); + m_pModifiersMultiTextWidget = MultilineTextWidget.Cast( m_WidgetRoot.FindAnyWidget("ModifiersMultilineTextWidget") ); + } + + void Init() + { + m_pNamesListboxWidget.AddItem("HEALTH:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + m_pNamesListboxWidget.AddItem("BLOOD:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + /*m_pNamesListboxWidget.AddItem("BODY TEMP:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0);*/ + + m_pNamesListboxWidget.AddItem("LAST DAMAGE:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + m_pNamesListboxWidget.AddItem("POSITION:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + m_pNamesListboxWidget.AddItem("ORIENTATION:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + m_pNamesListboxWidget.AddItem("DATETIME:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0); + + string version; + GetGame().GetVersion(version); + + m_pNamesListboxWidget.AddItem("VERSION:", NULL, 0); + m_pValuesListboxWidget.AddItem( " " + version, NULL, 0); + + /*m_pNamesListboxWidget.AddItem("MODIFIERS:", NULL, 0); + m_pValuesListboxWidget.AddItem("", NULL, 0);*/ + + //m_DebugFloatsListWidget.AddItem(key,NULL,0); + //m_DebugFloatsListWidget.SetItem(i,value.ToString(),NULL,1); + + m_WidgetRoot.Show(true); + } + + void SetHealth(float value) + { + string health = string.Format(" %1", value.ToString()); + m_pValuesListboxWidget.SetItem(0, health, NULL, 0); + } + + void SetBlood(float value) + { + string blood = string.Format(" %1", value.ToString()); + m_pValuesListboxWidget.SetItem(1, blood, NULL, 0); + } + + void SetLastDamage(string value) + { + string lastDamage = string.Format(" %1", value); + m_pValuesListboxWidget.SetItem(2, lastDamage, NULL, 0); + } + + void SetPosition(vector value) + { + string position = string.Format(" %1 %2 %3", value[0].ToString(), value[1].ToString(), value[2].ToString()); + m_pValuesListboxWidget.SetItem(3, position, NULL, 0); + } + + void SetOrientation(vector value) + { + string orientation = string.Format(" %1 %2 %3", value[0].ToString(), value[1].ToString(), value[2].ToString()); + m_pValuesListboxWidget.SetItem(4, orientation, NULL, 0); + } + + void SetDateTime(string value) + { + string orientation = string.Format(" %1", value); + m_pValuesListboxWidget.SetItem(5, orientation, NULL, 0); + } + + void Hide() + { + m_WidgetRoot.Show(false); + } + + void Show() + { + m_WidgetRoot.Show(true); + } +}; \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/layouts/day_z_debug_monitor.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/layouts/day_z_debug_monitor.layout new file mode 100644 index 00000000..5bb41afd --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/gui/layouts/day_z_debug_monitor.layout @@ -0,0 +1,106 @@ +FrameWidgetClass HudDebugFrameWidget { + position -2 1 + size 1 1 + halign right_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + WindowWidgetClass StatusWindowWidget { + visible 1 + position 0.01 0.01 + size 310 165 + halign right_ref + hexactpos 0 + vexactpos 0 + hexactsize 1 + vexactsize 1 + style rover_sim_black_2 + "title visible" 0 + "text color" 0.6353 0.6353 0.6353 1 + "disabled text color" 0.6353 0.6353 0.6353 1 + { + TextWidgetClass WindowLabel { + disabled 0 + position 24 7 + size 0.8446 18 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + fixaspect fixwidth + draggable 0 + style Bold + text "STATUS" + font "gui/fonts/MetronBook14" + "exact text" 1 + "text halign" center + "text valign" center + } + TextListboxWidgetClass NamesListboxWidget { + visible 1 + disabled 1 + clipchildren 0 + position 35 36.7 + size 79 125 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style Default + "title visible" 0 + colums "" + lines 7 + font "gui/fonts/MetronBook12" + "text color" 0.9451 0.9451 0.9451 1 + } + TextListboxWidgetClass ValuesListboxWidget { + visible 1 + disabled 1 + clipchildren 0 + position 125 36.7 + size 170 125 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style Default + "title visible" 0 + colums "" + lines 7 + font "gui/fonts/MetronBook12" + "text color" 0.6353 0.6353 0.6353 1 + "disabled text color" 0.6353 0.6353 0.6353 1 + } + MultilineTextWidgetClass ModifiersMultilineTextWidget { + disabled 0 + clipchildren 1 + keepsafezone 0 + color 0.6353 0.6353 0.6353 1 + position 116.58 106.7 + size 170 34 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style DayZNormal + font "gui/fonts/MetronBook12" + "text color" 0.6353 0.6353 0.6353 1 + "exact text" 0 + wrap 0 + } + PanelWidgetClass PanelWidget0 { + color 0.6353 0.6353 0.6353 1 + position 24 30 + size 262 1 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style editor_quad + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/module.c new file mode 100644 index 00000000..27c284f5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/DebugMonitor/module.c @@ -0,0 +1,22 @@ +#ifndef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" +#endif +/* + Define used for optional compilations +*/ +#define MODULE_DEBUG_MONITOR + +/* + Include of all .c files that belong to this module +*/ +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\DebugMonitor\\CustomDebugMonitor.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\DebugMonitor\\gui\\DebugMonitor.c" +#endif + +#ifndef COM_MODULES_OLDLOADING +void RegisterModule() +{ + COM_GetModuleManager().RegisterModule( new CustomDebugMonitor ); +} +#endif \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/CharacterData.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/CharacterData.c new file mode 100644 index 00000000..ec6d2f66 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/CharacterData.c @@ -0,0 +1,47 @@ +class CharacterData +{ + string SModel; + + vector VecPosition; + vector VecDirection; + vector VecOrientation; + + float FHealth; + float FBlood; + + int IBloodStatType; + + float FTemperature; + float FEnergy; + float FWater; + float FShock; + + float FStomachWater; + float FStomachEnergy; + + float FHeatComfort; + float FStomachSolid; + + float FWet; + float FTremor; + + float FStamina; + + float FLastShaved; + float FBloodyHands; + + float FPlayTime; + + bool HasInventory; + ref InventoryData OInventory; + + bool HasItemInHands; + ref HandData OHands; + + void CharacterData() + { + HasInventory = false; + OInventory = new InventoryData; + OHands = new HandData; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/HandData.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/HandData.c new file mode 100644 index 00000000..a3ac900d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/HandData.c @@ -0,0 +1,4 @@ +class HandData : ItemData +{ + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/InventoryData.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/InventoryData.c new file mode 100644 index 00000000..b995ded2 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/InventoryData.c @@ -0,0 +1,4 @@ +class InventoryData : ItemData +{ + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/ItemData.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/ItemData.c new file mode 100644 index 00000000..c93a61e4 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Data/ItemData.c @@ -0,0 +1,63 @@ +int COM_DEFAULT_TYPE = 0; +int COM_CARGO_TYPE = 1; +int COM_ATTACHMENT_TYPE = 2; +int COM_GROUND = 3; + +class ItemData +{ + string Name; + + int LocationType; // 0: None, 1: Cargo, 2: Attachment, 3: Ground + int X; + int Y; + + int Quantity; + float ItemWet; + float ItemHealth; + + int IQuickBarIndex; + + int NumAttachments; + ref array ItemAttachments; + + int NumItems; + ref array Items; + + void ItemData() + { + IQuickBarIndex = -1; + + NumAttachments = 0; + ItemAttachments = new array; + NumItems = 0; + Items = new array; + } + + void ~ItemData() + { + ItemAttachments.Clear(); + Items.Clear(); + } + + float GetItemQuantity( InventoryItem oItem ) + { + float fQuantity = 1; + + if ( oItem.IsInherited( InventoryItem ) ) + { + ItemBase oItembase = ItemBase.Cast( oItem ); + + if ( oItem.IsInherited( Magazine) ) + { + Magazine oMagazine = Magazine.Cast( oItem ); + + fQuantity = oMagazine.GetAmmoCount(); + } + else + { + fQuantity = oItembase.GetQuantity(); + } + } + return fQuantity; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/CharacterLoad.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/CharacterLoad.c new file mode 100644 index 00000000..9af617d9 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/CharacterLoad.c @@ -0,0 +1,61 @@ +class CharacterLoad +{ + static PlayerBase LoadPlayer(string sCharacter, string sSave, bool bObject = false, PlayerIdentity oIdentity = NULL ) { + CharacterData oData = new CharacterData; + + string file = BASE_PLAYER_SAVE_DIR + "\\" + sCharacter + "\\" + sSave + ".json"; + + Print("Loading file: " + file); + + JsonFileLoader.JsonLoadFile(file, oData); + + PlayerBase oPlayer; + + if ( bObject ) + { + oPlayer = PlayerBase.Cast( GetGame().CreateObject( oData.SModel, "0 0 0", true, true, true ) ); + } else + { + oPlayer = PlayerBase.Cast( GetGame().CreatePlayer( oIdentity, oData.SModel, "0 0 0", 0, "NONE") ); + } + + // Temporary for debugging purposes. Death checking not yet implemented. + if (oData.FHealth < 20) oData.FHealth = 20; + if (oData.FBlood < 2000) oData.FBlood = 2000; + + oPlayer.SetDirection( oData.VecDirection ); + oPlayer.SetOrientation( oData.VecOrientation ); + + oPlayer.SetHealth("","", oData.FHealth ); + oPlayer.SetHealth("GlobalHealth", "Blood", oData.FBlood ); + oPlayer.GetStatBloodType().Set( oData.IBloodStatType ); + //oPlayer.GetStatTemperature().Set( oData.FTemperature ); + //oPlayer.GetStatShock().Set( oData.FShock ); + oPlayer.GetStatEnergy().Set( oData.FEnergy ); + oPlayer.GetStatWater().Set( oData.FWater ); + oPlayer.GetStatStomachWater().Set( oData.FStomachWater ); + oPlayer.GetStatStomachEnergy().Set( oData.FStomachEnergy ); + oPlayer.GetStatHeatComfort().Set( oData.FHeatComfort ); + oPlayer.GetStatStomachSolid().Set( oData.FStomachSolid ); + oPlayer.GetStatWet().Set( oData.FWet ); + oPlayer.GetStatTremor().Set( oData.FTremor ); + oPlayer.GetStatStamina().Set( oData.FStamina ); + oPlayer.StatRegister("playtime"); + oPlayer.StatUpdate("playtime", oData.FPlayTime); + oPlayer.SetLastShavedSeconds(oData.FLastShaved); + oPlayer.SetBloodyHands(oData.FBloodyHands); + + if (oData.HasInventory) { + InventoryLoad.Load(oPlayer, oPlayer, oData.OInventory); + } + + if (oData.HasItemInHands) { + HandLoad.Load(oPlayer, oPlayer, oData.OHands); + } + + oPlayer.SetPosition( oData.VecPosition ); + + return oPlayer; + + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/HandLoad.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/HandLoad.c new file mode 100644 index 00000000..167209f5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/HandLoad.c @@ -0,0 +1,14 @@ +class HandLoad : ItemLoad +{ + static override EntityAI Load(EntityAI oParent, PlayerBase oPlayer, ItemData oData) { + EntityAI oEntity = ItemLoad.Load(oParent, oPlayer, oData); + ItemBase oItem = NULL; + + if (Class.CastTo(oItem, oEntity) && oEntity.IsItemBase()) + { + oPlayer.LocalTakeEntityToHands( oItem ); + } + + return oEntity; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/InventoryLoad.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/InventoryLoad.c new file mode 100644 index 00000000..14677d73 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/InventoryLoad.c @@ -0,0 +1,14 @@ +class InventoryLoad : ItemLoad +{ + static override EntityAI Load(EntityAI oParent, PlayerBase oPlayer, ItemData oData) { + if (oData.NumAttachments > 0) + { + for (int iAttachment = 0; iAttachment < oData.NumAttachments; iAttachment++) + { + FixAndLoadAttachment(oParent, oPlayer, oData.ItemAttachments[iAttachment]); + } + } + + return NULL; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/ItemLoad.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/ItemLoad.c new file mode 100644 index 00000000..7c236079 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Load/ItemLoad.c @@ -0,0 +1,91 @@ +class ItemLoad +{ + static EntityAI Load(EntityAI oParent, PlayerBase oPlayer, ItemData oData) { + EntityAI oEntity; + + switch(oData.LocationType) + { + case COM_CARGO_TYPE: + oEntity = oParent.GetInventory().CreateEntityInCargoEx(oData.Name, 0, oData.X, oData.Y); + break; + case COM_ATTACHMENT_TYPE: + oEntity = oParent.GetInventory().CreateAttachment(oData.Name); + break; + case COM_GROUND: + InventoryLocation dest = new InventoryLocation; + dest.SetGround(NULL, oPlayer.GetPosition()); + oEntity = SpawnEntity(oData.Name, dest); + break; + case COM_DEFAULT_TYPE: + default: + oEntity = oParent.GetInventory().CreateInInventory(oData.Name); + break; + } + + ItemBase oItem = NULL; + + if (Class.CastTo(oItem, oEntity) && oEntity.IsItemBase()) + { + oItem.SetWet(oData.ItemWet); + oItem.SetHealth("", "", oData.ItemHealth); + + if (oItem.IsInherited(Magazine)) + { + Magazine oMagazine = Magazine.Cast( oItem ); + oMagazine.LocalSetAmmoCount(oData.Quantity); + } else + { + oItem.SetQuantity(oData.Quantity); + } + + if (oData.IQuickBarIndex != -1) + { + oPlayer.SetQuickBarEntityShortcut(oItem, oData.IQuickBarIndex); + } + } + + if (oData.NumAttachments > 0) + { + for (int iAttachment = 0; iAttachment < oData.NumAttachments; iAttachment++) + { + //ItemLoad.Load(oEntity, oPlayer, oData.ItemAttachments[iAttachment]); + FixAndLoadAttachment(oEntity, oPlayer, oData.ItemAttachments[iAttachment]); + } + } + + if (oData.NumItems > 0) + { + for (int iItem = 0; iItem < oData.NumItems; iItem++) + { + ItemLoad.Load(oEntity, oPlayer, oData.Items[iItem]); + } + } + + return oEntity; + } + + protected static EntityAI FixAndLoadAttachment(EntityAI oParent, PlayerBase oPlayer, ItemData oItemData) { + ItemBase oItem = NULL; + EntityAI oEntity = NULL; + + oEntity = ItemLoad.Load(oParent, oPlayer, oItemData); + + if (Class.CastTo(oItem, oEntity) && oEntity.IsItemBase()) + { + if (oItem.IsInherited(Magazine)) + { + Magazine oMagazine = Magazine.Cast( oItem ); + + if (oParent.IsInherited(Weapon_Base)) + { + Weapon_Base oWpn = Weapon_Base.Cast( oParent ); + + oWpn.AttachMagazine( oWpn.GetCurrentMuzzle(), oMagazine ); + // oWpn.NetSyncCurrentStateID( 3 ); + } + } + } + + return oEntity; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/PersistencyModule.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/PersistencyModule.c new file mode 100644 index 00000000..73d7391f --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/PersistencyModule.c @@ -0,0 +1,410 @@ +class PersistencyModule extends Module +{ + protected ref COMPersistencyScene m_Scene; + + protected ref COMCharacterMenu m_CharacterMenu; + protected ref Widget m_CharacterSaveWidget; + protected ref COMCharacterSave m_CharacterSave; + protected ref UIScriptedMenu m_InGameMenu; + + protected bool m_CanBeSaved = false; + protected bool m_CharacterIsLoaded = false; + + protected string m_sCharacter = ""; + protected string m_sSave = ""; + + void PersistencyModule() + { + PersistencyPrint( "PersistencyModule::PersistencyModule" ); + + MakeDirectory( BASE_COM_DIR ); + MakeDirectory( BASE_PLAYER_SAVE_DIR ); + } + + void ~PersistencyModule() + { + PersistencyPrint( "PersistencyModule::~PersistencyModule" ); + + CleanupCharacterSaving(); + CleanupCharacterMenu(); + CleanupScene(); + } + + string GetLoadedCharacter() + { + PersistencyPrint("PersistencyModule::GetLoadedCharacter"); + return m_sCharacter; + } + + string GetLoadedSave() + { + PersistencyPrint("PersistencyModule::GetLoadedSave"); + return m_sSave; + } + + override void Init() + { + super.Init(); + + #ifdef MODULE_UIEXTENDER + UIExtender om = COM_GetModuleManager().GetModuleByName( "UIExtender" ); + + if ( om ) + { + om.AddPauseButton( new CustomPauseButton( "SAVE CHARACTER", MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER, GetModuleType(), "OpenCharacterSaving" ), new OverrideValid(true, true), 2 ); + om.AddPauseButton( new CustomPauseButton( "LOAD CHARACTER", MODULE_PERSISTENCY_WIDGET_LOAD_CHARACTER, GetModuleType(), "OpenCharacterLoading" ), new OverrideValid(true, true), 2 ); + } + + #endif + } + + override void onMissionLoaded() + { + PersistencyPrint("PersistencyModule::onMissionLoaded"); + + m_CanBeSaved = false; + m_CharacterIsLoaded = false; + + #ifdef MODULE_PERSISTENCY_IGNORE_LOADING + GetGame().SelectPlayer( NULL, COM_CreateCustomDefaultCharacter() ); + #else + OpenCharacterLoading(); + #endif + } + + override void onUpdate( float timeslice ) + { + } + + override void onMissionFinish() + { + PersistencyPrint("PersistencyModule::onMissionFinish"); + SavePlayer( m_sSave ); + } + + ref COMPersistencyScene GetScene() + { + PersistencyPrint("PersistencyModule::GetScene"); + return m_Scene; + } + + void CleanupScene() + { + PersistencyPrint("PersistencyModule::CleanupScene"); + + if ( m_Scene ) + { + delete m_Scene; + } + } + + void CleanupCharacterMenu() + { + PersistencyPrint("PersistencyModule::CleanupCharacterMenu"); + + if ( m_CharacterMenu ) + { + m_CharacterMenu.Close(); + + delete m_CharacterMenu; + } + } + + private void SetupCharacterLoading() + { + PersistencyPrint("PersistencyModule::SetupCharacterLoading"); + + m_CharacterIsLoaded = false; + m_CanBeSaved = false; + + if ( COM_GetPB() ) + { + COM_GetPB().SimulateDeath( false ); + + if ( m_sCharacter != "" && m_sSave != "" ) + { + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove( this.SavePlayer ); + + CharacterSave.SavePlayer( m_sCharacter, m_sSave, COM_GetPB() ); + } + } + + m_Scene = new COMPersistencyScene; + } + + void OpenCharacterLoading() + { + PersistencyPrint("PersistencyModule::OpenCharacterLoading"); + + CleanupCharacterSaving(); + + CleanupCharacterMenu(); + + CleanupScene(); + + SetupCharacterLoading(); + + if ( !m_CharacterMenu ) + { + m_CharacterMenu = new COMCharacterMenu( this, true ); + } + + UIExtender om = COM_GetModuleManager().GetModuleByName( "UIExtender" ); + if ( om ) + { + om.GetPauseMenu().Close(); + } + + GetGame().GetUIManager().ShowScriptedMenu( m_CharacterMenu , NULL ); + } + + void TemporaryFix_ReloadCharacterMenu() + { + PersistencyPrint("PersistencyModule::TemporaryFix_ReloadCharacterMenu"); + + bool isLoadingSave = true; + + if ( m_CharacterMenu ) + { + isLoadingSave = m_CharacterMenu.IsLoadingSave(); + } + + if ( !m_CharacterMenu ) + { + m_CharacterMenu = new COMCharacterMenu( this, isLoadingSave ); + } else + { + CleanupCharacterMenu(); + } + + UIExtender om = COM_GetModuleManager().GetModuleByName( "UIExtender" ); + if ( om ) + { + om.GetPauseMenu().Close(); + } + + GetGame().GetUIManager().ShowScriptedMenu( m_CharacterMenu , NULL ); + } + + #ifndef MODULE_UIEXTENDER + private bool CleanupCharacterSaving() + { + PersistencyPrint("PersistencyModule::CleanupCharacterSaving"); + bool foundWidget = false; + + m_InGameMenu = GetGame().GetUIManager().FindMenu(MENU_INGAME); + + if ( m_InGameMenu.IsInherited( CustomInGameMenu ) ) + { + if (CustomInGameMenu.Cast( m_InGameMenu ).m_RightPanel.FindAnyWidgetById(MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER_PANEL)) + { + foundWidget = true; + } + } + + if ( m_CharacterSave || m_CharacterSaveWidget || foundWidget ) + { + if ( m_InGameMenu.IsInherited( CustomInGameMenu ) && m_CharacterSaveWidget ) + { + m_CharacterSaveWidget.Unlink(); + delete m_CharacterSaveWidget; + } else { + GetGame().GetUIManager().HideScriptedMenu( m_CharacterSave ); + } + + return true; + } + + return false; + } + + void OpenCharacterSaving() + { + PersistencyPrint("PersistencyModule::OpenCharacterSaving"); + bool foundWidget = false; + + m_InGameMenu = GetGame().GetUIManager().FindMenu(MENU_INGAME); + + if ( m_InGameMenu.IsInherited( CustomInGameMenu ) ) + { + if (CustomInGameMenu.Cast( m_InGameMenu ).m_RightPanel.FindAnyWidgetById(MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER_PANEL)) + { + foundWidget = true; + } + } + + if ( m_CharacterSave || m_CharacterSaveWidget || foundWidget ) + { + if ( m_InGameMenu.IsInherited( CustomInGameMenu ) && m_CharacterSaveWidget ) + { + m_CharacterSaveWidget.Unlink(); + delete m_CharacterSaveWidget; + } else { + GetGame().GetUIManager().HideScriptedMenu( m_CharacterSave ); + } + + delete m_CharacterSave; + } else { + m_CharacterSave = new COMCharacterSave( this ); + + if ( m_InGameMenu.IsInherited( CustomInGameMenu ) ) + { + m_CharacterSaveWidget = m_CharacterSave.InitWithParent( CustomInGameMenu.Cast( m_InGameMenu ).m_RightPanel ); + m_CharacterSaveWidget.SetUserID(MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER_PANEL); + } else { + GetGame().GetUIManager().ShowScriptedMenu( m_CharacterSave , m_InGameMenu ); + } + } + } + #else + private bool CleanupCharacterSaving() + { + PersistencyPrint( "PersistencyModule::CleanupCharacterSaving" ); + if (m_CharacterSave) + { + GetGame().GetUIManager().HideScriptedMenu( m_CharacterSave ); + + delete m_CharacterSave; + + return true; + } + return false; + } + + void OpenCharacterSaving() + { + PersistencyPrint( "PersistencyModule::OpenCharacterSaving" ); + m_InGameMenu = GetGame().GetUIManager().FindMenu(MENU_INGAME); + + if ( m_CharacterSave ) + { + CleanupCharacterSaving(); + } else + { + m_CharacterSave = new COMCharacterSave( this ); + + GetGame().GetUIManager().ShowScriptedMenu( m_CharacterSave , m_InGameMenu ); + } + } + #endif + + void SavePlayer(string sSave) + { + PersistencyPrint("PersistencyModule::SavePlayer"); + + if ( m_CanBeSaved ) { + if ( sSave != "latest" ) + { + m_sSave = sSave; + } + CharacterSave.SavePlayer( m_sCharacter, m_sSave, COM_GetPB() ); + } + } + + void CreatePlayer(string sCharacter, PlayerBase oPlayer) + { + PersistencyPrint("PersistencyModule::CreatePlayer"); + + CameraTool.CAMERA_SMOOTH_BLUR = 1.0; + + m_CanBeSaved = false; + + MakeDirectory(BASE_PLAYER_SAVE_DIR + "\\" + sCharacter); + + m_sCharacter = sCharacter; + m_sSave = "latest"; + + CharacterSave.CreatePlayer( m_sCharacter, oPlayer ); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.CreatePlayerInt, 200, false); + } + + void LoadLast() + { + PersistencyPrint("PersistencyModule::LoadLast"); + + CameraTool.CAMERA_SMOOTH_BLUR = 1.0; + + m_CanBeSaved = false; + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.CreatePlayerInt, 200, false); + } + + void LoadPlayer(string sCharacter, string sSave = "latest") + { + PersistencyPrint("PersistencyModule::LoadPlayer"); + + CameraTool.CAMERA_SMOOTH_BLUR = 1.0; + + m_CanBeSaved = false; + + m_sCharacter = sCharacter; + m_sSave = sSave; + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.CreatePlayerInt, 200, false); + } + + private void CreatePlayerInt() + { + PersistencyPrint("PersistencyModule::CreatePlayerInt"); + + PlayerBase oPlayer; + + if ( m_sCharacter == "" ) + { + oPlayer = COM_CreateCustomDefaultCharacter(); + } else + { + if ( m_sSave == "" ) + { + m_sSave = "latest"; + } + + oPlayer = CharacterLoad.LoadPlayer( m_sCharacter, m_sSave, false ); + } + + GetGame().SelectPlayer( NULL, oPlayer ); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.FinishLoadingInt, 100, false); + } + + private void FinishLoadingInt() + { + PersistencyPrint("PersistencyModule::FinishLoadingInt"); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.RemoveEffects, 500, false); + + CameraTool.CAMERA_SMOOTH_BLUR = 0.5; + + if ( m_sCharacter != "" && m_sSave != "" ) + { + COM_GetPB().MessageStatus("Loaded character \'" + m_sCharacter + "\' with save \'" + m_sSave + "\'"); + } + + m_CanBeSaved = true; + m_CharacterIsLoaded = true; + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.SavePlayer, 1000, true, "latest"); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.CleanupCharacterMenu, 100, false); + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.CleanupScene, 250, false); + + } + + private void RemoveEffects() + { + PersistencyPrint("PersistencyModule::RemoveEffects"); + CloseLoadingText(); + + COM_GetMission().GetHud().Show(true); + + CameraTool.CAMERA_SMOOTH_BLUR = 0.0; + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.FixEscape, 500, false); + } + + private void FixEscape() + { + PersistencyPrint("PersistencyModule::FixEscape"); + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/CharacterSave.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/CharacterSave.c new file mode 100644 index 00000000..bb6f3371 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/CharacterSave.c @@ -0,0 +1,117 @@ +class CharacterSave +{ + static void SavePlayer(string sCharacter, string sSave, PlayerBase oPlayer = NULL) + { + string character = sCharacter; + string save = sSave; + + if ( character == "" ) + { + return; + } + + if ( save == "" ) + { + save = "latest"; + } + + if ( oPlayer == NULL ) + { + return; + } + + CharacterData oData = new CharacterData; + + oData.SModel = oPlayer.GetType(); + oData.VecPosition = oPlayer.GetPosition(); + oData.VecDirection = oPlayer.GetDirection(); + oData.VecOrientation = oPlayer.GetOrientation(); + oData.FHealth = oPlayer.GetHealth("",""); + oData.FBlood = oPlayer.GetHealth("GlobalHealth", "Blood"); + oData.IBloodStatType = oPlayer.GetStatBloodType().Get(); + //oData.FTemperature = oPlayer.GetStatTemperature().Get(); + //oData.FShock = oPlayer.GetStatShock().Get(); + oData.FEnergy = oPlayer.GetStatEnergy().Get(); + oData.FWater = oPlayer.GetStatWater().Get(); + oData.FStomachWater = oPlayer.GetStatStomachWater().Get(); + oData.FStomachEnergy = oPlayer.GetStatStomachEnergy().Get(); + oData.FHeatComfort = oPlayer.GetStatHeatComfort().Get(); + oData.FStomachSolid = oPlayer.GetStatStomachSolid().Get(); + oData.FWet = oPlayer.GetStatWet().Get(); + oData.FTremor = oPlayer.GetStatTremor().Get(); + oData.FStamina = oPlayer.GetStatStamina().Get(); + oData.FLastShaved = oPlayer.GetLastShavedSeconds(); + oData.FBloodyHands = oPlayer.HasBloodyHands(); + oData.FPlayTime = oPlayer.StatGet("playtime"); + + // TEMP + oData.HasInventory = true; + + if (oData.HasInventory) { + InventorySave.Save(oPlayer, oPlayer, oData.OInventory); + } + + ItemBase oHands = oPlayer.GetHumanInventory().GetEntityInHands(); + + oData.HasItemInHands = oHands != NULL; + + if (oData.HasItemInHands) { + HandSave.Save(oHands, oPlayer, oData.OHands); + } + + JsonFileLoader.JsonSaveFile(BASE_PLAYER_SAVE_DIR + "\\" + character + "\\" + save + ".json", oData); + } + + static void CreatePlayer(string sCharacter, PlayerBase oPlayer) + { + string character = sCharacter; + string save = "latest"; + + if ( character == "" ) + { + return; + } + + CharacterData oData = new CharacterData; + + oData.SModel = oPlayer.GetType(); + oData.VecPosition = oPlayer.GetPosition(); + oData.VecDirection = oPlayer.GetDirection(); + oData.VecOrientation = oPlayer.GetOrientation(); + + oData.FHealth = oPlayer.GetHealth("",""); + oData.FBlood = oPlayer.GetHealth("GlobalHealth", "Blood"); + oData.IBloodStatType = oPlayer.GetStatBloodType().Get(); + //oData.FTemperature = oPlayer.GetStatTemperature().Get(); + //oData.FShock = oPlayer.GetStatShock().Get(); + oData.FEnergy = oPlayer.GetStatEnergy().Get(); + oData.FWater = oPlayer.GetStatWater().Get(); + oData.FStomachWater = oPlayer.GetStatStomachWater().Get(); + oData.FStomachEnergy = oPlayer.GetStatStomachEnergy().Get(); + oData.FHeatComfort = oPlayer.GetStatHeatComfort().Get(); + oData.FStomachSolid = oPlayer.GetStatStomachSolid().Get(); + oData.FWet = oPlayer.GetStatWet().Get(); + oData.FTremor = oPlayer.GetStatTremor().Get(); + oData.FStamina = oPlayer.GetStatStamina().Get(); + oData.FLastShaved = oPlayer.GetLastShavedSeconds(); + oData.FBloodyHands = oPlayer.HasBloodyHands(); + oData.FPlayTime = oPlayer.StatGet("playtime"); + + // TEMP + oData.HasInventory = true; + + if (oData.HasInventory) { + InventorySave.Save(oPlayer, oPlayer, oData.OInventory); + } + + ItemBase oHands = oPlayer.GetHumanInventory().GetEntityInHands(); + + oData.HasItemInHands = oHands != NULL; + + if (oData.HasItemInHands) { + HandSave.Save(oHands, oPlayer, oData.OHands); + } + + JsonFileLoader.JsonSaveFile(BASE_PLAYER_SAVE_DIR + "\\" + character + "\\" + save + ".json", oData); + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/HandSave.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/HandSave.c new file mode 100644 index 00000000..b3dc1543 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/HandSave.c @@ -0,0 +1,3 @@ +class HandSave : ItemSave +{ +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/InventorySave.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/InventorySave.c new file mode 100644 index 00000000..a38f8ab3 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/InventorySave.c @@ -0,0 +1,3 @@ +class InventorySave : ItemSave +{ +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/ItemSave.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/ItemSave.c new file mode 100644 index 00000000..714f224e --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/Save/ItemSave.c @@ -0,0 +1,64 @@ +class ItemSave +{ + static ItemData Save(EntityAI oEntity, PlayerBase oPlayer, ItemData oThisData) { + auto oCargo = oEntity.GetInventory().GetCargo(); + ItemData oItemData = NULL; + + ItemBase oItem = NULL; + + if (Class.CastTo(oItem, oEntity) && oEntity.IsItemBase()) + { + oThisData.Name = oItem.GetType(); + + oThisData.Quantity = oThisData.GetItemQuantity(oItem); + oThisData.ItemWet = oItem.GetWet(); + oThisData.ItemHealth = oItem.GetHealth("", ""); + + oThisData.IQuickBarIndex = oPlayer.FindQuickBarEntityIndex(oItem); + } + + if (oCargo) + { + for (int iCargo = 0; iCargo < oCargo.GetItemCount(); iCargo++) + { + EntityAI oCEntity = oCargo.GetItem(iCargo); + + if (oCEntity) + { + oItemData = new ItemData; + if (ItemSave.Save(oCEntity, oPlayer, oItemData)) { + oThisData.NumItems++; + + oItemData.LocationType = COM_CARGO_TYPE; // Cargo + + int iX, iY; + oCargo.GetItemRowCol(iCargo, iX, iY ); + oItemData.X = iX; + oItemData.Y = iY; + + oThisData.Items.Insert(oItemData); + } + } + } + } + + for (int iAttachment = 0; iAttachment < oEntity.GetInventory().AttachmentCount(); iAttachment++) + { + EntityAI oAttachment = oEntity.GetInventory().GetAttachmentFromIndex(iAttachment); + + if (oAttachment) + { + oItemData = new ItemData; + if (ItemSave.Save(oAttachment, oPlayer, oItemData)) { + oThisData.NumAttachments++; + + oItemData.LocationType = COM_ATTACHMENT_TYPE; // Attachment + + oThisData.ItemAttachments.Insert(oItemData); + } + } + } + + return oThisData; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterMenu.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterMenu.c new file mode 100644 index 00000000..a2d28c78 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterMenu.c @@ -0,0 +1,931 @@ +class COMCharacterMenu extends UIScriptedMenu +{ + ref TStringArray m_CharGenderList; + ref TStringArray m_CharPersonalityMaleList; + ref TStringArray m_CharPersonalityFemaleList; + ref TStringArray m_CharShirtList; + ref TStringArray m_CharPantsList; + ref TStringArray m_CharShoesList; + + ref TStringArray m_Characters; + ref TStringArray m_Saves; + + CharGender m_CharGender; + + int m_CharTypeIndex; + int m_CharShirtIndex; + int m_CharPantsIndex; + int m_CharShoesIndex; + + protected ref PersistencyModule m_oPersistencyModule; + + protected Widget m_CharacterRotationFrame; + protected ButtonWidget m_Apply; + protected ButtonWidget m_NewCharacter; + protected ButtonWidget m_Cancel; + + protected ButtonWidget m_PrevCharacter; + protected TextWidget m_CharacterText; + protected ButtonWidget m_NextCharacter; + + protected EditBoxWidget m_PlayerName; + protected TextWidget m_ActionTitle; + protected TextWidget m_Version; + + protected ref OptionSelectorMultistate m_SaveSelector; + + protected ref OptionSelectorMultistate m_GenderSelector; + protected ref OptionSelectorMultistate m_SkinSelector; + protected ref OptionSelectorMultistate m_TopSelector; + protected ref OptionSelectorMultistate m_BottomSelector; + protected ref OptionSelectorMultistate m_ShoesSelector; + + protected bool m_IsLoadingSave; + protected bool m_CanLoadSave; + + protected int m_Character; + protected int m_Save; + protected bool m_NoSaves; + + void COMCharacterMenu( PersistencyModule oPersistencyModule, bool isLoadSave = true ) + { + PersistencyPrint("COMCharacterMenu::COMCharacterMenu"); + m_oPersistencyModule = oPersistencyModule; + + m_Characters = new TStringArray; + m_Saves = new TStringArray; + + m_CharGenderList = new TStringArray; + m_CharPersonalityMaleList = new TStringArray; + m_CharPersonalityFemaleList = new TStringArray; + m_CharShirtList = new TStringArray; + m_CharPantsList = new TStringArray; + m_CharShoesList = new TStringArray; + + m_Saves.Insert("N/A"); + + InitCharacterCreationData(); + + m_IsLoadingSave = isLoadSave; + m_NoSaves = true; + } + + void ~COMCharacterMenu() + { + PersistencyPrint("COMCharacterMenu::~COMCharacterMenu"); + GetGame().GetUpdateQueue(CALL_CATEGORY_SYSTEM).Remove( this.UpdateInterval ); + + delete m_CharGenderList; + delete m_CharPersonalityMaleList; + delete m_CharPersonalityFemaleList; + delete m_CharShirtList; + delete m_CharPantsList; + delete m_CharShoesList; + + delete m_Saves; + delete m_Characters; + + delete m_SaveSelector; + delete m_GenderSelector; + delete m_SkinSelector; + delete m_TopSelector; + delete m_BottomSelector; + delete m_ShoesSelector; + + g_Game.SetKeyboardHandle( NULL ); + } + + CharGender GenerateRandomGender() + { + PersistencyPrint("COMCharacterMenu::GenerateRandomGender"); + int chance = Math.RandomInt(0, 2); + if (chance == 0) + { + m_CharGender = CharGender.MALE; + } else { + m_CharGender = CharGender.FEMALE; + } + return m_CharGender; + } + + void GenerateRandomCharacterType() + { + PersistencyPrint("COMCharacterMenu::GenerateRandomCharacterType"); + if (m_CharGender == CharGender.FEMALE) + { + m_CharTypeIndex = m_CharPersonalityFemaleList.GetRandomIndex(); + } else { + m_CharTypeIndex = m_CharPersonalityMaleList.GetRandomIndex(); + } + } + + string CharacterTypeIndexToString() + { + PersistencyPrint("COMCharacterMenu::CharacterTypeIndexToString"); + if (m_CharGender == CharGender.FEMALE) + { + return m_CharPersonalityFemaleList.Get( m_CharTypeIndex ); + } else { + return m_CharPersonalityMaleList.Get( m_CharTypeIndex ); + } + } + + void GenerateRandomCharacter() + { + PersistencyPrint("COMCharacterMenu::GenerateRandomCharacter"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + GenerateRandomGender(); + GenerateRandomCharacterType(); + + m_oPersistencyModule.GetScene().SetCharacter( CharacterTypeIndexToString() ); + + m_oPersistencyModule.GetScene().SetAttachment(m_CharShirtList.GetRandomElement(), InventorySlots.BODY); + m_oPersistencyModule.GetScene().SetAttachment(m_CharPantsList.GetRandomElement(), InventorySlots.LEGS); + m_oPersistencyModule.GetScene().SetAttachment(m_CharShoesList.GetRandomElement(), InventorySlots.FEET); + + m_oPersistencyModule.GetScene().ResetIntroCamera(); + } + + // Need to read from a list later on. + void InitCharacterCreationData() + { + PersistencyPrint("COMCharacterMenu::InitCharacterCreationData"); + string character_CfgName; + string root_path = "cfgCharacterCreation"; + + GetGame().ConfigGetTextArray(root_path + " gender", m_CharGenderList); + GetGame().ConfigGetTextArray(root_path + " top", m_CharShirtList); + GetGame().ConfigGetTextArray(root_path + " bottom", m_CharPantsList); + GetGame().ConfigGetTextArray(root_path + " shoe", m_CharShoesList); + + TStringArray allTypes = GetGame().ListAvailableCharacters(); + for (int i = 0; i < allTypes.Count(); i++) + { + character_CfgName = allTypes.Get(i); + if (GetGame().IsKindOf(character_CfgName, "SurvivorMale_Base")) + { + m_CharPersonalityMaleList.Insert(character_CfgName); + } + else + { + m_CharPersonalityFemaleList.Insert(character_CfgName); + } + } + } + + override Widget Init() + { + PersistencyPrint("COMCharacterMenu::Init"); + layoutRoot = GetGame().GetWorkspace().CreateWidgets( "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\layouts\\COMCharacterMenu.layout" ); + + m_CharacterRotationFrame = layoutRoot.FindAnyWidget( "character_rotation_frame" ); + + m_Apply = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "apply" ) ); + m_NewCharacter = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "new_character" ) ); + m_Cancel = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "cancel" ) ); + + m_PrevCharacter = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "prev_character" ) ); + m_CharacterText = TextWidget.Cast( layoutRoot.FindAnyWidget( "character_text" ) ); + m_NextCharacter = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "next_character" ) ); + + m_PlayerName = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "general_name_setting_text" ) ); + m_ActionTitle = TextWidget.Cast( layoutRoot.FindAnyWidget( "CharacterCreationTextWidget" ) ); + m_Version = TextWidget.Cast( layoutRoot.FindAnyWidget( "version" ) ); + + string version; + GetGame().GetVersion( version ); + if( version != "" ) + m_Version.SetText( "#main_menu_version" + " " + version ); + else + m_Version.Show( false ); + + m_CharacterText.SetText( GetCharacter() ); + + m_SaveSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_save_setting_option" ), 0, null, false, m_Saves ); + + m_GenderSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_gender_setting_option" ), 0, null, false, m_CharGenderList ); + m_GenderSelector.SetValue( m_CharGender ); + + TStringArray typeList = NULL; + if ( m_CharGender == CharGender.FEMALE ) + { + typeList = m_CharPersonalityFemaleList; + } else + { + typeList = m_CharPersonalityMaleList; + } + + m_SkinSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_head_setting_option" ), 0, null, false, typeList); + + m_TopSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_top_setting_option" ), 0, null, false, m_CharShirtList ); + m_BottomSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_bottom_setting_option" ), 0, null, false, m_CharPantsList ); + m_ShoesSelector = new OptionSelectorMultistate( layoutRoot.FindAnyWidget( "character_shoes_setting_option" ), 0, null, false, m_CharShoesList ); + + m_SaveSelector.m_OptionChanged.Insert( SaveChanged ); + m_GenderSelector.m_OptionChanged.Insert( GenderChanged ); + m_SkinSelector.m_OptionChanged.Insert( SkinChanged ); + m_TopSelector.m_OptionChanged.Insert( TopChanged ); + m_BottomSelector.m_OptionChanged.Insert( BottomChanged ); + m_ShoesSelector.m_OptionChanged.Insert( ShoesChanged ); + + SetCharacter( 0 ); + + return layoutRoot; + } + + bool IsLoadingSave() + { + PersistencyPrint("COMCharacterMenu::IsLoadingSave"); + return m_IsLoadingSave; + } + + void SetOptions() + { + PersistencyPrint("COMCharacterMenu::SetOptions"); + if (m_IsLoadingSave) + { + m_ActionTitle.SetText( "SELECT SAVE" ); + m_NewCharacter.SetText( "NEW CHARACTER" ); + + layoutRoot.FindAnyWidget( "prev_character" ).Show( true ); + layoutRoot.FindAnyWidget( "next_character" ).Show( true ); + + layoutRoot.FindAnyWidget( "character_content" ).Show( false ); + layoutRoot.FindAnyWidget( "character_save" ).Show( true ); + + if (m_NoSaves) + { + layoutRoot.FindAnyWidget( "character_save_setting" ).Show( false ); + layoutRoot.FindAnyWidget( "character_save_setting_disable" ).Show( true ); + } else + { + layoutRoot.FindAnyWidget( "character_save_setting" ).Show( true ); + layoutRoot.FindAnyWidget( "character_save_setting_disable" ).Show( false ); + } + } else + { + m_ActionTitle.SetText( "CREATE NEW CHARACTER" ); + m_NewCharacter.SetText( "SELECT SAVE" ); + + m_CharacterText.SetText( "CHARACTER DETAILS" ); + + layoutRoot.FindAnyWidget( "prev_character" ).Show( false ); + layoutRoot.FindAnyWidget( "next_character" ).Show( false ); + + layoutRoot.FindAnyWidget( "character_content" ).Show( true ); + layoutRoot.FindAnyWidget( "character_save" ).Show( false ); + } + + if ( m_oPersistencyModule.GetLoadedCharacter() == "" || m_oPersistencyModule.GetLoadedSave() == "" ) + { + layoutRoot.FindAnyWidget( "cancel" ).Show( false ); + } else + { + layoutRoot.FindAnyWidget( "cancel" ).Show( true ); + } + + if ( m_CanLoadSave ) + { + layoutRoot.FindAnyWidget( "new_character" ).Show( true ); + } else + { + layoutRoot.FindAnyWidget( "new_character" ).Show( false ); + } + } + + override bool UseMouse() + { + return true; + } + + override bool UseKeyboard() + { + return true; + } + + void Cancel() + { + m_oPersistencyModule.LoadLast(); + } + + void Apply() + { + PersistencyPrint("COMCharacterMenu::Apply"); + + if ( COM_GetPB() && !GetGame().IsMultiplayer() ) + { + // COM_GetPB().Delete(); + } + + if ( m_IsLoadingSave ) + { + LoadSave(); + } else + { + CreateCharacter(); + } + } + + void LoadSave() + { + PersistencyPrint("COMCharacterMenu::LoadSave"); + string character = GetCharacter(); + string save = GetSave(); + + if ( m_NoSaves || character == "" || save == "" ) + { + GetGame().GetUIManager().ShowDialog("FAILURE", "No save found for this character!", 0, DBT_OK, DBB_OK, DMT_WARNING, NULL); + return + } + + CameraTool.CAMERA_SMOOTH_BLUR = 0.4; + + SetLoadingText("Loading Character"); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(m_oPersistencyModule.LoadPlayer, 200, false, character, save); + } + + void CreateCharacter() + { + PersistencyPrint("COMCharacterMenu::CreateCharacter"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + string characterName = m_PlayerName.GetText(); + + if ( characterName == "" ) + { + GetGame().GetUIManager().ShowDialog("FAILURE", "You didn't give a character name!", 0, DBT_OK, DBB_OK, DMT_WARNING, NULL); + return; + } + + if ( FileExist(BASE_PLAYER_SAVE_DIR + "\\" + characterName) ) + { + GetGame().GetUIManager().ShowDialog("FAILURE", "That character already exists!", 0, DBT_OK, DBB_OK, DMT_WARNING, NULL); + return; + } + + CameraTool.CAMERA_SMOOTH_BLUR = 0.4; + + SetLoadingText("Creating Character"); + + m_oPersistencyModule.GetScene().GetPlayerUnit().SetPosition( COM_GetSpawnPoints().GetRandomElement() ); + + GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(m_oPersistencyModule.CreatePlayer, 200, false, characterName, m_oPersistencyModule.GetScene().GetPlayerUnit()); + } + + void NewCharacter() + { + PersistencyPrint("COMCharacterMenu::NewCharacter"); + m_IsLoadingSave = !m_IsLoadingSave; + + SetCharacter(m_Character); + } + + void UpdateCreatorSelectionsFromScene() + { + PersistencyPrint("COMCharacterMenu::UpdateCreatorSelectionsFromScene"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + m_GenderSelector.SetValue( m_CharGender ); + + m_SkinSelector.SetValue( CharacterTypeIndexToString(), true ); + m_TopSelector.SetValue( m_CharShirtIndex, true ); + m_BottomSelector.SetValue( m_CharPantsIndex, true ); + m_ShoesSelector.SetValue( m_CharShoesIndex, true ); + } + + void PreviousCharacter() + { + PersistencyPrint("COMCharacterMenu::PreviousCharacter"); + m_Character--; + SetCharacter(m_Character); + } + + void NextCharacter() + { + PersistencyPrint("COMCharacterMenu::NextCharacter"); + m_Character++; + SetCharacter(m_Character); + } + + void SetCharacter( int index ) + { + PersistencyPrint("COMCharacterMenu::SetCharacter"); + if ( m_IsLoadingSave ) + { + if ( index < 0 ) index = m_Characters.Count() - 1; + if ( index >= m_Characters.Count() ) index = 0; + m_Character = index; + + m_CharacterText.SetText( GetCharacter() ); + + SetSaveList(); + + if ( !m_Saves || m_Saves.Count() == 0 ) { + m_NoSaves = true; + } else { + m_NoSaves = false; + } + + if ( !m_NoSaves ) + { + m_Save = 0; + m_SaveSelector.LoadNewValues( m_Saves, m_Save ); + + SetSave(); + } + } else + { + UpdateCreatorSelectionsFromScene(); + } + } + + void SetSave() + { + PersistencyPrint("COMCharacterMenu::SetSave"); + string character = GetCharacter(); + string save = GetSave(); + + if ( character == "" || save == "" ) + { + return; + } + + if ( m_oPersistencyModule.GetScene() ) + { + GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(m_oPersistencyModule.GetScene().LoadFromSave, 100, false, character, save ); + } + } + + bool needsFileLoading = true; + + void UpdateInterval() + { + if ( needsFileLoading ) + { + SetCharacterList(); + SetSaveList(); + + SetCharacter( 0 ); + + if ( m_oPersistencyModule.GetScene() ) + { + m_oPersistencyModule.GetScene().SetupScene(); + } + + needsFileLoading = false; + } + + if ( m_oPersistencyModule.GetScene() ) + { + m_oPersistencyModule.GetScene().Update(); + } + + SetOptions(); + } + + override void OnShow() + { + PersistencyPrint( "COMCharacterMenu::OnShow" ); + + // GetGame().GetUIManager().CloseMenu( MENU_INGAME ); + + super.OnShow(); + + if ( COM_GetPB() && !GetGame().IsMultiplayer() ) + { + GetGame().SelectPlayer( NULL, NULL ); + } + + g_Game.SetKeyboardHandle( this ); + + needsFileLoading = true; + + GetGame().GetInput().ChangeGameFocus( 1, INPUT_DEVICE_MOUSE ); + GetGame().GetUIManager().ShowUICursor( true ); + + COM_GetMission().GetHud().Show(false); + + GetGame().GetUpdateQueue(CALL_CATEGORY_SYSTEM).Insert(this.UpdateInterval); + + PersistencyPrint( "Finished COMCharacterMenu::OnShow" ); + } + + /* + override bool CanCloseOnEscape() + { + return false; + } + */ + + override void OnHide() + { + PersistencyPrint("COMCharacterMenu::OnHide"); + GetGame().GetUIManager().ShowUICursor( false ); + GetGame().GetInput().ResetGameFocus( INPUT_DEVICE_MOUSE ); + + GetGame().GetUpdateQueue(CALL_CATEGORY_SYSTEM).Remove(this.UpdateInterval); + + + super.OnHide(); + } + + void TemporaryFix_ReloadCharacterMenu() + { + PersistencyPrint( "COMCharacterMenu::TemporaryFix_ReloadCharacterMenu" ); + GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(m_oPersistencyModule.TemporaryFix_ReloadCharacterMenu, 100, false); + + GetGame().GetInput().ChangeGameFocus( 1, INPUT_DEVICE_MOUSE ); + GetGame().GetUIManager().ShowUICursor( true ); + + COM_GetMission().GetHud().Show(false); + PersistencyPrint( "Finished COMCharacterMenu::TemporaryFix_ReloadCharacterMenu" ); + } + +/* + // This is all temporary! Waiting on a feature from the developers which should be implemented sometime soon! + override bool OnKeyDown( Widget w, int x, int y, int key ) + { + super.OnKeyDown( w, x, y, key); + + switch(key) + { + case KeyCode.KC_ESCAPE: + { + // TemporaryFix_ReloadCharacterMenu(); + return true; + } + } + + return false; + } +*/ + + override bool OnClick( Widget w, int x, int y, int button ) + { + PersistencyPrint("COMCharacterMenu::OnClick"); + if( w == m_Apply ) + { + Apply(); + return true; + } + else if ( w == m_NewCharacter ) + { + NewCharacter(); + return true; + } + else if ( w == m_Cancel ) + { + Cancel(); + return true; + } + else if ( w == m_NextCharacter ) + { + NextCharacter(); + return true; + } + else if ( w == m_PrevCharacter ) + { + PreviousCharacter(); + return true; + } + return false; + } + + override bool OnMouseButtonDown( Widget w, int x, int y, int button ) + { + PersistencyPrint("COMCharacterMenu::OnMouseButtonDown"); + if ( w == m_CharacterRotationFrame ) + { + if ( m_oPersistencyModule.GetScene() ) + m_oPersistencyModule.GetScene().CharacterRotationStart(); + return true; + } + return false; + } + + override bool OnMouseButtonUp( Widget w, int x, int y, int button ) + { + PersistencyPrint("COMCharacterMenu::OnMouseButtonUp"); + if ( m_oPersistencyModule.GetScene() ) + m_oPersistencyModule.GetScene().CharacterRotationStop(); + return false; + } + + override bool OnMouseEnter( Widget w, int x, int y ) + { + PersistencyPrint("COMCharacterMenu::OnMouseEnter"); + if( IsFocusable( w ) ) + { + ColorRed( w ); + return true; + } + return false; + } + + override bool OnMouseLeave( Widget w, Widget enterW, int x, int y ) + { + PersistencyPrint("COMCharacterMenu::OnMouseLeave"); + if( IsFocusable( w ) ) + { + ColorWhite( w, enterW ); + return true; + } + return false; + } + + override bool OnFocus( Widget w, int x, int y ) + { + PersistencyPrint("COMCharacterMenu::OnFocus"); + if( IsFocusable( w ) ) + { + ColorRed( w ); + return true; + } + return false; + } + + override bool OnFocusLost( Widget w, int x, int y ) + { + PersistencyPrint("COMCharacterMenu::OnFocusLost"); + if( IsFocusable( w ) ) + { + ColorWhite( w, null ); + return true; + } + return false; + } + + bool IsFocusable( Widget w ) + { + PersistencyPrint("COMCharacterMenu::IsFocusable"); + return ( w == m_Apply || w == m_NewCharacter || w == m_Cancel || w == m_PrevCharacter || w == m_NextCharacter ); + } + + //Coloring functions (Until WidgetStyles are useful) + void ColorRed( Widget w ) + { + PersistencyPrint("COMCharacterMenu::ColorRed"); + SetFocus( w ); + + TextWidget text = TextWidget.Cast(w.FindWidget( w.GetName() + "_text" ) ); + TextWidget text2 = TextWidget.Cast(w.FindWidget( w.GetName() + "_text_1" ) ); + ImageWidget image = ImageWidget.Cast( w.FindWidget( w.GetName() + "_image" ) ); + + if( text ) + { + text.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + + if( text2 ) + { + text2.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + + if( image ) + { + image.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + } + + void ColorWhite( Widget w, Widget enterW ) + { + PersistencyPrint("COMCharacterMenu::ColorWhite"); + #ifdef PLATFORM_WINDOWS + SetFocus( null ); + #endif + + TextWidget text = TextWidget.Cast(w.FindWidget( w.GetName() + "_text" ) ); + TextWidget text2 = TextWidget.Cast(w.FindWidget( w.GetName() + "_text_1" ) ); + ImageWidget image = ImageWidget.Cast( w.FindWidget( w.GetName() + "_image" ) ); + + if( text ) + { + text.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + + if( text2 ) + { + text2.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + + if( image ) + { + image.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + } + + bool IsValidSave( string name, FileAttr attributes ) + { + PersistencyPrint( "Found: " + BASE_PLAYER_SAVE_DIR + "\\" + GetCharacter() + "\\" + name + " as a " + COM_FileAttributeToString( attributes ) ); + + string extenstion = ".json"; + int strLength = name.Length(); + + if ( name == extenstion ) return false; + + if ( (attributes & FileAttr.DIRECTORY ) ) return false; + + if ( name == "" ) return false; + + PersistencyPrint( "Loaded" ); + + return true; + } + + bool IsValidCharacter( string name, FileAttr attributes ) + { + PersistencyPrint( "Found: " + BASE_PLAYER_SAVE_DIR + "\\" + name + " as a " + COM_FileAttributeToString( attributes ) ); + + if ( ! (attributes & FileAttr.DIRECTORY ) ) return false; + + if ( name == "" ) return false; + + return true; + } + + void SetSaveList() + { + PersistencyPrint("COMCharacterMenu::SetSaveList"); + m_Saves.Clear(); + + if ( !IsValidCharacter( GetCharacter(), FileAttr.DIRECTORY ) || !m_CanLoadSave ) return; + + string sName = ""; + FileAttr oFileAttr = FileAttr.INVALID; + FindFileHandle oFileHandle = FindFile(BASE_PLAYER_SAVE_DIR + "\\" + GetCharacter() + "\\*.json", sName, oFileAttr, FindFileFlags.ALL); + + if (sName != "") + { + if ( IsValidSave( sName, oFileAttr ) ) + { + m_Saves.Insert(sName.Substring(0, sName.Length() - 5)); + } + + while (FindNextFile(oFileHandle, sName, oFileAttr)) + { + if ( IsValidSave( sName, oFileAttr )) + { + m_Saves.Insert(sName.Substring(0, sName.Length() - 5)); + } + } + } + } + + void SetCharacterList() + { + PersistencyPrint("COMCharacterMenu::SetCharacterList"); + m_Characters.Clear(); + + string sName = ""; + FileAttr oFileAttr = FileAttr.INVALID; + FindFileHandle oFileHandle = FindFile(BASE_PLAYER_SAVE_DIR + "\\*", sName, oFileAttr, FindFileFlags.ALL); + + int index = 0; + + if (sName != "") + { + if ( IsValidCharacter( sName, oFileAttr )) + { + m_Characters.Insert(sName); + index++; + } + + while (FindNextFile(oFileHandle, sName, oFileAttr)) + { + if ( IsValidCharacter( sName, oFileAttr ) ) + { + m_Characters.Insert(sName); + index++; + } + } + } + + if ( index == 0 ) + { + m_IsLoadingSave = false; + m_CanLoadSave = false; + } else { + m_CanLoadSave = true; + } + } + + string GetCharacter() + { + PersistencyPrint("COMCharacterMenu::GetCharacter"); + if ( !m_Characters || m_Characters.Count() == 0 ) return ""; + + return m_Characters.Get( m_Character ); + } + + string GetSave() + { + PersistencyPrint("COMCharacterMenu::GetSave"); + if ( !m_Saves || m_Saves.Count() == 0 ) return ""; + + return m_Saves.Get( m_Save ); + } + + void SaveChanged() + { + PersistencyPrint("COMCharacterMenu::SaveChanged"); + m_Save = m_SaveSelector.GetValue(); + + SetSave(); + } + + void SetGender( string gender ) + { + PersistencyPrint("COMCharacterMenu::SetGender"); + if ( m_oPersistencyModule.GetScene() ) + { + switch ( gender ) + { + case "Female": + { + m_CharGender = CharGender.FEMALE; + m_SkinSelector.LoadNewValues( m_CharPersonalityFemaleList, 0 ); + break; + } + case "Male": + { + m_CharGender = CharGender.MALE; + m_SkinSelector.LoadNewValues( m_CharPersonalityMaleList, 0 ); + break; + } + } + } + m_SkinSelector.SetRandomValue(); + } + + void GenderChanged() + { + PersistencyPrint("COMCharacterMenu::GenderChanged"); + SetGender( m_GenderSelector.GetStringValue() ); + } + + void SkinChanged() + { + PersistencyPrint("COMCharacterMenu::SkinChanged"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + m_oPersistencyModule.GetScene().SetCharacter( m_SkinSelector.GetStringValue() ); + + TopChanged(); + BottomChanged(); + ShoesChanged(); + + GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater( m_oPersistencyModule.GetScene().ResetIntroCamera, 100 ); + } + + void TopChanged() + { + PersistencyPrint("COMCharacterMenu::TopChanged"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + m_oPersistencyModule.GetScene().SetAttachment( m_TopSelector.GetStringValue(), InventorySlots.BODY ); + } + + void BottomChanged() + { + PersistencyPrint("COMCharacterMenu::BottomChanged"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + m_oPersistencyModule.GetScene().SetAttachment( m_BottomSelector.GetStringValue(), InventorySlots.LEGS ); + } + + void ShoesChanged() + { + PersistencyPrint("COMCharacterMenu::ShoesChanged"); + if ( !m_oPersistencyModule.GetScene() ) + { + return; + } + + m_oPersistencyModule.GetScene().SetAttachment( m_ShoesSelector.GetStringValue(), InventorySlots.FEET ); + } + + override int GetID() + { + return MENU_MAIN; + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterSave.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterSave.c new file mode 100644 index 00000000..ea17edef --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/COMCharacterSave.c @@ -0,0 +1,242 @@ +class COMCharacterSaveEventHandler extends ScriptedWidgetEventHandler +{ + ref COMCharacterSave m_CharacterSave; + + void COMCharacterSaveEventHandler( COMCharacterSave characterSave ) + { + Print( "COMCharacterSaveEventHandler::COMCharacterSaveEventHandler" ); + m_CharacterSave = characterSave; + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + Print( "COMCharacterSaveEventHandler::OnClick" ); + return m_CharacterSave.OnClick( w, x, y, button ); + } + + override bool OnMouseEnter( Widget w, int x, int y ) + { + Print( "COMCharacterSaveEventHandler::OnMouseEnter" ); + return m_CharacterSave.OnMouseEnter( w, x, y ); + } + + override bool OnMouseLeave( Widget w, Widget enterW, int x, int y ) + { + Print( "COMCharacterSaveEventHandler::OnMouseLeave" ); + return m_CharacterSave.OnMouseLeave( w, enterW, x, y ); + } + + override bool OnFocus( Widget w, int x, int y ) + { + Print( "COMCharacterSaveEventHandler::OnFocus" ); + return m_CharacterSave.OnFocus( w, x, y ); + } + + override bool OnFocusLost( Widget w, int x, int y ) + { + Print( "COMCharacterSaveEventHandler::OnFocusLost" ); + return m_CharacterSave.OnFocusLost( w, x, y ); + } + + override bool OnModalResult(Widget w, int x, int y, int code, int result) + { + Print( "COMCharacterSaveEventHandler::OnModalResult" ); + return m_CharacterSave.OnModalResult( w, x, y, code, result ); + } +} + +class COMCharacterSave extends UIScriptedMenu +{ + protected ref PersistencyModule m_oPersistencyModule; + protected ref COMCharacterSaveEventHandler m_COMCharacterSaveEventHandler; + + protected ButtonWidget m_Apply; + protected EditBoxWidget m_SaveText; + + void COMCharacterSave( PersistencyModule oPersistencyModule ) + { + m_oPersistencyModule = oPersistencyModule; + + m_COMCharacterSaveEventHandler = new COMCharacterSaveEventHandler(this); + } + + void ~COMCharacterSave() + { + } + + Widget InitWithParent( Widget parent ) + { + Print( "COMCharacterSave::InitWithParent" ); + string layoutFile = "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\layouts\\COMCharacterSave.layout"; + if ( parent ) + { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( layoutFile, parent ); + } + else { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( layoutFile ); + } + layoutRoot.SetHandler( m_COMCharacterSaveEventHandler ); + + m_Apply = ButtonWidget.Cast( layoutRoot.FindAnyWidget( "character_save_button_button" ) ); + + m_SaveText = EditBoxWidget.Cast( layoutRoot.FindAnyWidget( "general_save_setting_text" ) ); + + return layoutRoot; + } + + override Widget Init() + { + Print( "COMCharacterSave::Init" ); + return InitWithParent( NULL ); + } + + void Save() + { + Print( "COMCharacterSave::Save" ); + + bool canSave = false; + + string saveName = m_SaveText.GetText(); + string characterName = m_oPersistencyModule.GetLoadedCharacter(); + + if ( saveName != "" ) + { + if ( !FileExist(BASE_PLAYER_SAVE_DIR + "\\" + characterName + "\\" + saveName + ".json") ) + { + canSave = true; + } else { + GetGame().GetUIManager().ShowDialog("WARNING", "Do you wish to overwrite your current save \"" + saveName + "\"?", 10, DBT_YESNO, DBB_NO, DMT_WARNING, this); + canSave = false; + } + } else { + canSave = false; + } + + if ( canSave ) + { + m_oPersistencyModule.SavePlayer(saveName); + COM_GetMission().Continue(); + } + } + + override bool OnModalResult(Widget w, int x, int y, int code, int result) + { + super.OnModalResult(w, x, y, code, result); + + if ( code == 10 && result == DBB_YES ) + { + m_oPersistencyModule.SavePlayer(m_SaveText.GetText()); + COM_GetMission().Continue(); + return true; + } + + return false; + } + + bool IsFocusable( Widget w ) + { + return ( w == m_Apply ); + } + + override bool OnClick( Widget w, int x, int y, int button ) + { + if( w == m_Apply ) + { + Save(); + return true; + } + return false; + } + + override bool OnMouseEnter( Widget w, int x, int y ) + { + if( IsFocusable( w ) ) + { + ColorRed( w ); + return true; + } + return false; + } + + override bool OnMouseLeave( Widget w, Widget enterW, int x, int y ) + { + if( IsFocusable( w ) ) + { + ColorWhite( w, enterW ); + return true; + } + return false; + } + + override bool OnFocus( Widget w, int x, int y ) + { + if( IsFocusable( w ) ) + { + ColorRed( w ); + return true; + } + return false; + } + + override bool OnFocusLost( Widget w, int x, int y ) + { + if( IsFocusable( w ) ) + { + ColorWhite( w, null ); + return true; + } + return false; + } + + //Coloring functions (Until WidgetStyles are useful) + void ColorRed( Widget w ) + { + SetFocus( w ); + + TextWidget text = TextWidget.Cast(w.FindWidget( w.GetName() + "_text" ) ); + TextWidget text2 = TextWidget.Cast(w.FindWidget( w.GetName() + "_text_1" ) ); + ImageWidget image = ImageWidget.Cast( w.FindWidget( w.GetName() + "_image" ) ); + + if( text ) + { + text.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + + if( text2 ) + { + text2.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + + if( image ) + { + image.SetColor( ARGB( 255, 255, 0, 0 ) ); + } + } + + void ColorWhite( Widget w, Widget enterW ) + { + #ifdef PLATFORM_WINDOWS + SetFocus( null ); + #endif + + TextWidget text = TextWidget.Cast(w.FindWidget( w.GetName() + "_text" ) ); + TextWidget text2 = TextWidget.Cast(w.FindWidget( w.GetName() + "_text_1" ) ); + ImageWidget image = ImageWidget.Cast( w.FindWidget( w.GetName() + "_image" ) ); + + if( text ) + { + text.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + + if( text2 ) + { + text2.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + + if( image ) + { + image.SetColor( ARGB( 255, 255, 255, 255 ) ); + } + } + +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/LoadText.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/LoadText.c new file mode 100644 index 00000000..0baf5180 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/LoadText.c @@ -0,0 +1,73 @@ +class LoadText extends UIScriptedMenu +{ + private TextWidget bgText; + private TextWidget fgText; + + void LoadText() + { + } + + void ~LoadText() + { + } + + Widget InitWithParent( Widget parent ) + { + Print( "LoadText::InitWithParent" ); + + string layoutFile = "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\layouts\\LoadText.layout"; + if ( parent ) + { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( layoutFile, parent ); + } + else { + layoutRoot = GetGame().GetWorkspace().CreateWidgets( layoutFile ); + } + + bgText = TextWidget.Cast( layoutRoot.FindAnyWidget( "Bg_LoadText_TextWidget" ) ); + fgText = TextWidget.Cast( layoutRoot.FindAnyWidget( "Fg_LoadText_TextWidget" ) ); + + return layoutRoot; + } + + override Widget Init() + { + Print( "LoadText::Init" ); + return InitWithParent( NULL ); + } + + void SetText( string text ) + { + if ( bgText && fgText ) + { + bgText.SetText( text ); + fgText.SetText( text ); + + bgText.SetColor(0xFF000000); + fgText.SetColor(0xFFFFFFFF); + } + } +} + +ref LoadText g_LoadText; + +static void SetLoadingText( string text ) +{ + CloseLoadingText(); + + if ( !g_LoadText ) + { + g_LoadText = new LoadText; + } + + GetGame().GetUIManager().ShowScriptedMenu( g_LoadText , NULL ); + + g_LoadText.SetText( text ); +} + +static void CloseLoadingText() +{ + if ( !g_LoadText ) return; + + GetGame().GetUIManager().HideScriptedMenu( g_LoadText ); +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterMenu.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterMenu.layout new file mode 100644 index 00000000..62de5377 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterMenu.layout @@ -0,0 +1,927 @@ +FrameWidgetClass character_creation_root { + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + GridSpacerWidgetClass character_root { + visible 1 + ignorepointer 1 + position 80 80 + size 480 200 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + priority 3 + Padding 0 + Margin 0 + "Size To Content V" 1 + Columns 1 + Rows 2 + { + PanelWidgetClass character_header { + visible 1 + ignorepointer 1 + color 0 0 0 0.9608 + position 0 0 + size 480 36 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style DayZDefaultPanelTop + { + ButtonWidgetClass prev_character { + visible 1 + color 1 1 1 0 + size 38 38 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + fixaspect fixwidth + priority 1 + style Empty + "no focus" 0 + font "gui/fonts/sdf_MetronLight24" + { + ImageWidgetClass prev_character_image { + inheritalpha 0 + ignorepointer 1 + size 0.75 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + image0 "set:dayz_gui image:arrow_left" + mode blend + "src alpha" 1 + } + } + } + TextWidgetClass character_text { + visible 1 + ignorepointer 1 + position 0 0 + size 480 0.5 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 0 + style Normal + text "CHARACTER" + font "gui/fonts/sdf_MetronBook72" + "exact text" 0 + "text halign" center + "text valign" center + } + ButtonWidgetClass next_character { + visible 1 + color 1 1 1 0 + size 38 38 + halign right_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + fixaspect fixwidth + priority 1 + style Empty + "no focus" 0 + font "gui/fonts/sdf_MetronLight24" + { + ImageWidgetClass next_character_image { + ignorepointer 1 + size 0.75 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + image0 "set:dayz_gui image:arrow_right" + mode blend + "src alpha" 1 + } + } + } + } + } + GridSpacerWidgetClass character_save { + ignorepointer 1 + color 0 0 0 0.8627 + position 0 36 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style DayZDefaultPanelBottom + Padding 0 + Margin 10 + "Size To Content H" 1 + "Size To Content V" 1 + Columns 1 + Rows 1 + { + ButtonWidgetClass character_save_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_name_button" + "next down" "character_gender_button" + { + GridSpacerWidgetClass character_save_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_save_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_save_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "SAVE" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_save_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_save_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + { + TextWidgetClass character_save_no_saves_text { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "ERROR: NO SAVES FOUND" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + } + } + } + } + GridSpacerWidgetClass character_content { + ignorepointer 1 + color 0 0 0 0.8627 + position 0 36 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style DayZDefaultPanelBottom + Padding 0 + Margin 10 + "Size To Content H" 1 + "Size To Content V" 1 + Columns 1 + Rows 1 + { + ButtonWidgetClass character_name_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_shoes_button" + "next down" "character_gender_button" + { + GridSpacerWidgetClass general_name_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass general_name_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass general_name_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "NAME" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass general_name_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + EditBoxWidgetClass general_name_setting_text { + ignorepointer 0 + position 0 0 + size 1 0.6 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "exact text" 0 + font "gui/fonts/sdf_MetronLight24" + } + } + } + } + } + PanelWidgetClass general_name_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_save_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_save_button" + "next down" "character_head_button" + { + GridSpacerWidgetClass character_gender_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_gender_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_gender_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "GENDER" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_gender_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_gender_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_head_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_gender_button" + "next down" "character_top_button" + { + GridSpacerWidgetClass character_head_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_head_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_head_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "HEAD" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_head_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_head_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_top_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_head_button" + "next down" "character_bottom_button" + { + GridSpacerWidgetClass character_top_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_top_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_top_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "TOP" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_top_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_top_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_bottom_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_top_button" + "next down" "character_shoes_button" + { + GridSpacerWidgetClass character_bottom_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_bottom_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_bottom_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "BOTTOM" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_bottom_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_bottom_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_shoes_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_bottom_button" + "next down" "character_name_button" + { + GridSpacerWidgetClass character_shoes_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_shoes_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_shoes_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "SHOES" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_shoes_setting_option { + ignorepointer 1 + position 0 0 + size 0.6 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + } + } + } + PanelWidgetClass character_shoes_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + } + } + } + } + ImageWidgetClass vignette { + visible 1 + ignorepointer 0 + color 0 0 0 0.902 + position 0 0 + size 1.6 0.9 + halign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + fixaspect outside + priority 1 + imageTexture "{E6B3EF816E067499}Gui/textures/inventory_bgvignette.edds" + mode blend + "src alpha" 1 + "no wrap" 1 + stretch 1 + filter 0 + nocache 1 + } + WrapSpacerWidgetClass play_panel_root { + visible 1 + ignorepointer 1 + position 80 80 + size 340 230 + halign right_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + priority 3 + "Ignore invisible" 0 + Padding 8 + Margin 0 + "Size To Content H" 1 + content_halign center + content_valign bottom + { + ButtonWidgetClass apply { + color 0 0 0 0.7843 + position 0 0 + size 1 84 + halign center_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style DayZDefaultButton + "no focus" 0 + "next left" "" + "next right" "" + "next up" "new_character" + "next down" "cancel" + text "PLAY" + text_proportion 0.8 + font "gui/fonts/sdf_MetronLight72" + switch normal + } + ButtonWidgetClass new_character { + color 0 0 0 0.7843 + position 0 0 + size 1 38 + halign center_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style DayZDefaultButton + "no focus" 0 + "next left" "" + "next right" "" + "next up" "apply" + "next down" "cancel" + text "NEW CHARACTER" + text_proportion 0.55 + font "gui/fonts/sdf_MetronLight24" + switch normal + } + ButtonWidgetClass cancel { + color 0 0 0 0.7843 + position 0 0 + size 1 38 + halign center_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style DayZDefaultButton + "no focus" 0 + "next left" "" + "next right" "" + "next up" "apply" + "next down" "new_character" + text "EXIT" + text_proportion 0.55 + font "gui/fonts/sdf_MetronLight24" + switch normal + } + PanelWidgetClass character { + visible 0 + ignorepointer 0 + color 0 0 0 0.7843 + position 0 0 + size 1 38 + halign center_ref + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style DayZDefaultPanel + } + } + } + FrameWidgetClass character_rotation_frame { + size 0.3 1 + halign center_ref + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + priority 2 + } + TextWidgetClass version { + visible 1 + clipchildren 0 + ignorepointer 1 + position 80 60 + size 180 14 + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + priority 2 + text "#main_menu_version" + font "gui/fonts/sdf_MetronLight24" + "exact text" 0 + "text valign" center + } + TextWidgetClass copyright { + visible 1 + clipchildren 0 + position 80 40 + size 600 14 + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + priority 2 + text "#copyright_disclamer" + font "gui/fonts/sdf_MetronLight24" + "exact text" 0 + "text valign" center + } + TextWidgetClass copyright2 { + visible 1 + clipchildren 0 + position 80 20 + size 600 14 + valign bottom_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + priority 2 + text "This was modified by the Community Offline Mode team" + font "gui/fonts/sdf_MetronLight24" + "exact text" 0 + "text valign" center + } + TextWidgetClass CharacterCreationTextWidget { + ignorepointer 1 + position 80 80 + size 0.35 50 + halign right_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + priority 1 + style Normal + text "CHARACTER MENU" + font "gui/fonts/sdf_MetronLight72" + "text color" 0.8157 0.1255 0.7843 1 + "exact text" 0 + "size to text h" 0 + "size to text v" 1 + "text halign" right + "text valign" center + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterSave.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterSave.layout new file mode 100644 index 00000000..d7f6ed5e --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/COMCharacterSave.layout @@ -0,0 +1,191 @@ +FrameWidgetClass character_save_root { + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + GridSpacerWidgetClass character_root { + visible 1 + ignorepointer 1 + position 80 80 + size 480 200 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + halign right_ref + priority 3 + Padding 0 + Margin 0 + "Size To Content V" 1 + Columns 1 + Rows 2 + { + PanelWidgetClass character_header { + visible 1 + ignorepointer 1 + color 0 0 0 0.9608 + position 0 0 + size 480 36 + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 1 + style DayZDefaultPanelTop + { + TextWidgetClass character_text { + visible 1 + ignorepointer 1 + position 0 0 + size 480 0.5 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 1 + vexactsize 0 + style Normal + text "CHARACTER" + font "gui/fonts/sdf_MetronBook72" + "exact text" 0 + "text halign" center + "text valign" center + } + } + } + GridSpacerWidgetClass character_content { + ignorepointer 1 + color 0 0 0 0.8627 + position 0 36 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style DayZDefaultPanelBottom + Padding 0 + Margin 10 + "Size To Content H" 1 + "Size To Content V" 1 + Columns 1 + Rows 1 + { + ButtonWidgetClass character_save_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + style Empty + "next up" "character_save_button_button" + "next down" "character_save_button_button" + { + GridSpacerWidgetClass character_save_setting { + ignorepointer 1 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "no focus" 1 + Padding 0 + Margin 0 + "Size To Content H" 1 + Columns 2 + Rows 1 + { + FrameWidgetClass character_save_setting_panel { + ignorepointer 1 + position 0 0 + size 0.4 0.6 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + TextWidgetClass character_save_setting_label { + ignorepointer 1 + size 1 0.55 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + text "SAVE" + font "gui/fonts/sdf_MetronLight24" + "text offset" 8 0 + "exact text" 0 + "exact text size" 18 + "text valign" center + } + } + } + FrameWidgetClass character_save_setting_option { + ignorepointer 1 + position 0 0 + size 0.8 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + { + EditBoxWidgetClass general_save_setting_text { + ignorepointer 0 + position 0 0 + size 1 0.6 + valign center_ref + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + "exact text" 0 + font "gui/fonts/sdf_MetronLight24" + } + } + } + } + } + PanelWidgetClass character_save_setting_disable { + visible 0 + ignorepointer 1 + color 0.1569 0.1569 0.1569 0.902 + position 0 0 + size 1 1 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 0 + style rover_sim_colorable + } + } + } + ButtonWidgetClass character_save_button_button { + position 0 0 + size 1 30 + hexactpos 1 + vexactpos 1 + hexactsize 0 + vexactsize 1 + "next up" "character_save_button" + "next down" "character_save_button" + visible 1 + inheritalpha 1 + scriptclass "" + style MainMenu + text "SAVE CHARACTER AS" + text_offset 10 -1 + text_proportion 0.7 + text_halign center + font "gui/fonts/sdf_MetronBook24" + "disabled text color" 0.3373 0.3373 0.3373 1 + switch normal + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/LoadText.layout b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/LoadText.layout new file mode 100644 index 00000000..44f0a19b --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/layouts/LoadText.layout @@ -0,0 +1,50 @@ +FrameWidgetClass LoadText_Root_Widget { + position 0.5 0.5 + size 1 26 + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 1 + { + TextWidgetClass Bg_LoadText_TextWidget { + clipchildren 0 + position 0 0 + size 1 26 + valign center + halign center + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 1 + text "" + font "gui/fonts/sdf_MetronLight24" + "outline size" 1 + "outline color" 0 0 0 0.3922 + "shadow size" 4 + "shadow color" 0 0 0 1 + "exact text" 0 + "text valign" center + "text halign" center + }, + TextWidgetClass Fg_LoadText_TextWidget { + clipchildren 0 + position 0 0 + size 1 26 + valign center + halign center + hexactpos 0 + vexactpos 0 + hexactsize 0 + vexactsize 1 + text "" + font "gui/fonts/sdf_MetronLight24" + "outline size" 1 + "outline color" 0 0 0 0.3922 + "shadow size" 4 + "shadow color" 0 0 0 1 + "exact text" 0 + "text valign" center + "text halign" center + } + } +} \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/scenes/COMPersistencyScene.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/scenes/COMPersistencyScene.c new file mode 100644 index 00000000..1cac8649 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/gui/scenes/COMPersistencyScene.c @@ -0,0 +1,378 @@ +enum CharGender +{ + MALE, FEMALE +} + +class COMPersistencyScene: Managed +{ + CharGender m_Gender; + int m_LastShavedSeconds; + int m_currentCharacterID; + +// protected ref EntityAnimEndEventHandler m_anim_end_event_handler; + + protected CameraTool m_CameraTool; + protected PlayerBase m_DemoUnit; + protected vector m_DemoPos; + protected vector m_DemoRot; + protected vector m_CameraTrans[4]; + protected vector m_Target; + + protected bool m_EnableClick; + protected bool m_RotatingCamera; + protected bool m_RotatingCharacter; + protected int m_RotatingCharacterMouseX; + protected int m_RotatingCharacterMouseY; + protected float m_RotatingCharacterRot; + protected float m_Radius; + protected float m_Radius_original; + protected float m_DiffX; + protected float m_DeltaX; + protected float m_DeltaZ; + + void COMPersistencyScene() + { + PersistencyPrint("COMPersistencyScene::COMPersistencyScene"); + SetClickEnable( true ); + } + + void ~COMPersistencyScene() + { + PersistencyPrint("COMPersistencyScene::~COMPersistencyScene"); + if ( m_DemoUnit ) + { + GetGame().ObjectDelete(m_DemoUnit); + } + + CameraTool ct = COM_GetModuleManager().GetModuleByName("CameraTool"); + + if ( ct ) + { + ct.DisableCamera(); + ct.EnableCamera(); + + ct.DisableCamera(); + } + } + + void SetupScene() + { + PersistencyPrint("COMPersistencyScene::SetupScene"); + m_currentCharacterID = -1; + m_DemoPos = "0 0 0"; + m_DemoRot = "0 0 0"; + m_LastShavedSeconds = 0; + + string worldName; + g_Game.GetWorldName(worldName); + string root_path = "cfgCharacterScenes " + worldName; + + int count = g_Game.ConfigGetChildrenCount(root_path); + int index = Math.RandomInt(0, count - 1); + string childName; + g_Game.ConfigGetChildName(root_path, index, childName); + + string scene_path = root_path + " " + childName; + + SetupWorld( root_path, scene_path ); + + // Don't like it, removing it. + // SetupWeather( root_path, scene_path ); + + SetupCamera( root_path, scene_path ); + } + + void SetupCamera( string root_path, string scene_path ) + { + PersistencyPrint("COMPersistencyScene::SetupCamera"); + float fov = GetGame().ConfigGetFloat(scene_path + " fov"); + + m_Target = SwapYZ(g_Game.ConfigGetVector(scene_path + " target")); + vector position = SwapYZ(g_Game.ConfigGetVector(scene_path + " position")); + + Module possibleModule = COM_GetModuleManager().GetModuleByName("CameraTool"); + + m_CameraTool = CameraTool.Cast( possibleModule ); + + if ( !m_CameraTool ) { + PersistencyPrint( "WTF, the camera doesn't exist shitbag! You dun fucked up in here." ); + } + + m_CameraTool.EnableCamera( true ); + + m_CameraTool.GetCamera().SetPosition( COM_SnapToGround( position ) ); + + Math3D.MatrixIdentity4( m_CameraTrans ); + + if ( m_CameraTool.GetCamera() ) + { + m_CameraTool.GetCamera().LookAt( m_Target ); + m_CameraTool.GetCamera().SetFOV( fov ); + m_CameraTool.GetCamera().SetFocus(5.0, 0.0); //5.0, 1.0 + + m_CameraTool.GetCamera().SetActive(true); + + Math3D.DirectionAndUpMatrix( m_Target - COM_SnapToGround(position), "0 1 0", m_CameraTrans ); + + m_CameraTrans[3] = m_CameraTool.GetCamera().GetPosition(); + + m_DemoPos = Vector( 0.685547, -0.988281, 3.68823 ).Multiply4( m_CameraTrans ); + + m_DemoPos = Vector( m_DemoPos[0], GetGame().SurfaceY( m_DemoPos[0], m_DemoPos[2] ), m_DemoPos[2] ); + + m_DemoRot = "0 0 0"; + + vector camDirection = m_CameraTool.GetCamera().GetPosition() - m_DemoPos; + m_DemoRot[0] = Math.Atan2( camDirection[0], camDirection[2] ) * Math.RAD2DEG; + } + + m_DeltaX = Math.AbsFloat(m_DemoPos[0] - m_CameraTool.GetCamera().GetPosition()[0]); + m_DeltaZ = Math.AbsFloat(m_DemoPos[2] - m_CameraTool.GetCamera().GetPosition()[2]); + if (!m_Radius || m_Radius == 0) + { + m_Radius = Math.Sqrt (Math.Pow(m_DeltaX, 2) + Math.Pow(m_DeltaZ, 2)); + m_Radius_original = m_Radius; + } + } + + void SetupWorld( string root_path, string scene_path ) + { + PersistencyPrint("COMPersistencyScene::SetupWorld"); + TIntArray date = new TIntArray; + GetGame().ConfigGetIntArray(scene_path + " date", date); + + World world = GetGame().GetWorld(); + + if (world && date.Count() >= 5) + { + world.SetDate(date.Get(0), date.Get(1), date.Get(2), date.Get(3), date.Get(4)); + } + } + + void SetupWeather( string root_path, string scene_path ) + { + PersistencyPrint("COMPersistencyScene::SetupWeather"); + float overcast = GetGame().ConfigGetFloat(scene_path + " overcast"); + float rain = GetGame().ConfigGetFloat(scene_path + " rain"); + float fog = GetGame().ConfigGetFloat(scene_path + " fog"); + + float windspeed = -1; + if ( GetGame().ConfigIsExisting(scene_path + " windspeed") ) + windspeed = GetGame().ConfigGetFloat(scene_path + " windspeed"); + + TFloatArray storm = new TFloatArray; + GetGame().ConfigGetFloatArray(scene_path + " storm", storm); + + Weather weather = g_Game.GetWeather(); + weather.GetOvercast().SetLimits( overcast, overcast ); + weather.GetRain().SetLimits( rain, rain ); + weather.GetFog().SetLimits( fog, fog ); + + weather.GetOvercast().Set( overcast, 0, 0); + weather.GetRain().Set( rain, 0, 0); + weather.GetFog().Set( fog, 0, 0); + + if ( storm.Count() == 3 ) + { + weather.SetStorm(storm.Get(0),storm.Get(1),storm.Get(2)); + } + + if ( windspeed != -1 ) + { + weather.SetWindSpeed(windspeed); + weather.SetWindMaximumSpeed(windspeed); + weather.SetWindFunctionParams(1,1,1); + } + } + + void SetClickEnable( bool enable ) + { + PersistencyPrint("COMPersistencyScene::SetClickEnable"); + m_EnableClick = enable; + } + + bool IsClickEnabled() + { + PersistencyPrint("COMPersistencyScene::IsClickEnabled"); + return m_EnableClick; + } + + void ResetIntroCamera() + { + PersistencyPrint("COMPersistencyScene::ResetIntroCamera"); + GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater( this.ResetPosition, 250 ); + + if ( m_DemoUnit ) + { + m_CameraTool.SetTarget(m_DemoUnit); + m_CameraTool.FollowTarget(); + } + } + + void SetAttachment(string type, int slot) + { + PersistencyPrint("COMPersistencyScene::SetAttachment"); + if (!m_DemoUnit) return; + + g_Game.ObjectDelete(m_DemoUnit.GetInventory().FindAttachment(slot)); + EntityAI entity; + Class.CastTo(entity, g_Game.CreateObject(type, "0 2000 0", true)); + if (entity) + { + m_DemoUnit.LocalTakeEntityAsAttachmentEx(entity, slot); + } + } + + void LoadFromSave(string character, string save) + { + PersistencyPrint("COMPersistencyScene::LoadFromSave"); + if ( m_DemoUnit ) + { + GetGame().ObjectDelete(m_DemoUnit); + m_DemoUnit = NULL; + } + + m_DemoUnit = CharacterLoad.LoadPlayer( character, save, true ); + + if (m_DemoUnit) + { + m_DemoUnit.SetPosition( COM_SnapToGround( Vector( m_DemoPos[0], m_DemoPos[1], m_DemoPos[2] )) ); + m_DemoUnit.PlaceOnSurface(); + m_DemoUnit.SetOrientation(m_DemoRot); + } + + ResetIntroCamera(); + } + + void SetCharacter(string type) + { + PersistencyPrint("COMPersistencyScene::SetCharacter"); + if ( m_DemoUnit ) + { + GetGame().ObjectDelete(m_DemoUnit); + // m_DemoUnit = NULL; + } + + g_Game.PreloadObject(type, 1.0); + + m_DemoUnit = PlayerBase.Cast( GetGame().CreateObject( type, "0 0 0", true, true, true ) ); + + if (m_DemoUnit) + { + m_DemoUnit.SetPosition( COM_SnapToGround( Vector( m_DemoPos[0], m_DemoPos[1], m_DemoPos[2] )) ); + m_DemoUnit.PlaceOnSurface(); + m_DemoUnit.SetOrientation(m_DemoRot); +// m_DemoUnit.SetEventHandler(m_anim_end_event_handler); + m_DemoUnit.SetLastShavedSeconds(m_LastShavedSeconds); + + string lvalue = ""; + m_DemoUnit.StatGetCounter("playtime", lvalue); + + PluginLifespan module_lifespan; + Class.CastTo(module_lifespan, PluginLifespan.Cast( GetPlugin( PluginLifespan ) )); + module_lifespan.UpdateLifespanParam( m_DemoUnit, lvalue, true ); + } + + ResetIntroCamera(); + } + + void ResetPosition() + { + PersistencyPrint("COMPersistencyScene::ResetPosition"); + if (m_DemoUnit) + { + m_DemoUnit.SetPosition(m_DemoPos); + m_DemoUnit.SetOrientation(m_DemoRot); + } + SetClickEnable( true ); + } + + bool IsRotatingCharacter() + { + PersistencyPrint("COMPersistencyScene::IsRotatingCharacter"); + return m_RotatingCharacter; + } + + void CharacterRotationStart() + { + PersistencyPrint("COMPersistencyScene::CharacterRotationStart"); + m_RotatingCharacter = true; + g_Game.GetMousePos(m_RotatingCharacterMouseX, m_RotatingCharacterMouseY); + if (m_DemoUnit) + { + m_RotatingCharacterRot = m_DemoRot[0]; + } + } + + void CharacterRotationStop() + { + PersistencyPrint("COMPersistencyScene::CharacterRotationStop"); + if (m_RotatingCharacter) + { + m_RotatingCharacter = false; + } + } + + void CharacterRotate() + { + PersistencyPrint("COMPersistencyScene::CharacterRotate"); + int actual_mouse_x; + int actual_mouse_y; + float coef; + g_Game.GetMousePos(actual_mouse_x, actual_mouse_y); + + m_DiffX = m_RotatingCharacterMouseX - actual_mouse_x; + + if (m_DemoUnit) + { + coef = ( m_RotatingCharacterRot + (m_DiffX * 0.5) ) / 360; + coef = coef - Math.Floor(coef); + + m_DemoRot[0] = coef * 360; + + m_DemoUnit.SetOrientation(m_DemoRot); + } + } + + void Update() + { + // m_CameraTool.UpdateCamera(); + + m_CameraTool.GetCamera().LookAt(m_Target); + + if (m_DemoUnit && m_RotatingCharacter) + { + CharacterRotate(); + } + } + + vector SwapYZ(vector vec) + { + PersistencyPrint("COMPersistencyScene::SwapYZ"); + vector tmp; + tmp[0] = vec[0]; + tmp[1] = vec[2]; + tmp[2] = vec[1]; + + return tmp; + } + + vector COM_SnapToGround(vector pos) + { + PersistencyPrint("COMPersistencyScene::SnapToGround"); + + float pos_x = pos[0]; + float pos_z = pos[2]; + float pos_y = GetGame().SurfaceY(pos_x, pos_z); + vector tmp_pos = Vector(pos_x, pos_y, pos_z); + tmp_pos[1] = tmp_pos[1] + pos[1]; + + return tmp_pos; + } + + PlayerBase GetPlayerUnit() + { + PersistencyPrint("COMPersistencyScene::GetPlayerUnit"); + return m_DemoUnit; + } +}; \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/module.c b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/module.c new file mode 100644 index 00000000..2eeaa3ee --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/core/modules/Persistency/module.c @@ -0,0 +1,60 @@ +#ifndef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" +#endif +/* + Define used for optional compilations +*/ +#define MODULE_PERSISTENCY + +// #define MODULE_PERSISTENCY_IGNORE_LOADING + +int MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER = 4842; +int MODULE_PERSISTENCY_WIDGET_LOAD_CHARACTER = 4843; +int MODULE_PERSISTENCY_WIDGET_SAVE_CHARACTER_PANEL = 4844; + +string BASE_COM_DIR = "$saves:CommunityOfflineMode"; +string BASE_PLAYER_SAVE_DIR = BASE_COM_DIR + "\\PlayerSaves"; + +/* + Include of all .c files that belong to this module +*/ + +void PersistencyPrint( string var ) +{ + if ( true ) + { + Print( var ); + } +} + +#ifdef COM_MODULES_OLDLOADING +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\PersistencyModule.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Data\\CharacterData.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Data\\HandData.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Data\\InventoryData.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Data\\ItemData.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Load\\CharacterLoad.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Load\\HandLoad.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Load\\InventoryLoad.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Load\\ItemLoad.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Save\\CharacterSave.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Save\\HandSave.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Save\\InventorySave.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\Save\\ItemSave.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\COMCharacterMenu.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\COMCharacterSave.c" +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\LoadText.c" + +#include "$CurrentDir:missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\modules\\Persistency\\gui\\scenes\\COMPersistencyScene.c" +#endif + +#ifndef COM_MODULES_OLDLOADING +void RegisterModule() +{ + COM_GetModuleManager().RegisterModule( new PersistencyModule ); +} +#endif \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/db/economy.xml b/Missions/DayZCommunityOfflineMode.sakhal/db/economy.xml new file mode 100644 index 00000000..d9c29ec8 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/db/economy.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/db/events.xml b/Missions/DayZCommunityOfflineMode.sakhal/db/events.xml new file mode 100644 index 00000000..275d4182 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/db/events.xml @@ -0,0 +1,1101 @@ + + + + 3 + 0 + 50 + 33 + 15 + 40 + 0 + 0 + + fixed + mixed + 1 + + + + + + + + + 0 + 2 + 2 + 180 + 0 + 200 + 0 + 0 + + fixed + custom + 1 + + + + + + 7 + 2 + 3 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + + + + + 9 + 2 + 4 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + 8 + 1 + 3 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + + + 6 + 1 + 2 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + 10 + 2 + 3 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + 5 + 4 + 5 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + 7 + 1 + 3 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + 8 + 4 + 6 + 180 + 0 + 200 + 0 + 0 + + fixed + child + 1 + + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + 50 + 25 + 250 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50 + 25 + 100 + 3 + 0 + 100 + 50 + 100 + + player + custom + 1 + + + + + + + + + + + + + 50 + 40 + 50 + 7200 + 0 + 250 + 20 + 100 + + fixed + mixed + 1 + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 50 + + fixed + custom + 1 + + + + 20 + 0 + 0 + 86400 + 0 + 100 + 5 + 2500 + InfectedFirefighter + + fixed + child + 0 + + + + + + 13 + 0 + 0 + 43200 + 0 + 1000 + 1000 + 1000 + + uniform + child + 0 + + + + + + 0 + 2 + 4 + 2100 + 0 + 0 + 120 + 0 + + fixed + parent + 1 + + + + + + 0 + 0 + 0 + 0 + 0 + 500 + 500 + 0 + + fixed + mixed + 0 + + + + 3 + 0 + 0 + 2100 + 0 + 1000 + 1000 + 1000 + InfectedArmy + + fixed + child + 1 + + + + + + + 5 + 0 + 0 + 1800 + 0 + 1000 + 1000 + 1000 + InfectedArmy + + fixed + child + 1 + + + + 10 + 0 + 0 + 2500 + 0 + 500 + 500 + 200 + InfectedPoliceHard + + fixed + child + 0 + + + + + + + 5 + 0 + 0 + 1800 + 0 + 500 + 1000 + 1000 + InfectedPoliceHard + + fixed + child + 1 + + + + 3 + 0 + 0 + 2100 + 0 + 1000 + 1000 + 1000 + InfectedSanta + + fixed + child + 0 + + + + + + 3 + 1 + 0 + 5400 + 0 + 500 + 1000 + 1000 + InfectedIndustrial + + fixed + child + 1 + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 0 + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + 140 + 2 + 4 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 0 + + + + + + 100 + 1 + 2 + 180 + 0 + 25 + 100 + 25 + + player + mixed + 1 + + + + + + 8 + 5 + 11 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + + + 8 + 5 + 11 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + + + 3 + 2 + 3 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + 8 + 5 + 11 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + + + 8 + 5 + 11 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + + + 8 + 5 + 11 + 300 + 0 + 500 + 500 + 200 + + fixed + mixed + 1 + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/db/globals.xml b/Missions/DayZCommunityOfflineMode.sakhal/db/globals.xml new file mode 100644 index 00000000..738060b1 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/db/globals.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/db/messages.xml b/Missions/DayZCommunityOfflineMode.sakhal/db/messages.xml new file mode 100644 index 00000000..1f891dba --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/db/messages.xml @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/db/types.xml b/Missions/DayZCommunityOfflineMode.sakhal/db/types.xml new file mode 100644 index 00000000..5d77e7e5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/db/types.xml @@ -0,0 +1,21741 @@ + + + + 10 + 14400 + 1800 + 6 + -1 + -1 + 100 + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + + + 2 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 8 + 28800 + 0 + 6 + -1 + -1 + 100 + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + 17 + 28800 + 0 + 12 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 28800 + 0 + 8 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 3 + 28800 + 1800 + 1 + -1 + -1 + 100 + + + + + + 3 + 28800 + 1800 + 1 + -1 + -1 + 100 + + + + + + 3 + 28800 + 1800 + 1 + -1 + -1 + 100 + + + + + + 10 + 3888000 + 0 + 6 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 16 + 7200 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 55 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 30 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 7200 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + 9 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 17 + 28800 + 0 + 12 + -1 + -1 + 100 + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + 20 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + 18 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + 15 + 28800 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + 30 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + 100 + 14400 + 0 + 75 + 10 + 30 + 100 + + + + + + + + + + + 40 + 28800 + 0 + 35 + 10 + 30 + 100 + + + + + + + + 100 + 14400 + 0 + 65 + 10 + 30 + 100 + + + + + + + + + + + 90 + 14400 + 0 + 70 + 10 + 40 + 100 + + + + + + + + 50 + 14400 + 180 + 30 + 10 + 30 + 100 + + + + + + + + 30 + 28800 + 1800 + 20 + 10 + 25 + 100 + + + + + + + + + + 90 + 28800 + 0 + 65 + 10 + 25 + 100 + + + + + + + + 100 + 14400 + 0 + 85 + 10 + 40 + 100 + + + + + + + + 5 + 14400 + 0 + 3 + 100 + 100 + 100 + + + + + + 8 + 14400 + 0 + 5 + 100 + 100 + 100 + + + + + + + + + 15 + 14400 + 0 + 8 + 100 + 100 + 100 + + + + + + 15 + 14400 + 0 + 8 + 100 + 100 + 100 + + + + + + 15 + 14400 + 0 + 8 + 100 + 100 + 100 + + + + + + 15 + 14400 + 0 + 8 + 100 + 100 + 100 + + + + + + 75 + 14400 + 180 + 50 + 10 + 25 + 100 + + + + + + + 65 + 28800 + 0 + 50 + 10 + 25 + 100 + + + + + + + 25 + 28800 + 180 + 10 + 10 + 30 + 100 + + + + + + + 50 + 14400 + 0 + 30 + 10 + 40 + 100 + + + + + + + + + + 25 + 28800 + 180 + 15 + 10 + 30 + 100 + + + + + + + + + + 100 + 14400 + 0 + 70 + 10 + 30 + 100 + + + + + + + + + + + + 45 + 28800 + 0 + 30 + 10 + 25 + 100 + + + + + + + + + + 60 + 14400 + 0 + 45 + 10 + 30 + 100 + + + + + + + + + + + + + 25 + 28800 + 0 + 15 + 10 + 30 + 100 + + + + + + + + + + 100 + 14400 + 0 + 75 + 10 + 25 + 100 + + + + + + + + 22 + 28800 + 0 + 14 + 10 + 30 + 100 + + + + + + + 15 + 28800 + 0 + 10 + 10 + 30 + 100 + + + + + + + + + 7 + 14400 + 0 + 4 + 20 + 40 + 100 + + + + + + + + + + 7 + 14400 + 0 + 4 + 20 + 40 + 100 + + + + + + + + + + 7 + 14400 + 0 + 4 + 20 + 40 + 100 + + + + + + + + + + 7 + 14400 + 0 + 4 + 20 + 40 + 100 + + + + + + + + + + 25 + 14400 + 0 + 18 + 40 + 100 + 100 + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 1 + 14400 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 10 + 14400 + 600 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 600 + 5 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 15 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 4 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 60 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 3888000 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 40 + 3888000 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 40 + 3888000 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 40 + 3888000 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 10 + 14400 + 1800 + 5 + -1 + -1 + 100 + + + + + + + + 80 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 100 + 14400 + 0 + 80 + 50 + 100 + 100 + + + + + + + + 30 + 604800 + 360 + 20 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 604800 + 0 + 5 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 23 + 28800 + 0 + 18 + 10 + 100 + 100 + + + + + + + + + 40 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 23 + 9000 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + 0 + 5400 + 0 + 0 + -1 + -1 + 100 + + + + + 100 + 14400 + 0 + 80 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 100 + 14400 + 0 + 80 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 45 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + + + 5 + 28800 + 0 + 3 + 0 + 80 + 100 + + + + + + + + 20 + 7200 + 0 + 10 + -1 + -1 + 100 + + + + + + 60 + 28800 + 0 + 40 + -1 + -1 + 100 + + + + + + + + + 80 + 604800 + 0 + 50 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 50 + 28800 + 0 + 30 + 30 + 70 + 100 + + + + + + + 20 + 14400 + 0 + 10 + 10 + 90 + 100 + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 10 + 14400 + 0 + 7 + -1 + -1 + 100 + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 60 + 28800 + 360 + 40 + 20 + 100 + 100 + + + + + + 60 + 28800 + 0 + 40 + -1 + -1 + 100 + + + + + + + 8 + 3888000 + 43200 + 4 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 12 + 10 + 50 + 100 + + + + + + + 35 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 35 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 35 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 35 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 35 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 24 + 28800 + 0 + 17 + -1 + -1 + 100 + + + + + + + + + + 24 + 28800 + 0 + 17 + -1 + -1 + 100 + + + + + + + + + + 24 + 28800 + 0 + 17 + -1 + -1 + 100 + + + + + + + + + + 23 + 7200 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 4 + 432000 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 55 + 14400 + 0 + 45 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 60 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 40 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 70 + 14400 + 1800 + 50 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 4 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + + 4 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + + 23 + 7200 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 3 + 0 + 0 + 100 + + + + + + 5 + 14400 + 0 + 3 + 0 + 0 + 100 + + + + + + 0 + 14400 + 0 + 0 + 0 + 0 + 100 + + + + + + 3 + 14400 + 0 + 1 + 0 + 0 + 100 + + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 25 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + 0 + 100 + 100 + + + + + + + 20 + 14400 + 0 + 15 + 0 + 100 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + 0 + 100 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 80 + 14400 + 0 + 60 + 10 + 50 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + 10 + 50 + 100 + + + + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 7 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 90 + 14400 + 0 + 70 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 6 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 30 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 20 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 60 + 28800 + 0 + 35 + 30 + 100 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 90 + 14400 + 0 + 70 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 35 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 90 + 14400 + 0 + 70 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 40 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + 25 + 7200 + 0 + 15 + -1 + -1 + 100 + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 8 + 20 + 100 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + 20 + 100 + 100 + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 7200 + 0 + 20 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 8 + 14400 + 600 + 3 + -1 + -1 + 100 + + + + + + 8 + 14400 + 600 + 3 + -1 + -1 + 100 + + + + + + + + + + 8 + 14400 + 600 + 3 + -1 + -1 + 100 + + + + + + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 600 + 2 + -1 + -1 + 100 + + + + + + 8 + 14400 + 600 + 3 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 45 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 120 + 14400 + 0 + 95 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 60 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 120 + 28800 + 0 + 90 + -1 + -1 + 100 + + + + + + + + + + + + + 120 + 28800 + 0 + 90 + -1 + -1 + 100 + + + + + + + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 9 + -1 + -1 + 100 + + + + + + 15 + 14400 + 0 + 9 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 15 + 28800 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + 50 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 6 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 12 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 0 + 2600 + 0 + 0 + -1 + -1 + 100 + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 60 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + + 10 + 14400 + 0 + 6 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 432000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 28800 + 0 + 30 + 10 + 50 + 100 + + + + + + + + + 60 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + + 65 + 14400 + 0 + 45 + -1 + 100 + 100 + + + + + + + + + + + 50 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 5 + 28800 + 1800 + 2 + -1 + -1 + 100 + + + + + + + 15 + 28800 + 1800 + 8 + -1 + -1 + 100 + + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 60 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 1800 + 8 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 604800 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 14400 + 0 + 30 + 65 + 100 + 100 + + + + + + + 8 + 3888000 + 43200 + 4 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 80 + 14400 + 0 + 60 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 50 + 14400 + 0 + 35 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 15 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 60 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 7 + 28800 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 1800 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 2 + 14400 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 5 + 28800 + 600 + 2 + -1 + -1 + 100 + + + + + + + + 5 + 28800 + 600 + 2 + -1 + -1 + 100 + + + + + + + + 8 + 28800 + 600 + 3 + -1 + -1 + 100 + + + + + + + 8 + 28800 + 600 + 3 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 1800 + 8 + -1 + -1 + 100 + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 12 + 28800 + 1800 + 8 + -1 + -1 + 100 + + + + + + + + + 6 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 15 + 20 + 100 + 100 + + + + + + + + 15 + 28800 + 0 + 10 + 5 + 50 + 100 + + + + + + + + 25 + 28800 + 0 + 20 + 5 + 50 + 100 + + + + + + + + + 1 + 28800 + 3600 + 1 + 10 + 50 + 100 + + + + + + 5 + 28800 + 0 + 2 + 5 + 50 + 100 + + + + + + + + 5 + 28800 + 0 + 2 + 5 + 40 + 100 + + + + + + 5 + 28800 + 0 + 2 + 5 + 50 + 100 + + + + + + + + 5 + 28800 + 1800 + 3 + 10 + 50 + 100 + + + + + + + + 12 + 28800 + 0 + 10 + 10 + 100 + 100 + + + + + + + + 8 + 28800 + 0 + 5 + 5 + 50 + 100 + + + + + + + + 5 + 28800 + 0 + 2 + 5 + 50 + 100 + + + + + + + + 1 + 28800 + 3600 + 1 + 5 + 50 + 100 + + + + + + 20 + 14400 + 0 + 15 + 20 + 100 + 100 + + + + + + + + + + + 8 + 14400 + 0 + 5 + 10 + 100 + 100 + + + + + + + + 20 + 7200 + 0 + 10 + 5 + 50 + 100 + + + + + + 60 + 28800 + 0 + 40 + 10 + 100 + 100 + + + + + + + + + + 30 + 28800 + 0 + 20 + 15 + 100 + 100 + + + + + + 4 + 28800 + 1800 + 2 + 5 + 50 + 100 + + + + + + + 5 + 28800 + 1800 + 3 + 10 + 50 + 100 + + + + + + + + 20 + 28800 + 0 + 15 + 10 + 100 + 100 + + + + + + + + 20 + 7200 + 0 + 15 + 10 + 100 + 100 + + + + + + 70 + 28800 + 0 + 50 + 10 + 100 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + 20 + 100 + 100 + + + + + + + + + 10 + 28800 + 0 + 7 + 10 + 50 + 100 + + + + + + 9 + 28800 + 0 + 6 + 5 + 50 + 100 + + + + + + 35 + 14400 + 0 + 25 + 25 + 100 + 100 + + + + + + + + + 12 + 28800 + 3600 + 9 + 10 + 50 + 100 + + + + + + 35 + 28800 + 0 + 20 + 10 + 100 + 100 + + + + + + + + + 30 + 28800 + 0 + 20 + 5 + 50 + 100 + + + + + + + + + 25 + 14400 + 0 + 15 + 0 + 100 + 100 + + + + + + + + + 5 + 28800 + 0 + 2 + 5 + 50 + 100 + + + + + + + + 5 + 28800 + 0 + 2 + 5 + 40 + 100 + + + + + + 4 + 28800 + 3600 + 2 + 10 + 100 + 1000 + + + + + + + 15 + 14400 + 0 + 10 + 20 + 100 + 100 + + + + + + + + + 5 + 14400 + 0 + 2 + 20 + 100 + 100 + + + + + + + + 5 + 14400 + 0 + 2 + 20 + 40 + 100 + + + + + + 8 + 28800 + 0 + 4 + 20 + 100 + 100 + + + + + + + + + 14 + 28800 + 0 + 9 + 5 + 50 + 100 + + + + + + 3 + 28800 + 3600 + 2 + 10 + 100 + 100 + + + + + + + 4 + 28800 + 3600 + 2 + 10 + 100 + 100 + + + + + + + 25 + 28800 + 0 + 20 + 0 + 80 + 100 + + + + + + 80 + 28800 + 0 + 60 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 60 + 14400 + 0 + 40 + 10 + 90 + 100 + + + + + + + + + 70 + 14400 + 0 + 60 + -1 + -1 + 100 + + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 2 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 30 + 65 + 100 + 100 + + + + + + + 8 + 3888000 + 43200 + 4 + -1 + -1 + 100 + + + + + + + 8 + 3888000 + 43200 + 4 + -1 + -1 + 100 + + + + + + + 8 + 3888000 + 43200 + 4 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 60 + 14400 + 0 + 40 + 10 + 60 + 100 + + + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + + 15 + 28800 + 1800 + 5 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 4 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 15 + 28800 + 0 + 8 + -1 + -1 + 100 + + + + + + + 40 + 28800 + 0 + 35 + 0 + 80 + 100 + + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 5 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 5 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 7200 + 0 + 15 + 0 + 80 + 100 + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 6 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 6 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 6 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 6 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + 6 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 5 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 90 + 14400 + 0 + 70 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 8 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + 30 + 28800 + 0 + 15 + -1 + -1 + 100 + + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 3 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + + 3 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + 8 + 28800 + 3600 + 5 + -1 + -1 + 100 + + + + + + 4 + 14400 + 3600 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 1800 + 3 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 1800 + 8 + -1 + -1 + 100 + + + + + + 15 + 14400 + 1800 + 8 + -1 + -1 + 100 + + + + + + + 20 + 28800 + 0 + 12 + 10 + 50 + 100 + + + + + + + 23 + 9000 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + + 0 + 5400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 7 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 10 + 3888000 + 43200 + 6 + -1 + -1 + 100 + + + + + + 10 + 3888000 + 43200 + 6 + -1 + -1 + 100 + + + + + + 10 + 3888000 + 43200 + 6 + -1 + -1 + 100 + + + + + + 10 + 3888000 + 43200 + 6 + -1 + -1 + 100 + + + + + + 23 + 9000 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + + 0 + 5400 + 0 + 0 + -1 + -1 + 100 + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 50 + 14400 + 0 + 30 + 20 + 100 + 100 + + + + + + + 20 + 14400 + 0 + 13 + -1 + -1 + 100 + + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 80 + 14400 + 0 + 60 + -1 + -1 + 100 + + + + + + 70 + 28800 + 0 + 50 + -1 + -1 + 100 + + + + + + + + + 10 + 28800 + 1800 + 5 + -1 + -1 + 100 + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 55 + 14400 + 0 + 45 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 5 + 432000 + 0 + 2 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 3 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 7200 + 0 + 5 + -1 + -1 + 100 + + + + + + + 20 + 7200 + 0 + 10 + -1 + -1 + 100 + + + + + + 15 + 7200 + 0 + 5 + -1 + -1 + 100 + + + + + + 20 + 7200 + 0 + 10 + -1 + -1 + 100 + + + + + + 15 + 7200 + 0 + 5 + -1 + -1 + 100 + + + + + + 20 + 7200 + 0 + 10 + -1 + -1 + 100 + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 32 + 14400 + 0 + 28 + -1 + -1 + 100 + + + + + + + + + + + 15 + 28800 + 0 + 12 + 10 + 100 + 100 + + + + + + + + + + + 80 + 604800 + 0 + 50 + 20 + 70 + 100 + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + 50 + 28800 + 1800 + 30 + 10 + 50 + 100 + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 15 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 60 + 28800 + 0 + 40 + -1 + -1 + 100 + + + + + + + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 50 + 14400 + 0 + 40 + 0 + 80 + 100 + + + + + + + + + + 20 + 28800 + 0 + 15 + 10 + 100 + 100 + + + + + + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 26 + -1 + -1 + 100 + + + + + + + + + + 100 + 14400 + 0 + 80 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 35 + 28800 + 0 + 25 + -1 + -1 + 100 + + + + + + + + 20 + 28800 + 0 + 14 + 0 + 80 + 100 + + + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 8 + 0 + 100 + 100 + + + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 8 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 23 + 7200 + 0 + 18 + -1 + -1 + 100 + + + + + + + + + + + 0 + 900 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 1 + 28800 + 0 + 1 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 3 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 20 + 3888000 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 100 + 14400 + 0 + 80 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + + + + 50 + 14400 + 0 + 35 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 35 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 7 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 7 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 7 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 40 + 14400 + 0 + 30 + 65 + 100 + 100 + + + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 70 + 3888000 + 0 + 50 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + 15 + 15 + 100 + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + + 10 + 14400 + 0 + 5 + -1 + -1 + 100 + + + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 60 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + + 60 + 604800 + 0 + 50 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + + 30 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 0 + 0 + 0 + -1 + -1 + 100 + + + + 70 + 14400 + 0 + 60 + -1 + -1 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 8 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 15 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + + + 2 + 14400 + 0 + 1 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 3 + 900 + 0 + 1 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 5 + -1 + -1 + 100 + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 6 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 6 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 6 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + 8 + 14400 + 0 + 3 + -1 + -1 + 100 + + + + + + + + + 8 + 14400 + 1800 + 3 + -1 + -1 + 100 + + + + + + + + 8 + 14400 + 1800 + 3 + -1 + -1 + 100 + + + + + + 10 + 14400 + 1800 + 5 + -1 + -1 + 100 + + + + + + 10 + 14400 + 1800 + 5 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 14 + -1 + -1 + 100 + + + + + + + + 14 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 14 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 20 + 28800 + 0 + 14 + -1 + -1 + 100 + + + + + + + + 5 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 12 + 10 + 50 + 100 + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + 50 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 6 + 28800 + 1800 + 4 + -1 + -1 + 100 + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + + + 40 + 14400 + 0 + 30 + -1 + -1 + 100 + + + + + + + + 0 + 604800 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 28800 + 360 + 10 + 20 + 100 + 100 + + + + + + 0 + 3 + 1800 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 6 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + + + 40 + 28800 + 0 + 30 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 7200 + 0 + 0 + -1 + -1 + 100 + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 14400 + 1800 + 4 + -1 + -1 + 100 + + + + + + 5 + 14400 + 1800 + 3 + -1 + -1 + 100 + + + + + + 10 + 14400 + 1800 + 4 + -1 + -1 + 100 + + + + + + 10 + 14400 + 1800 + 4 + -1 + -1 + 100 + + + + + + 10 + 28800 + 0 + 7 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 600 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 0 + 2 + -1 + -1 + 100 + + + + + + 5 + 28800 + 600 + 2 + -1 + -1 + 100 + + + + + + 0 + 1209600 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 28800 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + + 43 + 14400 + 0 + 37 + -1 + -1 + 100 + + + + + + + + + + 0 + 9000 + 0 + 0 + -1 + -1 + 100 + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 1 + 28800 + 3600 + 1 + -1 + -1 + 100 + + + + + + 40 + 14400 + 0 + 20 + 5 + 20 + 100 + + + + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 130 + 14400 + 0 + 100 + 20 + 70 + 100 + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + 20 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + 60 + 28800 + 0 + 50 + -1 + -1 + 100 + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + 80 + 28800 + 0 + 65 + -1 + -1 + 100 + + + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 10 + 28800 + 0 + 7 + 0 + 80 + 100 + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 28800 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + 20 + 14400 + 0 + 13 + -1 + -1 + 100 + + + + + + + + + + + 0 + 3888000 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 14 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + + 8 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + + + 10 + 14400 + 0 + 7 + -1 + -1 + 100 + + + + + + + + + + 14 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 14 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + + 8 + 14400 + 0 + 4 + -1 + -1 + 100 + + + + + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + 14 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 14 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 4 + 14400 + 0 + 2 + -1 + -1 + 100 + + + + + + 10 + 14400 + 0 + 7 + -1 + -1 + 100 + + + + + + 12 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + + + 10 + 14400 + 0 + 7 + -1 + -1 + 100 + + + + + + 22 + 14400 + 0 + 16 + -1 + -1 + 100 + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 25 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 10 + 14400 + 0 + 7 + -1 + -1 + 100 + + + + + + + 13 + 14400 + 0 + 8 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 10 + -1 + -1 + 100 + + + + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 0 + 3 + 0 + 0 + -1 + -1 + 100 + + + + 70 + 14400 + 0 + 50 + -1 + -1 + 100 + + + + + + + + 60 + 14400 + 0 + 40 + -1 + -1 + 100 + + + + + + + + 15 + 28800 + 0 + 10 + -1 + -1 + 100 + + + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + 15 + 14400 + 0 + 12 + -1 + -1 + 100 + + + + + + + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 0 + 1800 + 0 + 1 + -1 + -1 + 100 + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 30 + 14400 + 0 + 20 + -1 + -1 + 100 + + + + + + + + + + 20 + 14400 + 0 + 15 + -1 + -1 + 100 + + + + + + + + + + + + 0 + 14400 + 0 + 0 + -1 + -1 + 100 + + + + + 30 + 14400 + 0 + 25 + -1 + -1 + 100 + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/bear_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/bear_territories.xml new file mode 100644 index 00000000..fd0efff0 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/bear_territories.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/cattle_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/cattle_territories.xml new file mode 100644 index 00000000..381bd3be --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/cattle_territories.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/domestic_animals_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/domestic_animals_territories.xml new file mode 100644 index 00000000..906329c5 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/domestic_animals_territories.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/hare_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/hare_territories.xml new file mode 100644 index 00000000..90abbb5c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/hare_territories.xml @@ -0,0 +1,611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/hen_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/hen_territories.xml new file mode 100644 index 00000000..434a1931 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/hen_territories.xml @@ -0,0 +1,612 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/pig_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/pig_territories.xml new file mode 100644 index 00000000..0ea51139 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/pig_territories.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/red_deer_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/red_deer_territories.xml new file mode 100644 index 00000000..d4056987 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/red_deer_territories.xml @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/roe_deer_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/roe_deer_territories.xml new file mode 100644 index 00000000..dcc3672c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/roe_deer_territories.xml @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/sheep_goat_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/sheep_goat_territories.xml new file mode 100644 index 00000000..da8180c8 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/sheep_goat_territories.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/wild_boar_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/wild_boar_territories.xml new file mode 100644 index 00000000..61281c4c --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/wild_boar_territories.xml @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/wolf_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/wolf_territories.xml new file mode 100644 index 00000000..31d53df8 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/wolf_territories.xml @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/env/zombie_territories.xml b/Missions/DayZCommunityOfflineMode.sakhal/env/zombie_territories.xml new file mode 100644 index 00000000..6978ab60 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/env/zombie_territories.xml @@ -0,0 +1,794 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/init.c b/Missions/DayZCommunityOfflineMode.sakhal/init.c new file mode 100644 index 00000000..9c4413f0 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/init.c @@ -0,0 +1,11 @@ +#define DISABLE_PERSISTENCY + +#include "$CurrentDir:Missions\\DayZCommunityOfflineMode.ChernarusPlus\\core\\BaseModuleInclude.c" + +Mission CreateCustomMission(string path) +{ + if ( GetGame().IsServer() && GetGame().IsMultiplayer() ) + return new CommunityOfflineServer(); + + return new CommunityOfflineClient(); +} diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapGroupPos.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapGroupPos.xml new file mode 100644 index 00000000..46235277 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapGroupPos.xml @@ -0,0 +1,11712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapGroupProto.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapGroupProto.xml new file mode 100644 index 00000000..c666964e --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapGroupProto.xml @@ -0,0 +1,17407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapclusterproto.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapclusterproto.xml new file mode 100644 index 00000000..09d798c2 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapclusterproto.xml @@ -0,0 +1,646 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster01.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster01.xml new file mode 100644 index 00000000..43252f37 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster01.xml @@ -0,0 +1,50004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster02.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster02.xml new file mode 100644 index 00000000..b7ef0563 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster02.xml @@ -0,0 +1,50004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster03.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster03.xml new file mode 100644 index 00000000..5839ccba --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster03.xml @@ -0,0 +1,50004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster04.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster04.xml new file mode 100644 index 00000000..a998f490 --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupcluster04.xml @@ -0,0 +1,17350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Missions/DayZCommunityOfflineMode.sakhal/mapgroupdirt.xml b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupdirt.xml new file mode 100644 index 00000000..954e7d2d --- /dev/null +++ b/Missions/DayZCommunityOfflineMode.sakhal/mapgroupdirt.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/building.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/building.bin new file mode 100644 index 00000000..b6c6b3ac Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/building.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_000.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_000.bin new file mode 100644 index 00000000..4853d2a9 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_000.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_001.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_001.bin new file mode 100644 index 00000000..0b12f4a5 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_001.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_002.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_002.bin new file mode 100644 index 00000000..a9ac0318 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_002.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_003.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_003.bin new file mode 100644 index 00000000..29fcca67 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_003.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_004.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_004.bin new file mode 100644 index 00000000..78063d61 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_004.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_005.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_005.bin new file mode 100644 index 00000000..ecb21e82 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_005.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_006.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_006.bin new file mode 100644 index 00000000..3f5d5768 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_006.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_007.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_007.bin new file mode 100644 index 00000000..9580d6ba Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_007.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_008.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_008.bin new file mode 100644 index 00000000..c6a19d64 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_008.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_009.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_009.bin new file mode 100644 index 00000000..0a50e5ca Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_009.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_010.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_010.bin new file mode 100644 index 00000000..cffe5027 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_010.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_011.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_011.bin new file mode 100644 index 00000000..b6f1b571 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/dynamic_011.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/events.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/events.bin new file mode 100644 index 00000000..667bb5de Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/events.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/types.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/types.bin new file mode 100644 index 00000000..90027f6f Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/types.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/vehicles.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/vehicles.bin new file mode 100644 index 00000000..a7b4adb8 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/backup/000/vehicles.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/animals.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/animals.bin new file mode 100644 index 00000000..28157d7c Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/animals.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.001 new file mode 100644 index 00000000..74a63cb8 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.002 new file mode 100644 index 00000000..16234978 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.bin new file mode 100644 index 00000000..a779cf6e Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/building.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.001 new file mode 100644 index 00000000..f7fe5a2c Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.002 new file mode 100644 index 00000000..7c2b591b Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.bin new file mode 100644 index 00000000..708f71c4 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_000.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.001 new file mode 100644 index 00000000..82897e8a Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.002 new file mode 100644 index 00000000..2c2fcb78 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.bin new file mode 100644 index 00000000..53f1ac26 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_001.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.001 new file mode 100644 index 00000000..d4242cb1 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.002 new file mode 100644 index 00000000..46c714cc Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.bin new file mode 100644 index 00000000..cab350cb Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_002.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.001 new file mode 100644 index 00000000..d3746d8e Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.002 new file mode 100644 index 00000000..84f6fddf Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.bin new file mode 100644 index 00000000..8e65a854 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_003.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.001 new file mode 100644 index 00000000..0b49ce88 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.002 new file mode 100644 index 00000000..fe974a86 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.bin new file mode 100644 index 00000000..fac4b6e0 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_004.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.001 new file mode 100644 index 00000000..e5c94e2e Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.002 new file mode 100644 index 00000000..ea88fb8f Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.bin new file mode 100644 index 00000000..891d92e9 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_005.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.001 new file mode 100644 index 00000000..12403242 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.002 new file mode 100644 index 00000000..8dc29779 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.bin new file mode 100644 index 00000000..202ee370 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_006.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.001 new file mode 100644 index 00000000..7158d121 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.002 new file mode 100644 index 00000000..3b3e34b1 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.bin new file mode 100644 index 00000000..ba65198c Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_007.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.001 new file mode 100644 index 00000000..75096c52 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.002 new file mode 100644 index 00000000..3c53089d Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.bin new file mode 100644 index 00000000..56931497 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_008.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.001 new file mode 100644 index 00000000..11017dd4 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.002 new file mode 100644 index 00000000..294daebe Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.bin new file mode 100644 index 00000000..f5aac8ab Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_009.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.001 new file mode 100644 index 00000000..062bbd88 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.002 new file mode 100644 index 00000000..7b571b2a Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.bin new file mode 100644 index 00000000..807cd170 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_010.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.001 new file mode 100644 index 00000000..9fd53c15 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.002 new file mode 100644 index 00000000..841b436c Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.bin new file mode 100644 index 00000000..e9a1c8fb Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/dynamic_011.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.001 new file mode 100644 index 00000000..3e706bf4 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.002 new file mode 100644 index 00000000..04a1560a Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.bin new file mode 100644 index 00000000..ba99d7f9 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/events.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.001 new file mode 100644 index 00000000..8a4c261c Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.002 new file mode 100644 index 00000000..26fcba57 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.bin new file mode 100644 index 00000000..73f836e9 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/types.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.001 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.001 new file mode 100644 index 00000000..fb26067e Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.001 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.002 b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.002 new file mode 100644 index 00000000..0d85ec7e Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.002 differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.bin new file mode 100644 index 00000000..93733639 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/vehicles.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/zombies.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/zombies.bin new file mode 100644 index 00000000..54fc57f5 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/data/zombies.bin differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/players.db b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/players.db new file mode 100644 index 00000000..7ffefc83 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/players.db differ diff --git a/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/spawnpoints.bin b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/spawnpoints.bin new file mode 100644 index 00000000..3983f725 Binary files /dev/null and b/Missions/DayZCommunityOfflineMode.sakhal/storage_-1/spawnpoints.bin differ