aboutsummaryrefslogtreecommitdiff
path: root/src/log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/log.h')
0 files changed, 0 insertions, 0 deletions
;'/> -rw-r--r--advtrains/advtrains/atc.lua (renamed from advtrains/atc.lua)0
-rw-r--r--advtrains/advtrains/copytool.lua (renamed from advtrains/copytool.lua)0
-rw-r--r--advtrains/advtrains/couple.lua (renamed from advtrains/couple.lua)0
-rw-r--r--advtrains/advtrains/craft_items.lua (renamed from advtrains/craft_items.lua)0
-rw-r--r--advtrains/advtrains/crafting.lua (renamed from advtrains/crafting.lua)0
-rw-r--r--advtrains/advtrains/debugitems.lua (renamed from advtrains/debugitems.lua)0
-rw-r--r--advtrains/advtrains/debugringbuffer.lua (renamed from advtrains/debugringbuffer.lua)0
-rw-r--r--advtrains/advtrains/depends.txt (renamed from advtrains/depends.txt)0
-rw-r--r--advtrains/advtrains/description.txt8
-rw-r--r--advtrains/advtrains/helpers.lua (renamed from advtrains/helpers.lua)0
-rw-r--r--advtrains/advtrains/init.lua (renamed from advtrains/init.lua)0
-rw-r--r--advtrains/advtrains/locale/advtrains.de.tr (renamed from advtrains/locale/advtrains.de.tr)0
-rw-r--r--advtrains/advtrains/locale/advtrains.zh_CN.tr (renamed from advtrains/locale/advtrains.zh_CN.tr)0
-rw-r--r--advtrains/advtrains/log.lua (renamed from advtrains/log.lua)0
-rw-r--r--advtrains/advtrains/lzb.lua (renamed from advtrains/lzb.lua)0
-rw-r--r--advtrains/advtrains/misc_nodes.lua (renamed from advtrains/misc_nodes.lua)0
-rw-r--r--advtrains/advtrains/models/advtrains_across.obj (renamed from advtrains/models/advtrains_across.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_bumper_st.b3d (renamed from advtrains/models/advtrains_dtrack_bumper_st.b3d)bin32927 -> 32927 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_bumper_st_30.b3d (renamed from advtrains/models/advtrains_dtrack_bumper_st_30.b3d)bin48546 -> 48546 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_bumper_st_45.b3d (renamed from advtrains/models/advtrains_dtrack_bumper_st_45.b3d)bin32926 -> 32926 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_bumper_st_60.b3d (renamed from advtrains/models/advtrains_dtrack_bumper_st_60.b3d)bin48546 -> 48546 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_cr.b3d (renamed from advtrains/models/advtrains_dtrack_cr.b3d)bin28040 -> 28040 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_cr_30.b3d (renamed from advtrains/models/advtrains_dtrack_cr_30.b3d)bin28043 -> 28043 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_cr_45.b3d (renamed from advtrains/models/advtrains_dtrack_cr_45.b3d)bin34483 -> 34483 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_cr_60.b3d (renamed from advtrains/models/advtrains_dtrack_cr_60.b3d)bin34483 -> 34483 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_st.b3d (renamed from advtrains/models/advtrains_dtrack_st.b3d)bin10712 -> 10712 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_st_30.b3d (renamed from advtrains/models/advtrains_dtrack_st_30.b3d)bin20043 -> 20043 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_st_45.b3d (renamed from advtrains/models/advtrains_dtrack_st_45.b3d)bin12235 -> 12235 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_st_60.b3d (renamed from advtrains/models/advtrains_dtrack_st_60.b3d)bin20043 -> 20043 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlcr.b3d (renamed from advtrains/models/advtrains_dtrack_swlcr.b3d)bin36203 -> 36203 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlcr_30.b3d (renamed from advtrains/models/advtrains_dtrack_swlcr_30.b3d)bin39958 -> 39958 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlcr_45.b3d (renamed from advtrains/models/advtrains_dtrack_swlcr_45.b3d)bin41302 -> 41302 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlcr_60.b3d (renamed from advtrains/models/advtrains_dtrack_swlcr_60.b3d)bin46270 -> 46270 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlst.b3d (renamed from advtrains/models/advtrains_dtrack_swlst.b3d)bin36203 -> 36203 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlst_30.b3d (renamed from advtrains/models/advtrains_dtrack_swlst_30.b3d)bin39958 -> 39958 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlst_45.b3d (renamed from advtrains/models/advtrains_dtrack_swlst_45.b3d)bin41302 -> 41302 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swlst_60.b3d (renamed from advtrains/models/advtrains_dtrack_swlst_60.b3d)bin46270 -> 46270 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrcr.b3d (renamed from advtrains/models/advtrains_dtrack_swrcr.b3d)bin36203 -> 36203 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrcr_30.b3d (renamed from advtrains/models/advtrains_dtrack_swrcr_30.b3d)bin46270 -> 46270 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrcr_45.b3d (renamed from advtrains/models/advtrains_dtrack_swrcr_45.b3d)bin41302 -> 41302 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrcr_60.b3d (renamed from advtrains/models/advtrains_dtrack_swrcr_60.b3d)bin39958 -> 39958 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrst.b3d (renamed from advtrains/models/advtrains_dtrack_swrst.b3d)bin36203 -> 36203 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrst_30.b3d (renamed from advtrains/models/advtrains_dtrack_swrst_30.b3d)bin46270 -> 46270 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrst_45.b3d (renamed from advtrains/models/advtrains_dtrack_swrst_45.b3d)bin41302 -> 41302 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_swrst_60.b3d (renamed from advtrains/models/advtrains_dtrack_swrst_60.b3d)bin39958 -> 39958 bytes-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst1.obj (renamed from advtrains/models/advtrains_dtrack_vst1.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst1_45.obj (renamed from advtrains/models/advtrains_dtrack_vst1_45.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst2.obj (renamed from advtrains/models/advtrains_dtrack_vst2.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst2_45.obj (renamed from advtrains/models/advtrains_dtrack_vst2_45.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst31.obj (renamed from advtrains/models/advtrains_dtrack_vst31.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst32.obj (renamed from advtrains/models/advtrains_dtrack_vst32.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_dtrack_vst33.obj (renamed from advtrains/models/advtrains_dtrack_vst33.obj)0
-rw-r--r--advtrains/advtrains/models/advtrains_modernwagon.b3d (renamed from advtrains/models/advtrains_modernwagon.b3d)bin172028 -> 172028 bytes-rw-r--r--advtrains/advtrains/models/advtrains_platform_diag.b3d (renamed from advtrains/models/advtrains_platform_diag.b3d)bin1970 -> 1970 bytes-rw-r--r--advtrains/advtrains/models/advtrains_platform_diag_low.b3d (renamed from advtrains/models/advtrains_platform_diag_low.b3d)bin1982 -> 1982 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_off.b3d (renamed from advtrains/models/advtrains_retrosignal_off.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_off_30.b3d (renamed from advtrains/models/advtrains_retrosignal_off_30.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_off_45.b3d (renamed from advtrains/models/advtrains_retrosignal_off_45.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_off_60.b3d (renamed from advtrains/models/advtrains_retrosignal_off_60.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_on.b3d (renamed from advtrains/models/advtrains_retrosignal_on.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_on_30.b3d (renamed from advtrains/models/advtrains_retrosignal_on_30.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_on_45.b3d (renamed from advtrains/models/advtrains_retrosignal_on_45.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_retrosignal_on_60.b3d (renamed from advtrains/models/advtrains_retrosignal_on_60.b3d)bin13093 -> 13093 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal.b3d (renamed from advtrains/models/advtrains_signal.b3d)bin61544 -> 61544 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_30.b3d (renamed from advtrains/models/advtrains_signal_30.b3d)bin61544 -> 61544 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_45.b3d (renamed from advtrains/models/advtrains_signal_45.b3d)bin61544 -> 61544 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_60.b3d (renamed from advtrains/models/advtrains_signal_60.b3d)bin61544 -> 61544 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_wall_l.b3d (renamed from advtrains/models/advtrains_signal_wall_l.b3d)bin40514 -> 40514 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_wall_r.b3d (renamed from advtrains/models/advtrains_signal_wall_r.b3d)bin40514 -> 40514 bytes-rw-r--r--advtrains/advtrains/models/advtrains_signal_wall_t.b3d (renamed from advtrains/models/advtrains_signal_wall_t.b3d)bin40514 -> 40514 bytes-rw-r--r--advtrains/advtrains/models/advtrains_track_cr.b3d (renamed from advtrains/models/advtrains_track_cr.b3d)bin8023 -> 8023 bytes-rw-r--r--advtrains/advtrains/models/advtrains_track_st.b3d (renamed from advtrains/models/advtrains_track_st.b3d)bin15831 -> 15831 bytes-rw-r--r--advtrains/advtrains/models/advtrains_track_st_45.b3d (renamed from advtrains/models/advtrains_track_st_45.b3d)bin8935 -> 8935 bytes-rw-r--r--advtrains/advtrains/models/trackplane.b3d (renamed from advtrains/models/trackplane.b3d)bin262 -> 262 bytes-rw-r--r--advtrains/advtrains/nodedb.lua (renamed from advtrains/nodedb.lua)0
-rw-r--r--advtrains/advtrains/occupation.lua (renamed from advtrains/occupation.lua)0
-rw-r--r--advtrains/advtrains/p_mesecon_iface.lua (renamed from advtrains/p_mesecon_iface.lua)0
-rw-r--r--advtrains/advtrains/passive.lua (renamed from advtrains/passive.lua)0
-rw-r--r--advtrains/advtrains/path.lua (renamed from advtrains/path.lua)0
-rw-r--r--advtrains/advtrains/protection.lua (renamed from advtrains/protection.lua)0
-rw-r--r--advtrains/advtrains/settingtypes.txt (renamed from advtrains/settingtypes.txt)0
-rw-r--r--advtrains/advtrains/signals.lua (renamed from advtrains/signals.lua)0
-rw-r--r--advtrains/advtrains/sounds/advtrains_crossing_bell.ogg (renamed from advtrains/sounds/advtrains_crossing_bell.ogg)bin47722 -> 47722 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_across.png (renamed from advtrains/textures/advtrains_across.png)bin302 -> 302 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_across_anim.png (renamed from advtrains/textures/advtrains_across_anim.png)bin524 -> 524 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_boiler.png (renamed from advtrains/textures/advtrains_boiler.png)bin413 -> 413 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_chimney.png (renamed from advtrains/textures/advtrains_chimney.png)bin309 -> 309 bytes-rw-r--r--advtrains/advtrains/textures/advtrains_copytool.png (renamed from advtrains/textures/advtrains_copytool.png)bin779 -> 779 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_couple.png (renamed from advtrains/textures/advtrains_couple.png)bin339 -> 339 bytes-rw-r--r--advtrains/advtrains/textures/advtrains_cpl_lock.png (renamed from advtrains/textures/advtrains_cpl_lock.png)bin209 -> 209 bytes-rw-r--r--advtrains/advtrains/textures/advtrains_cpl_unlock.png (renamed from advtrains/textures/advtrains_cpl_unlock.png)bin213 -> 213 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_discouple.png (renamed from advtrains/textures/advtrains_discouple.png)bin293 -> 293 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_driver_cab.png (renamed from advtrains/textures/advtrains_driver_cab.png)bin352 -> 352 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_atc_placer.png (renamed from advtrains/textures/advtrains_dtrack_atc_placer.png)bin1259 -> 1259 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_bumper_placer.png (renamed from advtrains/textures/advtrains_dtrack_bumper_placer.png)bin2213 -> 2213 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_detector_placer.png (renamed from advtrains/textures/advtrains_dtrack_detector_placer.png)bin1253 -> 1253 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_load_placer.png (renamed from advtrains/textures/advtrains_dtrack_load_placer.png)bin1248 -> 1248 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_placer.png (renamed from advtrains/textures/advtrains_dtrack_placer.png)bin1097 -> 1097 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_rail.png (renamed from advtrains/textures/advtrains_dtrack_rail.png)bin4582 -> 4582 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared.png (renamed from advtrains/textures/advtrains_dtrack_shared.png)bin7141 -> 7141 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared_atc.png (renamed from advtrains/textures/advtrains_dtrack_shared_atc.png)bin7215 -> 7215 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared_detector_off.png (renamed from advtrains/textures/advtrains_dtrack_shared_detector_off.png)bin7180 -> 7180 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared_detector_on.png (renamed from advtrains/textures/advtrains_dtrack_shared_detector_on.png)bin7181 -> 7181 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared_load.png (renamed from advtrains/textures/advtrains_dtrack_shared_load.png)bin7339 -> 7339 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_shared_unload.png (renamed from advtrains/textures/advtrains_dtrack_shared_unload.png)bin7338 -> 7338 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_slopeplacer.png (renamed from advtrains/textures/advtrains_dtrack_slopeplacer.png)bin2415 -> 2415 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_dtrack_unload_placer.png (renamed from advtrains/textures/advtrains_dtrack_unload_placer.png)bin1260 -> 1260 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_platform.png (renamed from advtrains/textures/advtrains_platform.png)bin193 -> 193 bytes-rw-r--r--advtrains/advtrains/textures/advtrains_platform_diag.png (renamed from advtrains/textures/advtrains_platform_diag.png)bin93 -> 93 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_retrosignal.png (renamed from advtrains/textures/advtrains_retrosignal.png)bin8496 -> 8496 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_retrosignal_inv.png (renamed from advtrains/textures/advtrains_retrosignal_inv.png)bin2242 -> 2242 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_signal_inv.png (renamed from advtrains/textures/advtrains_signal_inv.png)bin856 -> 856 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_signal_off.png (renamed from advtrains/textures/advtrains_signal_off.png)bin5882 -> 5882 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_signal_on.png (renamed from advtrains/textures/advtrains_signal_on.png)bin5884 -> 5884 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_signal_wall_off.png (renamed from advtrains/textures/advtrains_signal_wall_off.png)bin3056 -> 3056 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_signal_wall_on.png (renamed from advtrains/textures/advtrains_signal_wall_on.png)bin3043 -> 3043 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_cr.png (renamed from advtrains/textures/advtrains_track_cr.png)bin33370 -> 33370 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_cr_45.png (renamed from advtrains/textures/advtrains_track_cr_45.png)bin33938 -> 33938 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_placer.png (renamed from advtrains/textures/advtrains_track_placer.png)bin32349 -> 32349 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_st.png (renamed from advtrains/textures/advtrains_track_st.png)bin20405 -> 20405 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_st_45.png (renamed from advtrains/textures/advtrains_track_st_45.png)bin39977 -> 39977 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swlcr.png (renamed from advtrains/textures/advtrains_track_swlcr.png)bin33378 -> 33378 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swlcr_45.png (renamed from advtrains/textures/advtrains_track_swlcr_45.png)bin45772 -> 45772 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swlst.png (renamed from advtrains/textures/advtrains_track_swlst.png)bin32321 -> 32321 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swlst_45.png (renamed from advtrains/textures/advtrains_track_swlst_45.png)bin46408 -> 46408 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swrcr.png (renamed from advtrains/textures/advtrains_track_swrcr.png)bin33670 -> 33670 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swrcr_45.png (renamed from advtrains/textures/advtrains_track_swrcr_45.png)bin46865 -> 46865 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swrst.png (renamed from advtrains/textures/advtrains_track_swrst.png)bin32654 -> 32654 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_track_swrst_45.png (renamed from advtrains/textures/advtrains_track_swrst_45.png)bin47636 -> 47636 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_trackworker.png (renamed from advtrains/textures/advtrains_trackworker.png)bin328 -> 328 bytes-rw-r--r--advtrains/advtrains/textures/advtrains_wagon_placeholder.png (renamed from advtrains/textures/advtrains_wagon_placeholder.png)bin723 -> 723 bytes-rwxr-xr-xadvtrains/advtrains/textures/advtrains_wheel.png (renamed from advtrains/textures/advtrains_wheel.png)bin582 -> 582 bytes-rwxr-xr-xadvtrains/advtrains/textures/drwho_screwdriver.png (renamed from advtrains/textures/drwho_screwdriver.png)bin328 -> 328 bytes-rw-r--r--advtrains/advtrains/trackdb_legacy.lua (renamed from advtrains/trackdb_legacy.lua)0
-rw-r--r--advtrains/advtrains/trackplacer.lua (renamed from advtrains/trackplacer.lua)0
-rw-r--r--advtrains/advtrains/tracks.lua (renamed from advtrains/tracks.lua)0
-rw-r--r--advtrains/advtrains/trainhud.lua (renamed from advtrains/trainhud.lua)0
-rw-r--r--advtrains/advtrains/trainlogic.lua (renamed from advtrains/trainlogic.lua)0
-rw-r--r--advtrains/advtrains/wagons.lua (renamed from advtrains/wagons.lua)0
-rw-r--r--advtrains/advtrains_interlocking/approach.lua113
-rw-r--r--advtrains/advtrains_interlocking/ars.lua155
-rw-r--r--advtrains/advtrains_interlocking/database.lua599
-rw-r--r--advtrains/advtrains_interlocking/demosignals.lua111
-rw-r--r--advtrains/advtrains_interlocking/depends.txt2
-rw-r--r--advtrains/advtrains_interlocking/init.lua30
-rw-r--r--advtrains/advtrains_interlocking/models/at_il_tcb_node.obj248
-rw-r--r--advtrains/advtrains_interlocking/route_prog.lua548
-rw-r--r--advtrains/advtrains_interlocking/route_ui.lua152
-rw-r--r--advtrains/advtrains_interlocking/routesetting.lua357
-rw-r--r--advtrains/advtrains_interlocking/settingtypes.txt4
-rw-r--r--advtrains/advtrains_interlocking/signal_api.lua546
-rw-r--r--advtrains/advtrains_interlocking/tcb_ts_ui.lua789
-rw-r--r--advtrains/advtrains_interlocking/textures/advtrains_dtrack_npr_placer.pngbin0 -> 1238 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/advtrains_dtrack_shared_npr.pngbin0 -> 3176 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_route_end.pngbin0 -> 451 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_route_lock.pngbin0 -> 534 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_route_lock_edit.pngbin0 -> 533 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_route_set.pngbin0 -> 398 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_route_start.pngbin0 -> 380 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_routep_advance.pngbin0 -> 304 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_routep_end_here.pngbin0 -> 243 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_routep_end_over.pngbin0 -> 281 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_routep_end_over_last.pngbin0 -> 277 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_signal_asp_danger.pngbin0 -> 247 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_signal_asp_free.pngbin0 -> 245 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_signal_asp_slow.pngbin0 -> 245 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_signal_ip.pngbin0 -> 285 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_signal_off.pngbin0 -> 236 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_tcb_marker.pngbin0 -> 308 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_tcb_node.pngbin0 -> 279 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_tool.pngbin0 -> 337 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_turnout_cr_l.pngbin0 -> 314 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_turnout_cr_r.pngbin0 -> 298 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_turnout_free.pngbin0 -> 367 bytes-rw-r--r--advtrains/advtrains_interlocking/textures/at_il_turnout_st.pngbin0 -> 229 bytes-rw-r--r--advtrains/advtrains_interlocking/tool.lua66
-rw-r--r--advtrains/advtrains_interlocking/train_sections.lua199
-rw-r--r--advtrains/advtrains_interlocking/tsr_rail.lua56
-rw-r--r--advtrains/advtrains_itrainmap/depends.txt1
-rw-r--r--advtrains/advtrains_itrainmap/init.lua149
-rw-r--r--advtrains/advtrains_itrainmap/textures/itm_example.pngbin0 -> 154460 bytes-rw-r--r--advtrains/advtrains_line_automation/depends.txt2
-rw-r--r--advtrains/advtrains_line_automation/init.lua47
-rw-r--r--advtrains/advtrains_line_automation/railwaytime.lua308
-rw-r--r--advtrains/advtrains_line_automation/readme.txt5
-rw-r--r--advtrains/advtrains_line_automation/scheduler.lua133
-rw-r--r--advtrains/advtrains_line_automation/settingtypes.txt6
-rw-r--r--advtrains/advtrains_line_automation/stoprail.lua218
-rw-r--r--advtrains/advtrains_line_automation/textures/advtrains_dtrack_shared_stop.pngbin0 -> 3306 bytes-rw-r--r--advtrains/advtrains_line_automation/textures/advtrains_dtrack_stop_placer.pngbin0 -> 1238 bytes-rw-r--r--advtrains/advtrains_luaautomation/README.txt288
-rw-r--r--advtrains/advtrains_luaautomation/active_common.lua175
-rw-r--r--advtrains/advtrains_luaautomation/atc_rail.lua194
-rw-r--r--advtrains/advtrains_luaautomation/chatcmds.lua84
-rw-r--r--advtrains/advtrains_luaautomation/depends.txt4
-rw-r--r--advtrains/advtrains_luaautomation/environment.lua362
-rw-r--r--advtrains/advtrains_luaautomation/init.lua109
-rw-r--r--advtrains/advtrains_luaautomation/interrupt.lua48
-rw-r--r--advtrains/advtrains_luaautomation/operation_panel.lua28
-rw-r--r--advtrains/advtrains_luaautomation/p_display.lua0
-rw-r--r--advtrains/advtrains_luaautomation/passive_api.txt24
-rw-r--r--advtrains/advtrains_luaautomation/pcnaming.lua76
-rw-r--r--advtrains/advtrains_luaautomation/textures/atlatc_oppanel.pngbin0 -> 631 bytes-rw-r--r--advtrains/advtrains_luaautomation/textures/atlatc_pcnaming.pngbin0 -> 329 bytes-rw-r--r--advtrains/advtrains_signals_ks/depends.txt2
-rw-r--r--advtrains/advtrains_signals_ks/init.lua255
-rw-r--r--advtrains/advtrains_signals_ks/init_degrotate_nodes.lua94
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_dist.obj270
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_main.obj286
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_dist.obj1989
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_main.obj2719
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr0.obj4280
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr30.obj4293
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr45.obj4301
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr60.obj4310
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_mast.obj366
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_mast_smr0.obj141
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_mast_smr30.obj141
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_mast_smr45.obj141
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_mast_smr60.obj141
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sht_smr0.obj2942
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sht_smr30.obj2940
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sht_smr45.obj2933
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sht_smr60.obj2950
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sign_smr0.obj134
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sign_smr30.obj135
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sign_smr45.obj135
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_sign_smr60.obj135
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_zs_bottom.obj956
-rw-r--r--advtrains/advtrains_signals_ks/models/advtrains_signals_ks_zs_top.obj835
-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_aspect_green.pngbin0 -> 155 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_aspect_red.pngbin0 -> 155 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_aspect_white.pngbin0 -> 155 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_aspect_yellow.pngbin0 -> 155 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_head.pngbin0 -> 260 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_hs_inv.pngbin0 -> 210 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ltm_danger.pngbin0 -> 227 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ltm_free.pngbin0 -> 215 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ltm_shunt.pngbin0 -> 238 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ltm_shuntd.pngbin0 -> 239 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ltm_slow.pngbin0 -> 219 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_mast.pngbin0 -> 224 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_ra_inv.pngbin0 -> 252 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_sign_12.pngbin0 -> 197 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_sign_16.pngbin0 -> 190 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_sign_8.pngbin0 -> 174 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_sign_e.pngbin0 -> 166 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_sign_hfs.pngbin0 -> 193 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_signpost.pngbin0 -> 224 bytes-rw-r--r--advtrains/advtrains_signals_ks/textures/advtrains_signals_ks_zs_7.pngbin0 -> 251 bytes-rw-r--r--advtrains/advtrains_train_industrial/depends.txt3
-rw-r--r--advtrains/advtrains_train_industrial/init.lua107
-rw-r--r--advtrains/advtrains_train_industrial/models/advtrains_engine_industrial.b3dbin0 -> 138641 bytes-rw-r--r--advtrains/advtrains_train_industrial/models/advtrains_engine_industrial_big.b3dbin0 -> 283441 bytes-rw-r--r--advtrains/advtrains_train_industrial/models/advtrains_wagon_tank.b3dbin0 -> 155412 bytes-rw-r--r--advtrains/advtrains_train_industrial/models/advtrains_wagon_wood.b3dbin0 -> 182813 bytes-rw-r--r--advtrains/advtrains_train_industrial/sounds/advtrains_industrial_horn.oggbin0 -> 54380 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial.pngbin0 -> 23044 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_big.pngbin0 -> 23765 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_inv.pngbin0 -> 381 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank.pngbin0 -> 23411 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank_inv.pngbin0 -> 408 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood.pngbin0 -> 21622 bytes-rw-r--r--advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood_inv.pngbin0 -> 316 bytes-rw-r--r--advtrains/advtrains_train_japan/depends.txt3
-rw-r--r--advtrains/advtrains_train_japan/init.lua140
-rw-r--r--advtrains/advtrains_train_japan/models/advtrains_engine_japan.b3dbin0 -> 437635 bytes-rw-r--r--advtrains/advtrains_train_japan/models/advtrains_wagon_japan.b3dbin0 -> 554284 bytes-rw-r--r--advtrains/advtrains_train_japan/sounds/advtrains_japan_horn.oggbin0 -> 39307 bytes-rw-r--r--advtrains/advtrains_train_japan/textures/advtrains_engine_japan.pngbin0 -> 27935 bytes-rw-r--r--advtrains/advtrains_train_japan/textures/advtrains_engine_japan_inv.pngbin0 -> 434 bytes-rw-r--r--advtrains/advtrains_train_japan/textures/advtrains_wagon_japan.pngbin0 -> 54396 bytes-rw-r--r--advtrains/advtrains_train_japan/textures/advtrains_wagon_japan_inv.pngbin0 -> 400 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/depends.txt3
-rwxr-xr-xadvtrains/advtrains_train_steam/init.lua253
-rwxr-xr-xadvtrains/advtrains_train_steam/models/advtrains_detailed_steam_engine.b3dbin0 -> 472151 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/models/advtrains_engine_steam.b3dbin0 -> 437126 bytes-rw-r--r--advtrains/advtrains_train_steam/models/advtrains_passenger_wagon.b3dbin0 -> 145287 bytes-rw-r--r--advtrains/advtrains_train_steam/models/advtrains_wagon.b3dbin0 -> 107352 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/models/advtrains_wagon_box.b3dbin0 -> 50385 bytes-rw-r--r--advtrains/advtrains_train_steam/screenshot.pngbin0 -> 809738 bytes-rw-r--r--advtrains/advtrains_train_steam/sounds/advtrains_steam_loop.oggbin0 -> 239037 bytes-rw-r--r--advtrains/advtrains_train_steam/sounds/advtrains_steam_whistle.oggbin0 -> 56532 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_detailed_engine_steam_inv.pngbin0 -> 462 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_detailed_steam_engine.pngbin0 -> 30519 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_engine_steam.pngbin0 -> 31915 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_engine_steam_inv.pngbin0 -> 469 bytes-rw-r--r--advtrains/advtrains_train_steam/textures/advtrains_wagon.pngbin0 -> 17701 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_wagon_box.pngbin0 -> 15197 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_wagon_box_inv.pngbin0 -> 347 bytes-rwxr-xr-xadvtrains/advtrains_train_steam/textures/advtrains_wagon_inv.pngbin0 -> 699 bytes-rw-r--r--advtrains/advtrains_train_subway/depends.txt3
-rw-r--r--advtrains/advtrains_train_subway/init.lua152
-rw-r--r--advtrains/advtrains_train_subway/models/advtrains_subway_wagon.b3dbin0 -> 460013 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_arrive.oggbin0 -> 22658 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_dclose.oggbin0 -> 14298 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_depart.oggbin0 -> 39161 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_dopen.oggbin0 -> 14307 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_horn.oggbin0 -> 14370 bytes-rw-r--r--advtrains/advtrains_train_subway/sounds/advtrains_subway_loop.oggbin0 -> 33319 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon.pngbin0 -> 2102 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_inv.pngbin0 -> 842 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line.pngbin0 -> 155 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0.pngbin0 -> 222 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0_.pngbin0 -> 166 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1.pngbin0 -> 218 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1_.pngbin0 -> 172 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2.pngbin0 -> 229 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2_.pngbin0 -> 173 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3.pngbin0 -> 219 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3_.pngbin0 -> 168 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4.pngbin0 -> 237 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4_.pngbin0 -> 169 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5.pngbin0 -> 228 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5_.pngbin0 -> 173 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6.pngbin0 -> 227 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6_.pngbin0 -> 174 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7.pngbin0 -> 233 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7_.pngbin0 -> 169 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8.pngbin0 -> 218 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8_.pngbin0 -> 167 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9.pngbin0 -> 228 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9_.pngbin0 -> 173 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_lineX.pngbin0 -> 239 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_0.pngbin0 -> 165 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_1.pngbin0 -> 170 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_2.pngbin0 -> 171 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_3.pngbin0 -> 165 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_4.pngbin0 -> 166 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_5.pngbin0 -> 171 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_6.pngbin0 -> 171 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_7.pngbin0 -> 166 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_8.pngbin0 -> 167 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_9.pngbin0 -> 171 bytes-rw-r--r--advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_livery.pngbin0 -> 26276 bytes-rw-r--r--advtrains/advtrains_train_track/depends.txt4
-rw-r--r--advtrains/advtrains_train_track/init.lua409
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_bumper_st.b3dbin0 -> 32927 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_bumper_st_30.b3dbin0 -> 48546 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_bumper_st_45.b3dbin0 -> 32926 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_bumper_st_60.b3dbin0 -> 48546 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_cr.b3dbin0 -> 28040 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_cr_30.b3dbin0 -> 28043 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_cr_45.b3dbin0 -> 34483 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_cr_60.b3dbin0 -> 34483 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_l.obj2335
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_l_30.obj1882
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_l_45.obj2710
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_l_60.obj1888
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_r.obj2335
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_r_30.obj1889
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_r_45.obj2710
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_r_60.obj1882
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_s.obj2339
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_s_30.obj1888
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_s_45.obj2707
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_s3_s_60.obj1888
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_st.b3dbin0 -> 10712 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_st_30.b3dbin0 -> 20043 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_st_45.b3dbin0 -> 12235 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_st_60.b3dbin0 -> 20043 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlcr.b3dbin0 -> 36203 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlcr_30.b3dbin0 -> 39958 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlcr_45.b3dbin0 -> 41302 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlcr_60.b3dbin0 -> 46270 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlst.b3dbin0 -> 36203 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlst_30.b3dbin0 -> 39958 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlst_45.b3dbin0 -> 41302 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swlst_60.b3dbin0 -> 46270 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrcr.b3dbin0 -> 36203 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrcr_30.b3dbin0 -> 46270 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrcr_45.b3dbin0 -> 41302 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrcr_60.b3dbin0 -> 39958 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrst.b3dbin0 -> 36203 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrst_30.b3dbin0 -> 46270 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrst_45.b3dbin0 -> 41302 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_swrst_60.b3dbin0 -> 39958 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_l.obj1936
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_l_30.obj1414
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_l_45.obj2033
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_l_60.obj1390
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_r.obj1929
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_r_30.obj1402
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_r_45.obj2037
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_sy_r_60.obj1402
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst1.obj348
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst1_45.obj434
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst2.obj372
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst2_45.obj462
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst31.obj348
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst32.obj372
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_vst33.obj388
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing4590_st.obj2196
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_30l.obj2417
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_30r.obj2378
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_45l.obj1576
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_45r.obj1557
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_60l.obj2303
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing90plusx_60r.obj2280
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing_st.obj4963
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing_st_30.obj3476
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing_st_45.obj3177
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xing_st_60.obj3492
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_30l45r.obj2317
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_30r45l.obj2294
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60l30l.obj2556
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60l30r.obj2556
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60l45r.obj2206
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60l60r.obj2229
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60r-46l.obj2149
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60r30l.obj2539
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60r30r.obj2539
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_dtrack_xingdiag_60r45l.obj2223
-rw-r--r--advtrains/advtrains_train_track/models/advtrains_track_cr.b3dbin0 -> 8023 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_track_st.b3dbin0 -> 15831 bytes-rw-r--r--advtrains/advtrains_train_track/models/advtrains_track_st_45.b3dbin0 -> 8935 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_atc_placer.pngbin0 -> 1259 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_bumper_placer.pngbin0 -> 2213 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_detector_placer.pngbin0 -> 1253 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_load_placer.pngbin0 -> 1248 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_placer.pngbin0 -> 1097 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_rail.pngbin0 -> 4582 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_s3_placer.pngbin0 -> 619 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared.pngbin0 -> 7141 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared_atc.pngbin0 -> 7215 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared_detector_off.pngbin0 -> 7180 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared_detector_on.pngbin0 -> 7181 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared_load.pngbin0 -> 7339 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_shared_unload.pngbin0 -> 7338 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_slopeplacer.pngbin0 -> 2415 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_sy_placer.pngbin0 -> 625 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_unload_placer.pngbin0 -> 1260 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_xing4590_placer.pngbin0 -> 468 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_xing_placer.pngbin0 -> 549 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_dtrack_xingdiag_placer.pngbin0 -> 557 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_cr.pngbin0 -> 33370 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_cr_45.pngbin0 -> 33938 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_placer.pngbin0 -> 32349 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_st.pngbin0 -> 20405 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_st_45.pngbin0 -> 39977 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swlcr.pngbin0 -> 33378 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swlcr_45.pngbin0 -> 45772 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swlst.pngbin0 -> 32321 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swlst_45.pngbin0 -> 46408 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swrcr.pngbin0 -> 33670 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swrcr_45.pngbin0 -> 46865 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swrst.pngbin0 -> 32654 bytes-rw-r--r--advtrains/advtrains_train_track/textures/advtrains_track_swrst_45.pngbin0 -> 47636 bytes-rw-r--r--advtrains/assets/AdvTrains_Additions.zipbin0 -> 889352 bytes-rw-r--r--advtrains/assets/Weichenhebel-CooleLokAnimiert.zipbin0 -> 154594 bytes-rw-r--r--advtrains/assets/Weichenhebel-CooleLokAnimiert/dampflock4pipe_animated.blendbin0 -> 859028 bytes-rw-r--r--advtrains/assets/advtrains_across.xcfbin0 -> 13559 bytes-rw-r--r--advtrains/assets/advtrains_newlocomotive.xcfbin0 -> 7462378 bytes-rw-r--r--advtrains/assets/advtrains_wagon.pngbin0 -> 72273 bytes-rw-r--r--advtrains/assets/andreaskreuz.blendbin0 -> 507904 bytes-rw-r--r--advtrains/assets/andreaskreuz.blend1bin0 -> 507904 bytes-rw-r--r--advtrains/assets/andreaskreuz.pngbin0 -> 69701 bytes-rw-r--r--advtrains/assets/at_il_tcb_node.blendbin0 -> 483100 bytes-rw-r--r--advtrains/assets/blender/engine-with-animation.blendbin0 -> 599504 bytes-rw-r--r--advtrains/assets/blender/engine-with-animation_newtry.blendbin0 -> 638904 bytes-rw-r--r--advtrains/assets/blender/gleis/advtrains_dtrack_shared.xcfbin0 -> 75136 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/detectorpart.pngbin0 -> 857 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_my.blendbin0 -> 654772 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_my_rt.blendbin0 -> 847060 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_my_rt_final.blendbin0 -> 1015668 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_my_rt_switches.blendbin0 -> 2184236 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_my_rt_switches2.blendbin0 -> 2139340 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_together.blendbin0 -> 1016920 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_together.pngbin0 -> 233544 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_together2.pngbin0 -> 312891 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_together3.pngbin0 -> 309398 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_verticals.blendbin0 -> 550748 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_verticals3.blendbin0 -> 591800 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_verticals45.blendbin0 -> 547788 bytes-rw-r--r--advtrains/assets/blender/gleis/before_redo/rail_verticals45.blend11bin0 -> 547300 bytes-rw-r--r--advtrains/assets/blender/gleis/infos/Grafik_weiche.pngbin0 -> 361700 bytes-rw-r--r--advtrains/assets/blender/gleis/infos/breite1
-rw-r--r--advtrains/assets/blender/gleis/licence.txt~0
-rw-r--r--advtrains/assets/blender/gleis/rail_crossings.blendbin0 -> 444480 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_moreturnouts.blendbin0 -> 468819 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_redo.blendbin0 -> 1929280 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_redo_bk_curves.blendbin0 -> 791704 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_redo_bk_rswit.blendbin0 -> 1567640 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_redo_bk_straight.blendbin0 -> 707632 bytes-rw-r--r--advtrains/assets/blender/gleis/rail_redo_bk_swit.blendbin0 -> 1189696 bytes-rw-r--r--advtrains/assets/blender/gleis/texturen/rail.pngbin0 -> 2616 bytes-rw-r--r--advtrains/assets/blender/gleis/texturen/uv.pngbin0 -> 2343 bytes-rw-r--r--advtrains/assets/blender/gleis/uv_rails_all.pngbin0 -> 3692 bytes-rw-r--r--advtrains/assets/blender/industrial/industry_loc.blendbin0 -> 652640 bytes-rw-r--r--advtrains/assets/blender/industrial/industry_loc.blend11bin0 -> 659096 bytes-rw-r--r--advtrains/assets/blender/industrial/industry_oil_ wagong.blendbin0 -> 693488 bytes-rw-r--r--advtrains/assets/blender/industrial/industry_tree_wagong.blendbin0 -> 640056 bytes-rw-r--r--advtrains/assets/blender/industrial/industry_tree_wagong.pngbin0 -> 316 bytes-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_head_dist.obj270
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_head_main.obj286
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_lamps_dist.obj1989
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_lamps_main.obj2719
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr0.mtl42
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr0.obj4280
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr30.mtl42
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr30.obj4293
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr45.mtl42
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr45.obj4301
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr60.mtl42
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_main_smr60.obj4310
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_mast.obj366
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_mast_smr0.obj141
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_mast_smr30.obj141
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_mast_smr45.obj141
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_mast_smr60.obj141
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_zs_bottom.obj956
-rw-r--r--advtrains/assets/blender/ks/advtrains_signals_ks_zs_top.obj835
-rw-r--r--advtrains/assets/blender/ks/signal_ks.blendbin0 -> 770684 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks.blend1bin0 -> 770684 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_export.blendbin0 -> 880352 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_export.blend1bin0 -> 880352 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_exportd.blendbin0 -> 535508 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_exportd.blend1bin0 -> 535316 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh.blendbin0 -> 703884 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh.blend1bin0 -> 703884 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_final.blendbin0 -> 652332 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_final.blend1bin0 -> 661328 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_lampuv.pngbin0 -> 211402 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_lampuv.xcfbin0 -> 1558 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_shuntsig.blendbin0 -> 593572 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_singlemesh_shuntsig.blend1bin0 -> 593572 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_splt.blendbin0 -> 884984 bytes-rw-r--r--advtrains/assets/blender/ks/signal_ks_splt.blend1bin0 -> 867672 bytes-rw-r--r--advtrains/assets/blender/locomotive.blendbin0 -> 459600 bytes-rw-r--r--advtrains/assets/blender/magnet_track.blendbin0 -> 516836 bytes-rw-r--r--advtrains/assets/blender/mbb/advtrains_engine_japan.xcfbin0 -> 2621842 bytes-rw-r--r--advtrains/assets/blender/mbb/jpn_engine_anim_uv.pngbin0 -> 274484 bytes-rw-r--r--advtrains/assets/blender/mbb/jpn_wagon_anim_uv.pngbin0 -> 206208 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive.blendbin0 -> 715116 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive.blend1bin0 -> 715116 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive.pngbin0 -> 204978 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive.xcfbin0 -> 957175 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_anim.blendbin0 -> 1149060 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_anim.blend1bin0 -> 1170088 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_anim_uv.blendbin0 -> 1146996 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_anim_uv.blend1bin0 -> 1144108 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_windows.blendbin0 -> 790808 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_windows.blend1bin0 -> 790808 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_windows_join.blendbin0 -> 762448 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_japanlocomotive_windows_join.blend1bin0 -> 767528 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_locomotive.blendbin0 -> 732124 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_wagong.blendbin0 -> 471140 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_wagong.blend1bin0 -> 518316 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_wagong_uv.blendbin0 -> 571364 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_wagong_uv.blend1bin0 -> 575708 bytes-rw-r--r--advtrains/assets/blender/mbb/modern_wagong_uv.pngbin0 -> 189564 bytes-rw-r--r--advtrains/assets/blender/mbb/prellbock.blendbin0 -> 745176 bytes-rw-r--r--advtrains/assets/blender/mbb/prellbock.blend1bin0 -> 485416 bytes-rw-r--r--advtrains/assets/blender/mbb/prellbock.uv.pngbin0 -> 4034 bytes-rw-r--r--advtrains/assets/blender/mbb/regio-lokomotive.blendbin0 -> 704160 bytes-rw-r--r--advtrains/assets/blender/mbb/regio-waron.blendbin0 -> 545620 bytes-rw-r--r--advtrains/assets/blender/mbb/retrosignal.blendbin0 -> 488920 bytes-rw-r--r--advtrains/assets/blender/mbb/retrosignal.blend1bin0 -> 507800 bytes-rw-r--r--advtrains/assets/blender/mbb/signal(2)_hoch.blendbin0 -> 472092 bytes-rw-r--r--advtrains/assets/blender/mbb/signal(2)_unten.blendbin0 -> 472092 bytes-rw-r--r--advtrains/assets/blender/mbb/signal.blendbin0 -> 570336 bytes-rw-r--r--advtrains/assets/blender/mbb/signal.blend1bin0 -> 570336 bytes-rw-r--r--advtrains/assets/blender/mbb/signal.pngbin0 -> 244314 bytes-rw-r--r--advtrains/assets/blender/mbb/signal.xcfbin0 -> 881142 bytes-rw-r--r--advtrains/assets/blender/mbb/signal2.pngbin0 -> 39924 bytes-rw-r--r--advtrains/assets/blender/mbb/tr-logo.pngbin0 -> 197 bytes-rw-r--r--advtrains/assets/blender/mbb/weichenhebel1.blendbin0 -> 493028 bytes-rw-r--r--advtrains/assets/blender/mbb/weichenhebel2.blendbin0 -> 492996 bytes-rw-r--r--advtrains/assets/blender/newlocomotive.blendbin0 -> 603376 bytes-rw-r--r--advtrains/assets/blender/newlocomotive_uvs.pngbin0 -> 175030 bytes-rw-r--r--advtrains/assets/blender/newwagon.blendbin0 -> 542188 bytes-rw-r--r--advtrains/assets/blender/newwagon.pngbin0 -> 108762 bytes-rw-r--r--advtrains/assets/blender/subway-train.blendbin0 -> 518888 bytes-rw-r--r--advtrains/assets/blender/subway-train.pngbin0 -> 96773 bytes-rw-r--r--advtrains/assets/blender/subway-train.xcfbin0 -> 92558 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate.blendbin0 -> 568668 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate_mirrored.blendbin0 -> 798328 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate_mirrored_solidify.blendbin0 -> 879916 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate_mirrored_solidify_uv.blendbin0 -> 836620 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate_mirrored_solidify_uv.pngbin0 -> 177111 bytes-rw-r--r--advtrains/assets/blender/subway-train_animate_mirrored_solidify_uv.xcfbin0 -> 369791 bytes-rw-r--r--advtrains/assets/blender/trackplane.blendbin0 -> 462200 bytes-rw-r--r--advtrains/assets/blender/trackvertical1.blendbin0 -> 453656 bytes-rw-r--r--advtrains/assets/blender/trackvertical1.pngbin0 -> 59146 bytes-rw-r--r--advtrains/assets/blender/trackvertical2.blendbin0 -> 459216 bytes-rw-r--r--advtrains/assets/blender/trackvertical2.pngbin0 -> 66755 bytes-rw-r--r--advtrains/assets/dampflock4.blendbin0 -> 1000628 bytes-rw-r--r--advtrains/assets/img_large/tcbex1.pngbin0 -> 546408 bytes-rw-r--r--advtrains/assets/img_large/tcbex2.pngbin0 -> 174379 bytes-rw-r--r--advtrains/assets/img_large/tcbex3.pngbin0 -> 927810 bytes-rw-r--r--advtrains/assets/init.lua0
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/0_home_moritz_Home_Projekte_Minetest_minetest_m___s_assets_lyx_img_screenshot_20180830_142551.eps34162
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/0_home_moritz_Home_Projekte_Minetest_minetest_m___s_assets_lyx_img_screenshot_20180830_142551.pngbin0 -> 257012 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/10_home_moritz_Home_Projekte_Minetest_minetest_____lyx_img_Bildschirmfoto_2019-01-15_19-28-09.pngbin0 -> 135195 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/11_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_arslin_ex1.pngbin0 -> 32940 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/12_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_arslin_ex2.pngbin0 -> 2205 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/13_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_ars_ex1.pngbin0 -> 65581 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/1_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-26-35.eps69401
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/1_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-26-35.pngbin0 -> 392215 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/2_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-32-48.eps62462
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/2_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-32-48.pngbin0 -> 467151 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/3_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-27-25.eps15074
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/3_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-27-25.pngbin0 -> 58974 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/4_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-28-32.eps33895
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/4_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-28-32.pngbin0 -> 180489 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/5_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-51-25.eps41321
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/5_home_moritz_Home_Projekte_Minetest_minetest_m____lyx_img_Bildschirmfoto_2018-08-30_14-51-25.pngbin0 -> 298898 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/6_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex1.eps18740
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/6_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex1.pngbin0 -> 9681 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/7_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex2.eps12586
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/7_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex2.pngbin0 -> 9374 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/8_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_assign_signal.eps27704
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/8_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_assign_signal.pngbin0 -> 117671 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/9_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex3.eps18740
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/9_home_moritz_Home_Projekte_Minetest_minetest_mods_advtrains_assets_lyx_img_route_ex3.pngbin0 -> 11544 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.4ct30
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.4tc29
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.aux4
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.css117
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.dvibin0 -> 65604 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.html830
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.idvbin0 -> 569 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.lg166
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.log555
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.pdfbin0 -> 1419828 bytes-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.tex745
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.tex.dep7
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.tex.dep-pdf57
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.tmp2
-rw-r--r--advtrains/assets/interlocking.html.LyXconv/interlocking.xref73
-rw-r--r--advtrains/assets/interlocking.lyx2026
-rw-r--r--advtrains/assets/interlocking.lyx~2017
-rw-r--r--advtrains/assets/larger rails.xcfbin0 -> 1239132 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2018-08-30_14-26-35.pngbin0 -> 392215 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2018-08-30_14-27-25.pngbin0 -> 58974 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2018-08-30_14-28-32.pngbin0 -> 180489 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2018-08-30_14-32-48.pngbin0 -> 467151 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2018-08-30_14-51-25.pngbin0 -> 298898 bytes-rw-r--r--advtrains/assets/lyx_img/Bildschirmfoto_2019-01-15_19-28-09.pngbin0 -> 135195 bytes-rw-r--r--advtrains/assets/lyx_img/ars_ex1.pngbin0 -> 65581 bytes-rw-r--r--advtrains/assets/lyx_img/arslin_ex1.pngbin0 -> 32940 bytes-rw-r--r--advtrains/assets/lyx_img/arslin_ex2.pngbin0 -> 2205 bytes-rw-r--r--advtrains/assets/lyx_img/assign_signal.pngbin0 -> 117671 bytes-rw-r--r--advtrains/assets/lyx_img/route_ex1.pngbin0 -> 9681 bytes-rw-r--r--advtrains/assets/lyx_img/route_ex2.pngbin0 -> 9374 bytes-rw-r--r--advtrains/assets/lyx_img/route_ex3.pngbin0 -> 11544 bytes-rw-r--r--advtrains/assets/lyx_img/screenshot_20180830_142551.pngbin0 -> 257012 bytes-rw-r--r--advtrains/assets/magleves_lockomotive.blendbin0 -> 747680 bytes-rw-r--r--advtrains/assets/magleves_track.blendbin0 -> 464960 bytes-rw-r--r--advtrains/assets/magleves_wagon.blendbin0 -> 709904 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/0_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_09-43-29.pngbin0 -> 9345 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/10_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2016-09-17_09-48-54.pngbin0 -> 14032 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/11_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2016-09-17_09-50-27.pngbin0 -> 4246 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/12_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2016-09-17_09-51-02.pngbin0 -> 3704 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/13_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2016-09-17_09-58-39.pngbin0 -> 6880 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/14_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2016-09-17_09-58-20.pngbin0 -> 10375 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/15_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2017-03-09_11-33-09.pngbin0 -> 3496 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/16_home_moritz_Home_Projekte_Minetest_minetest____nual_img_Bildschirmfoto_2017-03-09_11-42-49.pngbin0 -> 25657 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/17_home_moritz_Home_Projekte_Minetest_minetest____ssets_manual_img_screenshot_20161203_231622.pngbin0 -> 108256 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/1_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-04-12.pngbin0 -> 72813 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/2_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-04-57.pngbin0 -> 105448 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/3_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-05-51.pngbin0 -> 93538 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/4_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-07-13.pngbin0 -> 83521 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/5_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_09-56-34.pngbin0 -> 2789 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/6_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-08-02.pngbin0 -> 107762 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/7_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-09-01.pngbin0 -> 112579 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/8_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_10-10-15.pngbin0 -> 114075 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/9_home_moritz_Home_Projekte_Minetest_minetest_m___nual_img_Bildschirmfoto_2016-09-17_09-45-38.pngbin0 -> 16695 bytes-rw-r--r--advtrains/assets/manual.html.LyXconv/manual.css112
-rw-r--r--advtrains/assets/manual.html.LyXconv/manual.html236
-rw-r--r--advtrains/assets/manual.lyx630
-rw-r--r--advtrains/assets/manual.odtbin0 -> 1047714 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-43-29.pngbin0 -> 9345 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-45-38.pngbin0 -> 16695 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-46-21.pngbin0 -> 18834 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-48-54.pngbin0 -> 14032 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-50-27.pngbin0 -> 4246 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-51-02.pngbin0 -> 3704 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-52-17.pngbin0 -> 13788 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-52-40.pngbin0 -> 13889 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-53-01.pngbin0 -> 15473 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-56-34.pngbin0 -> 2789 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-58-20.pngbin0 -> 10375 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_09-58-39.pngbin0 -> 6880 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-04-12.pngbin0 -> 72813 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-04-57.pngbin0 -> 105448 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-05-51.pngbin0 -> 93538 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-07-13.pngbin0 -> 83521 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-08-02.pngbin0 -> 107762 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-09-01.pngbin0 -> 112579 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-09-17_10-10-15.pngbin0 -> 114075 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2016-12-13_19-25-26.pngbin0 -> 15044 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2017-03-09_11-33-09.pngbin0 -> 3496 bytes-rw-r--r--advtrains/assets/manual_img/Bildschirmfoto_2017-03-09_11-42-49.pngbin0 -> 25657 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_223055.pngbin0 -> 824772 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_223328.pngbin0 -> 526640 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_230644.pngbin0 -> 610738 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_230648.pngbin0 -> 555494 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_231622.pngbin0 -> 108256 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_232335.pngbin0 -> 1607786 bytes-rw-r--r--advtrains/assets/manual_img/screenshot_20161203_232545.pngbin0 -> 1527310 bytes-rw-r--r--advtrains/assets/mbbrailtextures/advtrains_dtrack_rail.pngbin0 -> 4582 bytes-rw-r--r--advtrains/assets/mbbrailtextures/advtrains_dtrack_rail_atc.pngbin0 -> 4596 bytes-rw-r--r--advtrains/assets/mbbrailtextures/advtrains_dtrack_rail_detector_on.pngbin0 -> 4579 bytes-rw-r--r--advtrains/assets/modern_japan_lockomotive.blendbin0 -> 892480 bytes-rw-r--r--advtrains/assets/modern_japan_wagon.blendbin0 -> 856968 bytes-rw-r--r--advtrains/assets/oldmodels/locomotive.b3dbin0 -> 181112 bytes-rw-r--r--advtrains/assets/oldmodels/trackvertical1.b3dbin0 -> 629 bytes-rw-r--r--advtrains/assets/oldmodels/trackvertical2.b3dbin0 -> 869 bytes-rw-r--r--advtrains/assets/schild.blendbin0 -> 513160 bytes-rw-r--r--advtrains/assets/schild.blend1bin0 -> 513160 bytes-rw-r--r--advtrains/assets/schild.pngbin0 -> 28705 bytes-rw-r--r--advtrains/assets/schild_flaeche.pngbin0 -> 526 bytes-rw-r--r--advtrains/assets/signal_wall.blendbin0 -> 512620 bytes-rw-r--r--advtrains/assets/signal_wall.pngbin0 -> 107155 bytes-rw-r--r--advtrains/assets/signal_wall_ceiling.blendbin0 -> 512620 bytes-rw-r--r--advtrains/assets/uban_fancy.blendbin0 -> 1020740 bytes-rw-r--r--advtrains/assets/wagonfancytexture.pngbin0 -> 42023 bytes-rw-r--r--advtrains/assets/wagong_fancy.blendbin0 -> 1044484 bytes-rw-r--r--advtrains/atc_command.txt83
-rw-r--r--advtrains/description.txt10
-rw-r--r--advtrains/license.txt198
-rw-r--r--advtrains/license_media.txt68
-rw-r--r--advtrains/modpack.txt0
-rw-r--r--advtrains/privilege_guide.txt43
-rw-r--r--advtrains/readme.txt47
-rw-r--r--advtrains/screenshot.pngbin0 -> 809738 bytes
729 files changed, 508791 insertions, 8 deletions
diff --git a/advtrains/.gitignore b/advtrains/.gitignore
new file mode 100644
index 0000000..b3180de
--- /dev/null
+++ b/advtrains/.gitignore
@@ -0,0 +1,3 @@
+## Eclipse project files & directories
+.project
+.settings
diff --git a/advtrains/api_doc.txt b/advtrains/advtrains/api_doc.txt
index 0256713..0256713 100644
--- a/advtrains/api_doc.txt
+++ b/advtrains/advtrains/api_doc.txt
diff --git a/advtrains/atc.lua b/advtrains/advtrains/atc.lua
index 20f52b9..20f52b9 100644
--- a/advtrains/atc.lua
+++ b/advtrains/advtrains/atc.lua
diff --git a/advtrains/copytool.lua b/advtrains/advtrains/copytool.lua
index dc18081..dc18081 100644
--- a/advtrains/copytool.lua
+++ b/advtrains/advtrains/copytool.lua
diff --git a/advtrains/couple.lua b/advtrains/advtrains/couple.lua
index 1b213c2..1b213c2 100644
--- a/advtrains/couple.lua
+++ b/advtrains/advtrains/couple.lua
diff --git a/advtrains/craft_items.lua b/advtrains/advtrains/craft_items.lua
index 0e693eb..0e693eb 100644
--- a/advtrains/craft_items.lua
+++ b/advtrains/advtrains/craft_items.lua
diff --git a/advtrains/crafting.lua b/advtrains/advtrains/crafting.lua
index cb0813c..cb0813c 100644
--- a/advtrains/crafting.lua
+++ b/advtrains/advtrains/crafting.lua
diff --git a/advtrains/debugitems.lua b/advtrains/advtrains/debugitems.lua
index e672308..e672308 100644
--- a/advtrains/debugitems.lua
+++ b/advtrains/advtrains/debugitems.lua
diff --git a/advtrains/debugringbuffer.lua b/advtrains/advtrains/debugringbuffer.lua
index 704c0c5..704c0c5 100644
--- a/advtrains/debugringbuffer.lua
+++ b/advtrains/advtrains/debugringbuffer.lua
diff --git a/advtrains/depends.txt b/advtrains/advtrains/depends.txt
index 1815e54..1815e54 100644
--- a/advtrains/depends.txt
+++ b/advtrains/advtrains/depends.txt
diff --git a/advtrains/advtrains/description.txt b/advtrains/advtrains/description.txt
new file mode 100644
index 0000000..bb13b97
--- /dev/null
+++ b/advtrains/advtrains/description.txt
@@ -0,0 +1,8 @@
+Advanced Trains v1.3.8, by orwell and contributors. Also see readme.
+Good-looking, realistic trains for minetest.
+
+For crafting recipes, see manual.pdf
+
+Website: http://advtrains.bleipb.de/
+Manual: https://github.com/orwell96/advtrains/blob/master/manual.pdf
+Forum : https://forum.minetest.net/viewtopic.php?f=11&t=14726
diff --git a/advtrains/helpers.lua b/advtrains/advtrains/helpers.lua
index 65f25ba..65f25ba 100644
--- a/advtrains/helpers.lua
+++ b/advtrains/advtrains/helpers.lua
diff --git a/advtrains/init.lua b/advtrains/advtrains/init.lua
index d6c3c92..d6c3c92 100644
--- a/advtrains/init.lua
+++ b/advtrains/advtrains/init.lua
diff --git a/advtrains/locale/advtrains.de.tr b/advtrains/advtrains/locale/advtrains.de.tr
index f0d797f..f0d797f 100644
--- a/advtrains/locale/advtrains.de.tr
+++ b/advtrains/advtrains/locale/advtrains.de.tr
diff --git a/advtrains/locale/advtrains.zh_CN.tr b/advtrains/advtrains/locale/advtrains.zh_CN.tr
index ef9c99b..ef9c99b 100644
--- a/advtrains/locale/advtrains.zh_CN.tr
+++ b/advtrains/advtrains/locale/advtrains.zh_CN.tr
diff --git a/advtrains/log.lua b/advtrains/advtrains/log.lua
index d7053a2..d7053a2 100644
--- a/advtrains/log.lua
+++ b/advtrains/advtrains/log.lua
diff --git a/advtrains/lzb.lua b/advtrains/advtrains/lzb.lua
index 6cbf4ab..6cbf4ab 100644
--- a/advtrains/lzb.lua
+++ b/advtrains/advtrains/lzb.lua
diff --git a/advtrains/misc_nodes.lua b/advtrains/advtrains/misc_nodes.lua
index 93d5572..93d5572 100644
--- a/advtrains/misc_nodes.lua
+++ b/advtrains/advtrains/misc_nodes.lua
diff --git a/advtrains/models/advtrains_across.obj b/advtrains/advtrains/models/advtrains_across.obj
index 4ebf393..4ebf393 100644
--- a/advtrains/models/advtrains_across.obj
+++ b/advtrains/advtrains/models/advtrains_across.obj
diff --git a/advtrains/models/advtrains_dtrack_bumper_st.b3d b/advtrains/advtrains/models/advtrains_dtrack_bumper_st.b3d
index a6d9745..a6d9745 100644
--- a/advtrains/models/advtrains_dtrack_bumper_st.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_bumper_st.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_bumper_st_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_30.b3d
index 5f5b3f4..5f5b3f4 100644
--- a/advtrains/models/advtrains_dtrack_bumper_st_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_bumper_st_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_45.b3d
index f13ae75..f13ae75 100644
--- a/advtrains/models/advtrains_dtrack_bumper_st_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_bumper_st_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_60.b3d
index 59a2285..59a2285 100644
--- a/advtrains/models/advtrains_dtrack_bumper_st_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_bumper_st_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_cr.b3d b/advtrains/advtrains/models/advtrains_dtrack_cr.b3d
index c708292..c708292 100644
--- a/advtrains/models/advtrains_dtrack_cr.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_cr.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_cr_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_cr_30.b3d
index 7ca0bda..7ca0bda 100644
--- a/advtrains/models/advtrains_dtrack_cr_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_cr_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_cr_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_cr_45.b3d
index b22ea0d..b22ea0d 100644
--- a/advtrains/models/advtrains_dtrack_cr_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_cr_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_cr_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_cr_60.b3d
index e9b16d6..e9b16d6 100644
--- a/advtrains/models/advtrains_dtrack_cr_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_cr_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_st.b3d b/advtrains/advtrains/models/advtrains_dtrack_st.b3d
index c240416..c240416 100644
--- a/advtrains/models/advtrains_dtrack_st.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_st.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_st_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_st_30.b3d
index fd77e66..fd77e66 100644
--- a/advtrains/models/advtrains_dtrack_st_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_st_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_st_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_st_45.b3d
index af3afb1..af3afb1 100644
--- a/advtrains/models/advtrains_dtrack_st_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_st_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_st_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_st_60.b3d
index 6cb19e6..6cb19e6 100644
--- a/advtrains/models/advtrains_dtrack_st_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_st_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlcr.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlcr.b3d
index 8b1ac0e..8b1ac0e 100644
--- a/advtrains/models/advtrains_dtrack_swlcr.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlcr.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlcr_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlcr_30.b3d
index 6def7ab..6def7ab 100644
--- a/advtrains/models/advtrains_dtrack_swlcr_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlcr_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlcr_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlcr_45.b3d
index cc874ca..cc874ca 100644
--- a/advtrains/models/advtrains_dtrack_swlcr_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlcr_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlcr_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlcr_60.b3d
index 1472a00..1472a00 100644
--- a/advtrains/models/advtrains_dtrack_swlcr_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlcr_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlst.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlst.b3d
index ecdb326..ecdb326 100644
--- a/advtrains/models/advtrains_dtrack_swlst.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlst.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlst_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlst_30.b3d
index fd6e91d..fd6e91d 100644
--- a/advtrains/models/advtrains_dtrack_swlst_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlst_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlst_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlst_45.b3d
index dae694e..dae694e 100644
--- a/advtrains/models/advtrains_dtrack_swlst_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlst_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swlst_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_swlst_60.b3d
index 8f2b0e2..8f2b0e2 100644
--- a/advtrains/models/advtrains_dtrack_swlst_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swlst_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrcr.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrcr.b3d
index 4610826..4610826 100644
--- a/advtrains/models/advtrains_dtrack_swrcr.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrcr.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrcr_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrcr_30.b3d
index 71b87f3..71b87f3 100644
--- a/advtrains/models/advtrains_dtrack_swrcr_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrcr_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrcr_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrcr_45.b3d
index 5457972..5457972 100644
--- a/advtrains/models/advtrains_dtrack_swrcr_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrcr_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrcr_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrcr_60.b3d
index 167a3ff..167a3ff 100644
--- a/advtrains/models/advtrains_dtrack_swrcr_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrcr_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrst.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrst.b3d
index 69b6996..69b6996 100644
--- a/advtrains/models/advtrains_dtrack_swrst.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrst.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrst_30.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrst_30.b3d
index 19ee483..19ee483 100644
--- a/advtrains/models/advtrains_dtrack_swrst_30.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrst_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrst_45.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrst_45.b3d
index 70d051f..70d051f 100644
--- a/advtrains/models/advtrains_dtrack_swrst_45.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrst_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_swrst_60.b3d b/advtrains/advtrains/models/advtrains_dtrack_swrst_60.b3d
index 69a58fb..69a58fb 100644
--- a/advtrains/models/advtrains_dtrack_swrst_60.b3d
+++ b/advtrains/advtrains/models/advtrains_dtrack_swrst_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_dtrack_vst1.obj b/advtrains/advtrains/models/advtrains_dtrack_vst1.obj
index 33d9bf3..33d9bf3 100644
--- a/advtrains/models/advtrains_dtrack_vst1.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst1.obj
diff --git a/advtrains/models/advtrains_dtrack_vst1_45.obj b/advtrains/advtrains/models/advtrains_dtrack_vst1_45.obj
index 8ff8343..8ff8343 100644
--- a/advtrains/models/advtrains_dtrack_vst1_45.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst1_45.obj
diff --git a/advtrains/models/advtrains_dtrack_vst2.obj b/advtrains/advtrains/models/advtrains_dtrack_vst2.obj
index 444ce42..444ce42 100644
--- a/advtrains/models/advtrains_dtrack_vst2.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst2.obj
diff --git a/advtrains/models/advtrains_dtrack_vst2_45.obj b/advtrains/advtrains/models/advtrains_dtrack_vst2_45.obj
index 5dc708b..5dc708b 100644
--- a/advtrains/models/advtrains_dtrack_vst2_45.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst2_45.obj
diff --git a/advtrains/models/advtrains_dtrack_vst31.obj b/advtrains/advtrains/models/advtrains_dtrack_vst31.obj
index c4cb84f..c4cb84f 100644
--- a/advtrains/models/advtrains_dtrack_vst31.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst31.obj
diff --git a/advtrains/models/advtrains_dtrack_vst32.obj b/advtrains/advtrains/models/advtrains_dtrack_vst32.obj
index 297d46b..297d46b 100644
--- a/advtrains/models/advtrains_dtrack_vst32.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst32.obj
diff --git a/advtrains/models/advtrains_dtrack_vst33.obj b/advtrains/advtrains/models/advtrains_dtrack_vst33.obj
index 8cb5f04..8cb5f04 100644
--- a/advtrains/models/advtrains_dtrack_vst33.obj
+++ b/advtrains/advtrains/models/advtrains_dtrack_vst33.obj
diff --git a/advtrains/models/advtrains_modernwagon.b3d b/advtrains/advtrains/models/advtrains_modernwagon.b3d
index aacddca..aacddca 100644
--- a/advtrains/models/advtrains_modernwagon.b3d
+++ b/advtrains/advtrains/models/advtrains_modernwagon.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_platform_diag.b3d b/advtrains/advtrains/models/advtrains_platform_diag.b3d
index 9464e63..9464e63 100644
--- a/advtrains/models/advtrains_platform_diag.b3d
+++ b/advtrains/advtrains/models/advtrains_platform_diag.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_platform_diag_low.b3d b/advtrains/advtrains/models/advtrains_platform_diag_low.b3d
index 5a8054b..5a8054b 100644
--- a/advtrains/models/advtrains_platform_diag_low.b3d
+++ b/advtrains/advtrains/models/advtrains_platform_diag_low.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_off.b3d b/advtrains/advtrains/models/advtrains_retrosignal_off.b3d
index 3d231dd..3d231dd 100644
--- a/advtrains/models/advtrains_retrosignal_off.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_off.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_off_30.b3d b/advtrains/advtrains/models/advtrains_retrosignal_off_30.b3d
index da258e1..da258e1 100644
--- a/advtrains/models/advtrains_retrosignal_off_30.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_off_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_off_45.b3d b/advtrains/advtrains/models/advtrains_retrosignal_off_45.b3d
index 338224a..338224a 100644
--- a/advtrains/models/advtrains_retrosignal_off_45.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_off_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_off_60.b3d b/advtrains/advtrains/models/advtrains_retrosignal_off_60.b3d
index c560ca1..c560ca1 100644
--- a/advtrains/models/advtrains_retrosignal_off_60.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_off_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_on.b3d b/advtrains/advtrains/models/advtrains_retrosignal_on.b3d
index 3d19439..3d19439 100644
--- a/advtrains/models/advtrains_retrosignal_on.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_on.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_on_30.b3d b/advtrains/advtrains/models/advtrains_retrosignal_on_30.b3d
index 98f8a92..98f8a92 100644
--- a/advtrains/models/advtrains_retrosignal_on_30.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_on_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_on_45.b3d b/advtrains/advtrains/models/advtrains_retrosignal_on_45.b3d
index 414e121..414e121 100644
--- a/advtrains/models/advtrains_retrosignal_on_45.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_on_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_retrosignal_on_60.b3d b/advtrains/advtrains/models/advtrains_retrosignal_on_60.b3d
index a51529a..a51529a 100644
--- a/advtrains/models/advtrains_retrosignal_on_60.b3d
+++ b/advtrains/advtrains/models/advtrains_retrosignal_on_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal.b3d b/advtrains/advtrains/models/advtrains_signal.b3d
index 7f69560..7f69560 100644
--- a/advtrains/models/advtrains_signal.b3d
+++ b/advtrains/advtrains/models/advtrains_signal.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_30.b3d b/advtrains/advtrains/models/advtrains_signal_30.b3d
index 0b949a7..0b949a7 100644
--- a/advtrains/models/advtrains_signal_30.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_30.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_45.b3d b/advtrains/advtrains/models/advtrains_signal_45.b3d
index ccaebf4..ccaebf4 100644
--- a/advtrains/models/advtrains_signal_45.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_45.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_60.b3d b/advtrains/advtrains/models/advtrains_signal_60.b3d
index cf41e6d..cf41e6d 100644
--- a/advtrains/models/advtrains_signal_60.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_60.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_wall_l.b3d b/advtrains/advtrains/models/advtrains_signal_wall_l.b3d
index b1bcbcf..b1bcbcf 100644
--- a/advtrains/models/advtrains_signal_wall_l.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_wall_l.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_wall_r.b3d b/advtrains/advtrains/models/advtrains_signal_wall_r.b3d
index cf26389..cf26389 100644
--- a/advtrains/models/advtrains_signal_wall_r.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_wall_r.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_signal_wall_t.b3d b/advtrains/advtrains/models/advtrains_signal_wall_t.b3d
index 30e77f6..30e77f6 100644
--- a/advtrains/models/advtrains_signal_wall_t.b3d
+++ b/advtrains/advtrains/models/advtrains_signal_wall_t.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_track_cr.b3d b/advtrains/advtrains/models/advtrains_track_cr.b3d
index b0f5e4b..b0f5e4b 100644
--- a/advtrains/models/advtrains_track_cr.b3d
+++ b/advtrains/advtrains/models/advtrains_track_cr.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_track_st.b3d b/advtrains/advtrains/models/advtrains_track_st.b3d
index 10b5d90..10b5d90 100644
--- a/advtrains/models/advtrains_track_st.b3d
+++ b/advtrains/advtrains/models/advtrains_track_st.b3d
Binary files differ
diff --git a/advtrains/models/advtrains_track_st_45.b3d b/advtrains/advtrains/models/advtrains_track_st_45.b3d
index 32505a1..32505a1 100644
--- a/advtrains/models/advtrains_track_st_45.b3d
+++ b/advtrains/advtrains/models/advtrains_track_st_45.b3d
Binary files differ
diff --git a/advtrains/models/trackplane.b3d b/advtrains/advtrains/models/trackplane.b3d
index b4728c3..b4728c3 100644
--- a/advtrains/models/trackplane.b3d
+++ b/advtrains/advtrains/models/trackplane.b3d
Binary files differ
diff --git a/advtrains/nodedb.lua b/advtrains/advtrains/nodedb.lua
index 03a5a2d..03a5a2d 100644
--- a/advtrains/nodedb.lua
+++ b/advtrains/advtrains/nodedb.lua
diff --git a/advtrains/occupation.lua b/advtrains/advtrains/occupation.lua
index da60278..da60278 100644
--- a/advtrains/occupation.lua
+++ b/advtrains/advtrains/occupation.lua
diff --git a/advtrains/p_mesecon_iface.lua b/advtrains/advtrains/p_mesecon_iface.lua
index 87e1c6d..87e1c6d 100644
--- a/advtrains/p_mesecon_iface.lua
+++ b/advtrains/advtrains/p_mesecon_iface.lua
diff --git a/advtrains/passive.lua b/advtrains/advtrains/passive.lua
index fe4790c..fe4790c 100644
--- a/advtrains/passive.lua
+++ b/advtrains/advtrains/passive.lua
diff --git a/advtrains/path.lua b/advtrains/advtrains/path.lua
index ee82c06..ee82c06 100644
--- a/advtrains/path.lua
+++ b/advtrains/advtrains/path.lua
diff --git a/advtrains/protection.lua b/advtrains/advtrains/protection.lua
index 7474977..7474977 100644
--- a/advtrains/protection.lua
+++ b/advtrains/advtrains/protection.lua
diff --git a/advtrains/settingtypes.txt b/advtrains/advtrains/settingtypes.txt
index d8eb44a..d8eb44a 100644
--- a/advtrains/settingtypes.txt
+++ b/advtrains/advtrains/settingtypes.txt
diff --git a/advtrains/signals.lua b/advtrains/advtrains/signals.lua
index e144aa6..e144aa6 100644
--- a/advtrains/signals.lua
+++ b/advtrains/advtrains/signals.lua
diff --git a/advtrains/sounds/advtrains_crossing_bell.ogg b/advtrains/advtrains/sounds/advtrains_crossing_bell.ogg
index 74df669..74df669 100644
--- a/advtrains/sounds/advtrains_crossing_bell.ogg
+++ b/advtrains/advtrains/sounds/advtrains_crossing_bell.ogg
Binary files differ
diff --git a/advtrains/textures/advtrains_across.png b/advtrains/advtrains/textures/advtrains_across.png
index da65a61..da65a61 100755
--- a/advtrains/textures/advtrains_across.png
+++ b/advtrains/advtrains/textures/advtrains_across.png
Binary files differ
diff --git a/advtrains/textures/advtrains_across_anim.png b/advtrains/advtrains/textures/advtrains_across_anim.png
index 584d023..584d023 100755
--- a/advtrains/textures/advtrains_across_anim.png
+++ b/advtrains/advtrains/textures/advtrains_across_anim.png
Binary files differ
diff --git a/advtrains/textures/advtrains_boiler.png b/advtrains/advtrains/textures/advtrains_boiler.png
index 8c7ff0d..8c7ff0d 100755
--- a/advtrains/textures/advtrains_boiler.png
+++ b/advtrains/advtrains/textures/advtrains_boiler.png
Binary files differ
diff --git a/advtrains/textures/advtrains_chimney.png b/advtrains/advtrains/textures/advtrains_chimney.png
index 285a1a6..285a1a6 100755
--- a/advtrains/textures/advtrains_chimney.png
+++ b/advtrains/advtrains/textures/advtrains_chimney.png
Binary files differ
diff --git a/advtrains/textures/advtrains_copytool.png b/advtrains/advtrains/textures/advtrains_copytool.png
index a8ea557..a8ea557 100644
--- a/advtrains/textures/advtrains_copytool.png
+++ b/advtrains/advtrains/textures/advtrains_copytool.png
Binary files differ
diff --git a/advtrains/textures/advtrains_couple.png b/advtrains/advtrains/textures/advtrains_couple.png
index eda3704..eda3704 100755
--- a/advtrains/textures/advtrains_couple.png
+++ b/advtrains/advtrains/textures/advtrains_couple.png
Binary files differ
diff --git a/advtrains/textures/advtrains_cpl_lock.png b/advtrains/advtrains/textures/advtrains_cpl_lock.png
index a25aaf4..a25aaf4 100644
--- a/advtrains/textures/advtrains_cpl_lock.png
+++ b/advtrains/advtrains/textures/advtrains_cpl_lock.png
Binary files differ
diff --git a/advtrains/textures/advtrains_cpl_unlock.png b/advtrains/advtrains/textures/advtrains_cpl_unlock.png
index f58d00a..f58d00a 100644
--- a/advtrains/textures/advtrains_cpl_unlock.png
+++ b/advtrains/advtrains/textures/advtrains_cpl_unlock.png
Binary files differ
diff --git a/advtrains/textures/advtrains_discouple.png b/advtrains/advtrains/textures/advtrains_discouple.png
index 5c064c3..5c064c3 100755
--- a/advtrains/textures/advtrains_discouple.png
+++ b/advtrains/advtrains/textures/advtrains_discouple.png
Binary files differ
diff --git a/advtrains/textures/advtrains_driver_cab.png b/advtrains/advtrains/textures/advtrains_driver_cab.png
index 331bcc9..331bcc9 100755
--- a/advtrains/textures/advtrains_driver_cab.png
+++ b/advtrains/advtrains/textures/advtrains_driver_cab.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_atc_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_atc_placer.png
index 31c2b30..31c2b30 100755
--- a/advtrains/textures/advtrains_dtrack_atc_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_atc_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_bumper_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_bumper_placer.png
index 27191fe..27191fe 100755
--- a/advtrains/textures/advtrains_dtrack_bumper_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_bumper_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_detector_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_detector_placer.png
index e6c6ad6..e6c6ad6 100755
--- a/advtrains/textures/advtrains_dtrack_detector_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_detector_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_load_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_load_placer.png
index 427c011..427c011 100755
--- a/advtrains/textures/advtrains_dtrack_load_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_load_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_placer.png
index 7bef8a9..7bef8a9 100755
--- a/advtrains/textures/advtrains_dtrack_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_rail.png b/advtrains/advtrains/textures/advtrains_dtrack_rail.png
index bd0c217..bd0c217 100755
--- a/advtrains/textures/advtrains_dtrack_rail.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_rail.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared.png b/advtrains/advtrains/textures/advtrains_dtrack_shared.png
index 736c7db..736c7db 100755
--- a/advtrains/textures/advtrains_dtrack_shared.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared_atc.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_atc.png
index 1f83c37..1f83c37 100755
--- a/advtrains/textures/advtrains_dtrack_shared_atc.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared_atc.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared_detector_off.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_detector_off.png
index 724d907..724d907 100755
--- a/advtrains/textures/advtrains_dtrack_shared_detector_off.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared_detector_off.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared_detector_on.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_detector_on.png
index 7bb29d6..7bb29d6 100755
--- a/advtrains/textures/advtrains_dtrack_shared_detector_on.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared_detector_on.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared_load.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_load.png
index 5fd0d7a..5fd0d7a 100755
--- a/advtrains/textures/advtrains_dtrack_shared_load.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared_load.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_shared_unload.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_unload.png
index e9fc5bd..e9fc5bd 100755
--- a/advtrains/textures/advtrains_dtrack_shared_unload.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_shared_unload.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_slopeplacer.png b/advtrains/advtrains/textures/advtrains_dtrack_slopeplacer.png
index 1d456b0..1d456b0 100755
--- a/advtrains/textures/advtrains_dtrack_slopeplacer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_slopeplacer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_dtrack_unload_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_unload_placer.png
index 486861e..486861e 100755
--- a/advtrains/textures/advtrains_dtrack_unload_placer.png
+++ b/advtrains/advtrains/textures/advtrains_dtrack_unload_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_platform.png b/advtrains/advtrains/textures/advtrains_platform.png
index 5ba9663..5ba9663 100755
--- a/advtrains/textures/advtrains_platform.png
+++ b/advtrains/advtrains/textures/advtrains_platform.png
Binary files differ
diff --git a/advtrains/textures/advtrains_platform_diag.png b/advtrains/advtrains/textures/advtrains_platform_diag.png
index 6e262e2..6e262e2 100644
--- a/advtrains/textures/advtrains_platform_diag.png
+++ b/advtrains/advtrains/textures/advtrains_platform_diag.png
Binary files differ
diff --git a/advtrains/textures/advtrains_retrosignal.png b/advtrains/advtrains/textures/advtrains_retrosignal.png
index 141198d..141198d 100755
--- a/advtrains/textures/advtrains_retrosignal.png
+++ b/advtrains/advtrains/textures/advtrains_retrosignal.png
Binary files differ
diff --git a/advtrains/textures/advtrains_retrosignal_inv.png b/advtrains/advtrains/textures/advtrains_retrosignal_inv.png
index 1036594..1036594 100755
--- a/advtrains/textures/advtrains_retrosignal_inv.png
+++ b/advtrains/advtrains/textures/advtrains_retrosignal_inv.png
Binary files differ
diff --git a/advtrains/textures/advtrains_signal_inv.png b/advtrains/advtrains/textures/advtrains_signal_inv.png
index ed64ed9..ed64ed9 100755
--- a/advtrains/textures/advtrains_signal_inv.png
+++ b/advtrains/advtrains/textures/advtrains_signal_inv.png
Binary files differ
diff --git a/advtrains/textures/advtrains_signal_off.png b/advtrains/advtrains/textures/advtrains_signal_off.png
index 8046e52..8046e52 100755
--- a/advtrains/textures/advtrains_signal_off.png
+++ b/advtrains/advtrains/textures/advtrains_signal_off.png
Binary files differ
diff --git a/advtrains/textures/advtrains_signal_on.png b/advtrains/advtrains/textures/advtrains_signal_on.png
index 5228bb3..5228bb3 100755
--- a/advtrains/textures/advtrains_signal_on.png
+++ b/advtrains/advtrains/textures/advtrains_signal_on.png
Binary files differ
diff --git a/advtrains/textures/advtrains_signal_wall_off.png b/advtrains/advtrains/textures/advtrains_signal_wall_off.png
index 3e7b1e1..3e7b1e1 100755
--- a/advtrains/textures/advtrains_signal_wall_off.png
+++ b/advtrains/advtrains/textures/advtrains_signal_wall_off.png
Binary files differ
diff --git a/advtrains/textures/advtrains_signal_wall_on.png b/advtrains/advtrains/textures/advtrains_signal_wall_on.png
index b628c7e..b628c7e 100755
--- a/advtrains/textures/advtrains_signal_wall_on.png
+++ b/advtrains/advtrains/textures/advtrains_signal_wall_on.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_cr.png b/advtrains/advtrains/textures/advtrains_track_cr.png
index 40f0cc5..40f0cc5 100755
--- a/advtrains/textures/advtrains_track_cr.png
+++ b/advtrains/advtrains/textures/advtrains_track_cr.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_cr_45.png b/advtrains/advtrains/textures/advtrains_track_cr_45.png
index 54966b3..54966b3 100755
--- a/advtrains/textures/advtrains_track_cr_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_cr_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_placer.png b/advtrains/advtrains/textures/advtrains_track_placer.png
index 03e17ed..03e17ed 100755
--- a/advtrains/textures/advtrains_track_placer.png
+++ b/advtrains/advtrains/textures/advtrains_track_placer.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_st.png b/advtrains/advtrains/textures/advtrains_track_st.png
index 5ad7e4f..5ad7e4f 100755
--- a/advtrains/textures/advtrains_track_st.png
+++ b/advtrains/advtrains/textures/advtrains_track_st.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_st_45.png b/advtrains/advtrains/textures/advtrains_track_st_45.png
index 63b4c96..63b4c96 100755
--- a/advtrains/textures/advtrains_track_st_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_st_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swlcr.png b/advtrains/advtrains/textures/advtrains_track_swlcr.png
index d9b5c0b..d9b5c0b 100755
--- a/advtrains/textures/advtrains_track_swlcr.png
+++ b/advtrains/advtrains/textures/advtrains_track_swlcr.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swlcr_45.png b/advtrains/advtrains/textures/advtrains_track_swlcr_45.png
index f098fc9..f098fc9 100755
--- a/advtrains/textures/advtrains_track_swlcr_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_swlcr_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swlst.png b/advtrains/advtrains/textures/advtrains_track_swlst.png
index 314bd2d..314bd2d 100755
--- a/advtrains/textures/advtrains_track_swlst.png
+++ b/advtrains/advtrains/textures/advtrains_track_swlst.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swlst_45.png b/advtrains/advtrains/textures/advtrains_track_swlst_45.png
index 765d0ec..765d0ec 100755
--- a/advtrains/textures/advtrains_track_swlst_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_swlst_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swrcr.png b/advtrains/advtrains/textures/advtrains_track_swrcr.png
index f74e1bc..f74e1bc 100755
--- a/advtrains/textures/advtrains_track_swrcr.png
+++ b/advtrains/advtrains/textures/advtrains_track_swrcr.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swrcr_45.png b/advtrains/advtrains/textures/advtrains_track_swrcr_45.png
index fa432aa..fa432aa 100755
--- a/advtrains/textures/advtrains_track_swrcr_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_swrcr_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swrst.png b/advtrains/advtrains/textures/advtrains_track_swrst.png
index 06ea29e..06ea29e 100755
--- a/advtrains/textures/advtrains_track_swrst.png
+++ b/advtrains/advtrains/textures/advtrains_track_swrst.png
Binary files differ
diff --git a/advtrains/textures/advtrains_track_swrst_45.png b/advtrains/advtrains/textures/advtrains_track_swrst_45.png
index be477b7..be477b7 100755
--- a/advtrains/textures/advtrains_track_swrst_45.png
+++ b/advtrains/advtrains/textures/advtrains_track_swrst_45.png
Binary files differ
diff --git a/advtrains/textures/advtrains_trackworker.png b/advtrains/advtrains/textures/advtrains_trackworker.png
index b50bcae..b50bcae 100755
--- a/advtrains/textures/advtrains_trackworker.png
+++ b/advtrains/advtrains/textures/advtrains_trackworker.png
Binary files differ
diff --git a/advtrains/textures/advtrains_wagon_placeholder.png b/advtrains/advtrains/textures/advtrains_wagon_placeholder.png
index 383c181..383c181 100644
--- a/advtrains/textures/advtrains_wagon_placeholder.png
+++ b/advtrains/advtrains/textures/advtrains_wagon_placeholder.png
Binary files differ
diff --git a/advtrains/textures/advtrains_wheel.png b/advtrains/advtrains/textures/advtrains_wheel.png
index fb72879..fb72879 100755
--- a/advtrains/textures/advtrains_wheel.png
+++ b/advtrains/advtrains/textures/advtrains_wheel.png
Binary files differ
diff --git a/advtrains/textures/drwho_screwdriver.png b/advtrains/advtrains/textures/drwho_screwdriver.png
index b50bcae..b50bcae 100755
--- a/advtrains/textures/drwho_screwdriver.png
+++ b/advtrains/advtrains/textures/drwho_screwdriver.png
Binary files differ
diff --git a/advtrains/trackdb_legacy.lua b/advtrains/advtrains/trackdb_legacy.lua
index 99349e8..99349e8 100644
--- a/advtrains/trackdb_legacy.lua
+++ b/advtrains/advtrains/trackdb_legacy.lua
diff --git a/advtrains/trackplacer.lua b/advtrains/advtrains/trackplacer.lua
index 904d851..904d851 100644
--- a/advtrains/trackplacer.lua
+++ b/advtrains/advtrains/trackplacer.lua
diff --git a/advtrains/tracks.lua b/advtrains/advtrains/tracks.lua
index 6799c40..6799c40 100644
--- a/advtrains/tracks.lua
+++ b/advtrains/advtrains/tracks.lua
diff --git a/advtrains/trainhud.lua b/advtrains/advtrains/trainhud.lua
index c90a406..c90a406 100644
--- a/advtrains/trainhud.lua
+++ b/advtrains/advtrains/trainhud.lua
diff --git a/advtrains/trainlogic.lua b/advtrains/advtrains/trainlogic.lua
index cc34b4f..cc34b4f 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/advtrains/trainlogic.lua
diff --git a/advtrains/wagons.lua b/advtrains/advtrains/wagons.lua
index 90615a5..90615a5 100644
--- a/advtrains/wagons.lua
+++ b/advtrains/advtrains/wagons.lua
diff --git a/advtrains/advtrains_interlocking/approach.lua b/advtrains/advtrains_interlocking/approach.lua
new file mode 100644
index 0000000..8e90b5a
--- /dev/null
+++ b/advtrains/advtrains_interlocking/approach.lua
@@ -0,0 +1,113 @@
+-- Interlocking counterpart of LZB, which has been moved into the core...
+-- Registers LZB callback for signal management.
+
+--[[
+usage of lzbdata:
+{
+ travsht = boolean indicating whether the train will be a shunt move at "trav"
+ travspd = speed restriction at end of traverser
+ travwspd = warning speed res.t
+}
+]]
+
+local SHUNT_SPEED_MAX = advtrains.SHUNT_SPEED_MAX
+
+local il = advtrains.interlocking
+
+local function get_over_function(speed, shunt)
+ return function(pos, id, train, index, speed, lzbdata)
+ if speed == 0 and minetest.settings:get_bool("at_il_force_lzb_halt") then
+ atwarn(id,"overrun LZB 0 restriction (red signal) ",pos)
+ -- Set train 1 index backward. Hope this does not lead to bugs...
+ train.index = index - 0.5
+ train.velocity = 0
+ train.ctrl.lzb = 0
+ minetest.after(0, advtrains.invalidate_path, id)
+ else
+ train.speed_restriction = speed
+ train.is_shunt = shunt
+ end
+ end
+end
+
+advtrains.tnc_register_on_approach(function(pos, id, train, index, lzbdata)
+
+ --atdebug(id,"IL ApprC",pos,index,lzbdata)
+ --train.debug = advtrains.print_concat_table({train.is_shunt,"|",index,"|",lzbdata})
+
+ local pts = advtrains.roundfloorpts(pos)
+ local cn = train.path_cn[index]
+ local travsht = lzbdata.travsht
+
+ if travsht==nil then
+ travsht = train.is_shunt
+ end
+
+ local travspd = lzbdata.travspd
+ local travwspd = lzbdata.travwspd
+
+ -- check for signal
+ local asp, spos = il.db.get_ip_signal_asp(pts, cn)
+
+ -- do ARS if needed
+ if spos then
+ --atdebug(id,"IL Spos (ARS)",spos,asp)
+ local sigd = il.db.get_sigd_for_signal(spos)
+ if sigd then
+ il.ars_check(sigd, train)
+ end
+ end
+ --atdebug("trav: ",pos, cn, asp, spos, "travsht=", lzb.travsht)
+ local lspd
+ if asp then
+ --atdebug(id,"IL Signal",spos,asp)
+ local nspd = 0
+ --interpreting aspect and determining speed to proceed
+ if travsht then
+ --shunt move
+ if asp.shunt.free then
+ nspd = SHUNT_SPEED_MAX
+ elseif asp.shunt.proceed_as_main and asp.main.free then
+ nspd = asp.main.speed
+ travsht = false
+ end
+ else
+ --train move
+ if asp.main.free then
+ nspd = asp.main.speed
+ elseif asp.shunt.free then
+ nspd = SHUNT_SPEED_MAX
+ travsht = true
+ end
+ end
+ -- nspd can now be: 1. !=0: new speed restriction, 2. =0: stop here or 3. nil: keep travspd
+ if nspd then
+ if nspd == -1 then
+ travspd = nil
+ else
+ travspd = nspd
+ end
+ end
+
+ local nwspd = asp.info.w_speed
+ if nwspd then
+ if nwspd == -1 then
+ travwspd = nil
+ else
+ travwspd = nwspd
+ end
+ end
+ --atdebug("ns,wns,ts,wts", nspd, nwspd, travspd, travwspd)
+ lspd = travspd
+ if travwspd and (not lspd or lspd>travwspd) then
+ lspd = travwspd
+ end
+
+ local udata = {signal_pos = spos}
+ local callback = get_over_function(lspd, travsht)
+ advtrains.lzb_add_checkpoint(train, index, lspd, callback, udata)
+ end
+ lzbdata.travsht = travsht
+ lzbdata.travspd = travspd
+ lzbdata.travwspd = travwspd
+end)
diff --git a/advtrains/advtrains_interlocking/ars.lua b/advtrains/advtrains_interlocking/ars.lua
new file mode 100644
index 0000000..434ae2c
--- /dev/null
+++ b/advtrains/advtrains_interlocking/ars.lua
@@ -0,0 +1,155 @@
+-- ars.lua
+-- automatic routesetting
+
+--[[
+ The "ARS table" and its effects:
+ Every route has (or can have) an associated ARS table. This can either be
+ ars = { [n] = {ln="<line>"}/{rc="<routingcode>"}/{c="<a comment>"} }
+ a list of rules involving either line or routingcode matchers (or comments, those are ignored)
+ The first matching rule determines the route to set.
+ - or -
+ ars = {default = true}
+ this means that all trains that no other rule matches on should use this route
+
+ Compound ("and") conjunctions are not supported (--TODO should they?)
+
+ For editing, those tables are transformed into lines in a text area:
+ {ln=...} -> LN ...
+ {rc=...} -> RC ...
+ {c=...} -> #...
+ {default=true} -> *
+ See also route_ui.lua
+]]
+
+local il = advtrains.interlocking
+
+-- The ARS data are saved in a table format, but are entered in text format. Utility functions to transform between both.
+function il.ars_to_text(arstab)
+ if not arstab then
+ return ""
+ end
+
+ local txt = {}
+
+ for i, arsent in ipairs(arstab) do
+ local n = ""
+ if arsent.n then
+ n = "!"
+ end
+ if arsent.ln then
+ txt[#txt+1] = n.."LN "..arsent.ln
+ elseif arsent.rc then
+ txt[#txt+1] = n.."RC "..arsent.rc
+ elseif arsent.c then
+ txt[#txt+1] = "#"..arsent.c
+ end
+ end
+
+ if arstab.default then
+ return "*\n" .. table.concat(txt, "\n")
+ end
+ return table.concat(txt, "\n")
+end
+
+function il.text_to_ars(t)
+ if t=="" then
+ return nil
+ elseif t=="*" then
+ return {default=true}
+ end
+ local arstab = {}
+ for line in string.gmatch(t, "[^\r\n]+") do
+ if line=="*" then
+ arstab.default = true
+ else
+ local c, v = string.match(line, "^(...?)%s(.*)$")
+ if c and v then
+ local n = nil
+ if string.sub(c,1,1) == "!" then
+ n = true
+ c = string.sub(c,2)
+ end
+ local tt=string.upper(c)
+ if tt=="LN" then
+ arstab[#arstab+1] = {ln=v, n=n}
+ elseif tt=="RC" then
+ arstab[#arstab+1] = {rc=v, n=n}
+ end
+ else
+ local ct = string.match(line, "^#(.*)$")
+ if ct then arstab[#arstab+1] = {c = ct} end
+ end
+ end
+ end
+ return arstab
+end
+
+local function find_rtematch(routes, train)
+ local default
+ for rteid, route in ipairs(routes) do
+ if route.ars then
+ if route.ars.default then
+ default = rteid
+ else
+ if il.ars_check_rule_match(route.ars, train) then
+ return rteid
+ end
+ end
+ end
+ end
+ return default
+end
+
+-- Checks whether ARS rule explicitly matches. This does not take into account the "default" field, since a wider context is required for this.
+-- Returns the rule number that matched, or nil if nothing matched
+function il.ars_check_rule_match(ars, train)
+ if not ars then
+ return nil
+ end
+ local line = train.line
+ local routingcode = train.routingcode
+ for arskey, arsent in ipairs(ars) do
+ --atdebug(arsent, line, routingcode)
+ if arsent.n then
+ -- rule is inverse...
+ if arsent.ln and (not line or arsent.ln ~= line) then
+ return arskey
+ elseif arsent.rc and (not routingcode or not string.find(" "..routingcode.." ", " "..arsent.rc.." ", nil, true)) then
+ return arskey
+ end
+ return nil
+ end
+
+ if arsent.ln and line and arsent.ln == line then
+ return arskey
+ elseif arsent.rc and routingcode and string.find(" "..routingcode.." ", " "..arsent.rc.." ", nil, true) then
+ return arskey
+ end
+ end
+ return nil
+end
+
+function advtrains.interlocking.ars_check(sigd, train)
+ local tcbs = il.db.get_tcbs(sigd)
+ if not tcbs or not tcbs.routes then return end
+
+ if tcbs.ars_disabled then
+ -- No-ARS mode of signal.
+ -- ignore...
+ return
+ end
+
+ if tcbs.routeset then
+ -- ARS is not in effect when a route is already set
+ -- just "punch" routesetting, just in case callback got lost.
+ minetest.after(0, il.route.update_route, sigd, tcbs, nil, nil)
+ return
+ end
+
+ local rteid = find_rtematch(tcbs.routes, train)
+ if rteid then
+ --delay routesetting, it should not occur inside train step
+ -- using after here is OK because that gets called on every path recalculation
+ minetest.after(0, il.route.update_route, sigd, tcbs, rteid, nil)
+ end
+end
diff --git a/advtrains/advtrains_interlocking/database.lua b/advtrains/advtrains_interlocking/database.lua
new file mode 100644
index 0000000..e2c9edc
--- /dev/null
+++ b/advtrains/advtrains_interlocking/database.lua
@@ -0,0 +1,599 @@
+-- interlocking/database.lua
+-- saving the location of TCB's, their neighbors and their state
+--[[
+
+== THIS COMMENT IS PARTIALLY INCORRECT AND OUTDATED! ==
+
+The interlocking system is based on track circuits.
+Track circuit breaks must be manually set by the user. Signals must be assigned to track circuit breaks and to a direction(connid).
+To simplify the whole system, there is no overlap.
+== Trains ==
+Trains always occupy certain track circuits. These are shown red in the signalbox view (TRAIN occupation entry).
+== Database storage ==
+The things that are actually saved are the Track Circuit Breaks. Each TCB holds a list of the TCBs that are adjacent in each direction.
+TC occupation/state is then saved inside each (TCB,Direction) and held in sync across all TCBs adjacent to this one. If something should not be in sync,
+all entries are merged to perform the most restrictive setup.
+== Traverser function ==
+To determine and update the list of neighboring TCBs, we need a traverser function.
+It will start at one TCB in a specified direction (connid) and use get_adjacent_rail to crawl along the track. When encountering a turnout or a crossing,
+it needs to branch(call itself recursively) to find all required TCBs. Those found TCBs are then saved in a list as tuples (TCB,Dir)
+In the last step, they exchange their neighbors.
+== TC states ==
+A track circuit does not have a state as such, but has more or less a list of "reservations"
+type can be one of these:
+TRAIN See Trains obove
+ROUTE Route set from a signal, but no train has yet passed that signal.
+Not implemented (see note by reversible): OWNED - former ROUTE segments that a train has begun passing (train_id assigned)
+ - Space behind a train up to the next signal, when a TC is set as REVERSIBLE
+Certain TCs can be marked as "allow call-on".
+== Route setting: ==
+Routes are set from a signal (the entry signal) to another signal facing the same direction (the exit signal)
+Remember that signals are assigned to a TCB and a connid.
+Whenever this is done, the following track circuits are set "reserved" by the train by saving the entry signal's ID:
+- all TCs on the direct way of the route - set as ROUTE
+Route setting fails whenever any TC that we want to set ROUTE to is already set ROUTE or TRAIN from another signal (except call-on, see below)
+Apart from this, we need to set turnouts
+- Turnouts on the track are set held as ROUTE
+- Turnouts that purpose as flank protection are set held as FLANK (NOTE: left as an idea for later, because it's not clear how to do this properly without an engineer)
+Note: In SimSig, it is possible to set a route into an still occupied section on the victoria line sim. (at the depot exit at seven sisters), although
+ there are still segments set ahead of the first train passing, remaining from another route.
+ Because our system will be able to remember "requested routes" and set them automatically once ready, this is not necessary here.
+== Call-On/Multiple Trains ==
+It will be necessary to join and split trains using call-on routes. A call-on route may be set when:
+- there are no ROUTE reservations
+- there are TRAIN reservations only inside TCs that have "allow call-on" set
+== TC Properties ==
+Note: Reversible property will not be implemented, assuming everything as non-rev.
+This is sufficient to cover all use cases, and is done this way in reality.
+ REVERSIBLE - Whether trains are allowed to reverse while on track circuit
+ This property is supposed to be set for station tracks, where there is a signal at each end, and for sidings.
+ It should in no case be set for TCs covering turnouts, or for main running lines.
+ When a TC is not set as reversible, the OWNED status is cleared from the TC right after the train left it,
+ to allow other trains to pass it.
+ If it is set reversible, interlocking will keep the OWNED state behind the train up to the next signal, clearing it
+ as soon as the train passes another signal or enters a non-reversible section.
+CALL_ON_ALLOWED - Whether this TC being blocked (TRAIN or ROUTE) does not prevent shunt routes being set through this TC
+== More notes ==
+- It may not be possible to switch turnouts when their TC has any state entry
+
+== Route releasing (TORR) ==
+A train passing through a route happens as follows:
+Route set from entry to exit signal
+Train passes entry signal and enters first TC past the signal
+-> Route from signal cleared (TCs remain locked)
+-> ROUTE status of first TC past signal cleared
+Train continues along the route.
+Whenever train leaves a TC
+-> Clearing any routes set from this TC outward recursively - see "Reversing problem"
+Whenever train enters a TC
+-> Clear route status from the just entered TC
+Note that this prohibits by design that the train clears the route ahead of it.
+== Reversing Problem ==
+Encountered at the Royston simulation in SimSig. It is solved there by imposing a time limit on the set route. Call-on routes can somehow be set anyway.
+Imagine this setup: (T=Train, R=Route, >=in_dir TCB)
+ O-| Royston P2 |-O
+T->---|->RRR-|->RRR-|--
+Train T enters from the left, the route is set to the right signal. But train is supposed to reverse here and stops this way:
+ O-| Royston P2 |-O
+------|-TTTT-|->RRR-|--
+The "Route" on the right is still set. Imposing a timeout here is a thing only professional engineers can determine, not an algorithm.
+ O-| Royston P2 |-O
+<-T---|------|->RRR-|--
+The train has left again, while route on the right is still set.
+So, we have to clear the set route when the train has left the left TC.
+This does not conflict with call-on routes, because both station tracks are set as "allow call-on"
+Because none of the routes extends past any non-call-on sections, call-on route would be allowed here, even though the route
+is locked in opposite direction at the time of routesetting.
+Another case of this:
+--TTT/--|->RRR--
+The / here is a non-interlocked turnout (to a non-frequently used siding). For some reason, there is no exit node there,
+so the route is set to the signal at the right end. The train is taking the exit to the siding and frees the TC, without ever
+having touched the right TC.
+]]--
+
+local TRAVERSER_LIMIT = 1000
+
+
+local ildb = {}
+
+local track_circuit_breaks = {}
+local track_sections = {}
+
+-- Assignment of signals to TCBs
+local signal_assignments = {}
+
+-- track+direction -> signal position
+local influence_points = {}
+
+advtrains.interlocking.npr_rails = {}
+
+
+function ildb.load(data)
+ if not data then return end
+ if data.tcbs then
+ track_circuit_breaks = data.tcbs
+ end
+ if data.ts then
+ track_sections = data.ts
+ end
+ if data.signalass then
+ signal_assignments = data.signalass
+ end
+ if data.rs_locks then
+ advtrains.interlocking.route.rte_locks = data.rs_locks
+ end
+ if data.rs_callbacks then
+ advtrains.interlocking.route.rte_callbacks = data.rs_callbacks
+ end
+ if data.influence_points then
+ influence_points = data.influence_points
+ end
+ if data.npr_rails then
+ advtrains.interlocking.npr_rails = data.npr_rails
+ end
+end
+
+function ildb.save()
+ return {
+ tcbs = track_circuit_breaks,
+ ts=track_sections,
+ signalass = signal_assignments,
+ rs_locks = advtrains.interlocking.route.rte_locks,
+ rs_callbacks = advtrains.interlocking.route.rte_callbacks,
+ influence_points = influence_points,
+ npr_rails = advtrains.interlocking.npr_rails,
+ }
+end
+
+--
+--[[
+TCB data structure
+{
+[1] = { -- Variant: with adjacent TCs.
+ ts_id = <id> -- ID of the assigned track section
+ signal = <pos> -- optional: when set, routes can be set from this tcb/direction and signal
+ -- aspect will be set accordingly.
+ routeset = <index in routes> -- Route set from this signal. This is the entry that is cleared once
+ -- train has passed the signal. (which will set the aspect to "danger" again)
+ route_committed = <boolean> -- When setting/requesting a route, routetar will be set accordingly,
+ -- while the signal still displays danger and nothing is written to the TCs
+ -- As soon as the route can actually be set, all relevant TCs and turnouts are set and this field
+ -- is set true, clearing the signal
+ aspect = <asp> -- The aspect the signal should show. If this is nil, should show the most restrictive aspect (red)
+ signal_name = <string> -- The human-readable name of the signal, only for documenting purposes
+ routes = { <route definition> } -- a collection of routes from this signal
+ route_auto = <boolean> -- When set, we will automatically re-set the route (designated by routeset)
+},
+[2] = { -- Variant: end of track-circuited area (initial state of TC)
+ ts_id = nil, -- this is the indication for end_of_interlocking
+ section_free = <boolean>, --this can be set by an exit node via mesecons or atlatc,
+ -- or from the tc formspec.
+}
+}
+
+Track section
+[id] = {
+ name = "Some human-readable name"
+ tc_breaks = { <signal specifier>,... } -- Bounding TC's (signal specifiers)
+ -- Can be direct ends (auto-detected), conflicting routes or TCBs that are too far away from each other
+ route = {
+ origin = <signal>, -- route origin
+ entry = <sigd>, -- supposed train entry point
+ rsn = <string>,
+ first = <bool>
+ }
+ route_post = {
+ locks = {[n] = <pts>}
+ next = <sigd>
+ }
+ -- Set whenever a route has been set through this TC. It saves the origin tcb id and side
+ -- (=the origin signal). rsn is some description to be shown to the user
+ -- first says whether to clear the routesetting status from the origin signal.
+ -- locks contains the positions where locks are held by this ts.
+ -- 'route' is cleared when train enters the section, while 'route_post' cleared when train leaves section.
+ trains = {<id>, ...} -- Set whenever a train (or more) reside in this TC
+}
+
+
+Signal specifier (sigd) (a pair of TCB/Side):
+{p = <pos>, s = <1/2>}
+
+Signal Assignments: reverse lookup of signals assigned to TCBs
+signal_assignments = {
+[<signal pts>] = <sigd>
+}
+]]
+
+
+--
+function ildb.create_tcb(pos)
+ local new_tcb = {
+ [1] = {},
+ [2] = {},
+ }
+ local pts = advtrains.roundfloorpts(pos)
+ if not track_circuit_breaks[pts] then
+ track_circuit_breaks[pts] = new_tcb
+ return true
+ else
+ return false
+ end
+end
+
+function ildb.get_tcb(pos)
+ local pts = advtrains.roundfloorpts(pos)
+ return track_circuit_breaks[pts]
+end
+
+function ildb.get_tcbs(sigd)
+ local tcb = ildb.get_tcb(sigd.p)
+ if not tcb then return nil end
+ return tcb[sigd.s]
+end
+
+
+function ildb.create_ts(sigd)
+ local tcbs = ildb.get_tcbs(sigd)
+ local id = advtrains.random_id()
+
+ while track_sections[id] do
+ id = advtrains.random_id()
+ end
+
+ track_sections[id] = {
+ name = "Section "..id,
+ tc_breaks = { sigd }
+ }
+ tcbs.ts_id = id
+end
+
+function ildb.get_ts(id)
+ return track_sections[id]
+end
+
+
+
+-- various helper functions handling sigd's
+local sigd_equal = advtrains.interlocking.sigd_equal
+local function insert_sigd_nodouble(list, sigd)
+ for idx, cmp in pairs(list) do
+ if sigd_equal(sigd, cmp) then
+ return
+ end
+ end
+ table.insert(list, sigd)
+end
+
+
+-- This function will actually handle the node that is in connid direction from the node at pos
+-- so, this needs the conns of the node at pos, since these are already calculated
+local function traverser(found_tcbs, pos, conns, connid, count, brk_when_found_n)
+ local adj_pos, adj_connid, conn_idx, nextrail_y, next_conns = advtrains.get_adjacent_rail(pos, conns, connid, advtrains.all_tracktypes)
+ if not adj_pos then
+ --atdebug("Traverser found end-of-track at",pos, connid)
+ return
+ end
+ -- look whether there is a TCB here
+ if #next_conns == 2 then --if not, don't even try!
+ local tcb = ildb.get_tcb(adj_pos)
+ if tcb then
+ -- done with this branch
+ --atdebug("Traverser found tcb at",adj_pos, adj_connid)
+ insert_sigd_nodouble(found_tcbs, {p=adj_pos, s=adj_connid})
+ return
+ end
+ end
+ -- recursion abort condition
+ if count > TRAVERSER_LIMIT then
+ --atdebug("Traverser hit counter at",adj_pos, adj_connid)
+ return true
+ end
+ -- continue traversing
+ local counter_hit = false
+ for nconnid, nconn in ipairs(next_conns) do
+ if adj_connid ~= nconnid then
+ counter_hit = counter_hit or traverser(found_tcbs, adj_pos, next_conns, nconnid, count + 1, brk_when_found_n)
+ if brk_when_found_n and #found_tcbs>=brk_when_found_n then
+ break
+ end
+ end
+ end
+ return counter_hit
+end
+
+
+
+-- Merges the TS with merge_id into root_id and then deletes merge_id
+local function merge_ts(root_id, merge_id)
+ local rts = ildb.get_ts(root_id)
+ local mts = ildb.get_ts(merge_id)
+ if not mts then return end -- This may be the case when sync_tcb_neighbors
+ -- inserts the same id twice. do nothing.
+
+ if not ildb.may_modify_ts(rts) then return false end
+ if not ildb.may_modify_ts(mts) then return false end
+
+ -- cobble together the list of TCBs
+ for _, msigd in ipairs(mts.tc_breaks) do
+ local tcbs = ildb.get_tcbs(msigd)
+ if tcbs then
+ insert_sigd_nodouble(rts.tc_breaks, msigd)
+ tcbs.ts_id = root_id
+ end
+ advtrains.interlocking.show_tcb_marker(msigd.p)
+ end
+ -- done
+ track_sections[merge_id] = nil
+end
+
+local lntrans = { "A", "B" }
+local function sigd_to_string(sigd)
+ return minetest.pos_to_string(sigd.p).." / "..lntrans[sigd.s]
+end
+
+-- Check for near TCBs and connect to their TS if they have one, and syncs their data.
+function ildb.sync_tcb_neighbors(pos, connid)
+ local found_tcbs = { {p = pos, s = connid} }
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ if not node_ok then
+ atwarn("update_tcb_neighbors but node is NOK: "..minetest.pos_to_string(pos))
+ return
+ end
+
+ --atdebug("Traversing from ",pos, connid)
+ local counter_hit = traverser(found_tcbs, pos, conns, connid, 0)
+
+ local ts_id
+ local list_eoi = {}
+ local list_ok = {}
+ local list_mismatch = {}
+ local ts_to_merge = {}
+
+ for idx, sigd in pairs(found_tcbs) do
+ local tcbs = ildb.get_tcbs(sigd)
+ if not tcbs.ts_id then
+ --atdebug("Sync: put",sigd_to_string(sigd),"into list_eoi")
+ table.insert(list_eoi, sigd)
+ elseif not ts_id and tcbs.ts_id then
+ if not ildb.get_ts(tcbs.ts_id) then
+ atwarn("Track section database is inconsistent, there's no TS with ID=",tcbs.ts_id)
+ tcbs.ts_id = nil
+ table.insert(list_eoi, sigd)
+ else
+ --atdebug("Sync: put",sigd_to_string(sigd),"into list_ok")
+ ts_id = tcbs.ts_id
+ table.insert(list_ok, sigd)
+ end
+ elseif ts_id and tcbs.ts_id and tcbs.ts_id ~= ts_id then
+ atwarn("Track section database is inconsistent, sections share track!")
+ atwarn("Merging",tcbs.ts_id,"into",ts_id,".")
+ table.insert(list_mismatch, sigd)
+ table.insert(ts_to_merge, tcbs.ts_id)
+ end
+ end
+ if ts_id then
+ local ts = ildb.get_ts(ts_id)
+ for _, sigd in ipairs(list_eoi) do
+ local tcbs = ildb.get_tcbs(sigd)
+ tcbs.ts_id = ts_id
+ table.insert(ts.tc_breaks, sigd)
+ advtrains.interlocking.show_tcb_marker(sigd.p)
+ end
+ for _, mts in ipairs(ts_to_merge) do
+ merge_ts(ts_id, mts)
+ end
+ end
+end
+
+function ildb.link_track_sections(merge_id, root_id)
+ if merge_id == root_id then
+ return
+ end
+ merge_ts(root_id, merge_id)
+end
+
+function ildb.remove_from_interlocking(sigd)
+ local tcbs = ildb.get_tcbs(sigd)
+ if not ildb.may_modify_tcbs(tcbs) then return false end
+
+ if tcbs.ts_id then
+ local tsid = tcbs.ts_id
+ local ts = ildb.get_ts(tsid)
+ if not ts then
+ tcbs.ts_id = nil
+ return true
+ end
+
+ -- remove entry from the list
+ local idx = 1
+ while idx <= #ts.tc_breaks do
+ local cmp = ts.tc_breaks[idx]
+ if sigd_equal(sigd, cmp) then
+ table.remove(ts.tc_breaks, idx)
+ else
+ idx = idx + 1
+ end
+ end
+ tcbs.ts_id = nil
+
+ --ildb.sync_tcb_neighbors(sigd.p, sigd.s)
+
+ if #ts.tc_breaks == 0 then
+ track_sections[tsid] = nil
+ end
+ end
+ advtrains.interlocking.show_tcb_marker(sigd.p)
+ if tcbs.signal then
+ return false
+ end
+ return true
+end
+
+function ildb.remove_tcb(pos)
+ local pts = advtrains.roundfloorpts(pos)
+ if not track_circuit_breaks[pts] then return end
+ for connid=1,2 do
+ if not ildb.remove_from_interlocking({p=pos, s=connid}) then
+ return false
+ end
+ end
+ track_circuit_breaks[pts] = nil
+ return true
+end
+
+function ildb.dissolve_ts(ts_id)
+ local ts = ildb.get_ts(ts_id)
+ if not ildb.may_modify_ts(ts) then return false end
+ local tcbr = advtrains.merge_tables(ts.tc_breaks)
+ for _,sigd in ipairs(tcbr) do
+ ildb.remove_from_interlocking(sigd)
+ end
+ -- Note: ts gets removed in the moment of the removal of the last TCB.
+ return true
+end
+
+-- Returns true if it is allowed to modify any property of a track section, such as
+-- - removing TCBs
+-- - merging and dissolving sections
+-- As of now the action will be denied if a route is set or if a train is in the section.
+function ildb.may_modify_ts(ts)
+ if ts.route or ts.route_post or (ts.trains and #ts.trains>0) then
+ return false
+ end
+ return true
+end
+
+
+function ildb.may_modify_tcbs(tcbs)
+ if tcbs.ts_id then
+ local ts = ildb.get_ts(tcbs.ts_id)
+ if ts and not ildb.may_modify_ts(ts) then
+ return false
+ end
+ end
+ return true
+end
+
+-- Utilize the traverser to find the track section at the specified position
+-- Returns:
+-- ts_id, origin - the first found ts and the sigd of the found tcb
+-- nil - there were no TCBs in TRAVERSER_MAX range of the position
+-- false - the first found TCB stated End-Of-Interlocking, or track ends were reached
+function ildb.get_ts_at_pos(pos)
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ if not node_ok then
+ error("get_ts_at_pos but node is NOK: "..minetest.pos_to_string(pos))
+ end
+ local limit_hit = false
+ local found_tcbs = {}
+ for connid, conn in ipairs(conns) do -- Note: a breadth-first-search would be better for performance
+ limit_hit = limit_hit or traverser(found_tcbs, pos, conns, connid, 0, 1)
+ if #found_tcbs >= 1 then
+ local tcbs = ildb.get_tcbs(found_tcbs[1])
+ local ts
+ if tcbs.ts_id then
+ return tcbs.ts_id, found_tcbs[1]
+ else
+ return false
+ end
+ end
+ end
+ if limit_hit then
+ -- there was at least one limit hit
+ return nil
+ else
+ -- all traverser ends were track ends
+ return false
+ end
+end
+
+
+-- returns the sigd the signal at pos belongs to, if this is known
+function ildb.get_sigd_for_signal(pos)
+ local pts = advtrains.roundfloorpts(pos)
+ local sigd = signal_assignments[pts]
+ if sigd then
+ if not ildb.get_tcbs(sigd) then
+ signal_assignments[pts] = nil
+ return nil
+ end
+ return sigd
+ end
+ return nil
+end
+function ildb.set_sigd_for_signal(pos, sigd)
+ local pts = advtrains.roundfloorpts(pos)
+ signal_assignments[pts] = sigd
+end
+
+-- checks if there's any influence point set to this position
+function ildb.is_ip_at(pos)
+ local pts = advtrains.roundfloorpts(pos)
+ if influence_points[pts] then
+ return true
+ end
+ return false
+end
+
+-- checks if a signal is influencing here
+function ildb.get_ip_signal(pts, connid)
+ if influence_points[pts] then
+ return influence_points[pts][connid]
+ end
+end
+
+-- Tries to get aspect to obey here, if there
+-- is a signal ip at this location
+-- auto-clears invalid assignments
+function ildb.get_ip_signal_asp(pts, connid)
+ local p = ildb.get_ip_signal(pts, connid)
+ if p then
+ local asp = advtrains.interlocking.signal_get_aspect(p)
+ if not asp then
+ atlog("Clearing orphaned signal influence point", pts, "/", connid)
+ ildb.clear_ip_signal(pts, connid)
+ return nil
+ end
+ return asp, p
+ end
+ return nil
+end
+
+-- set signal assignment.
+function ildb.set_ip_signal(pts, connid, spos)
+ ildb.clear_ip_by_signalpos(spos)
+ if not influence_points[pts] then
+ influence_points[pts] = {}
+ end
+ influence_points[pts][connid] = spos
+end
+-- clear signal assignment.
+function ildb.clear_ip_signal(pts, connid)
+ influence_points[pts][connid] = nil
+ for _,_ in pairs(influence_points[pts]) do
+ return
+ end
+ influence_points[pts] = nil
+end
+
+function ildb.get_ip_by_signalpos(spos)
+ for pts,tab in pairs(influence_points) do
+ for connid,pos in pairs(tab) do
+ if vector.equals(pos, spos) then
+ return pts, connid
+ end
+ end
+ end
+end
+-- clear signal assignment given the signal position
+function ildb.clear_ip_by_signalpos(spos)
+ local pts, connid = ildb.get_ip_by_signalpos(spos)
+ if pts then ildb.clear_ip_signal(pts, connid) end
+end
+
+
+advtrains.interlocking.db = ildb
+
+
+
+
diff --git a/advtrains/advtrains_interlocking/demosignals.lua b/advtrains/advtrains_interlocking/demosignals.lua
new file mode 100644
index 0000000..ab7a8b6
--- /dev/null
+++ b/advtrains/advtrains_interlocking/demosignals.lua
@@ -0,0 +1,111 @@
+-- Demonstration signals
+-- Those can display the 3 main aspects of Ks signals
+
+-- Note that the group value of advtrains_signal is 2, which means "step 2 of signal capabilities"
+-- advtrains_signal=1 is meant for signals that do not implement set_aspect.
+
+
+local setaspect = function(pos, node, asp)
+ if not asp.main.free then
+ advtrains.ndb.swap_node(pos, {name="advtrains_interlocking:ds_danger"})
+ else
+ if asp.dst.free and asp.main.speed == -1 then
+ advtrains.ndb.swap_node(pos, {name="advtrains_interlocking:ds_free"})
+ else
+ advtrains.ndb.swap_node(pos, {name="advtrains_interlocking:ds_slow"})
+ end
+ end
+ local meta = minetest.get_meta(pos)
+ if meta then
+ meta:set_string("infotext", minetest.serialize(asp))
+ end
+end
+
+local suppasp = {
+ main = {
+ free = nil,
+ speed = {6, -1},
+ },
+ dst = {
+ free = nil,
+ speed = nil,
+ },
+ shunt = {
+ free = false,
+ proceed_as_main = true,
+ },
+ info = {
+ call_on = false,
+ dead_end = false,
+ w_speed = nil,
+ }
+}
+
+minetest.register_node("advtrains_interlocking:ds_danger", {
+ description = "Demo signal at Danger",
+ tiles = {"at_il_signal_asp_danger.png"},
+ groups = {
+ cracky = 3,
+ advtrains_signal = 2,
+ save_in_at_nodedb = 1,
+ },
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ set_aspect = setaspect,
+ supported_aspects = suppasp,
+ get_aspect = function(pos, node)
+ return advtrains.interlocking.DANGER
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+})
+minetest.register_node("advtrains_interlocking:ds_free", {
+ description = "Demo signal at Free",
+ tiles = {"at_il_signal_asp_free.png"},
+ groups = {
+ cracky = 3,
+ advtrains_signal = 2,
+ save_in_at_nodedb = 1,
+ },
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ set_aspect = setaspect,
+ supported_aspects = suppasp,
+ get_aspect = function(pos, node)
+ return {
+ main = {
+ free = true,
+ speed = -1,
+ }
+ }
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+})
+minetest.register_node("advtrains_interlocking:ds_slow", {
+ description = "Demo signal at Slow",
+ tiles = {"at_il_signal_asp_slow.png"},
+ groups = {
+ cracky = 3,
+ advtrains_signal = 2,
+ save_in_at_nodedb = 1,
+ },
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ set_aspect = setaspect,
+ supported_aspects = suppasp,
+ get_aspect = function(pos, node)
+ return {
+ main = {
+ free = true,
+ speed = 6,
+ }
+ }
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+})
+
diff --git a/advtrains/advtrains_interlocking/depends.txt b/advtrains/advtrains_interlocking/depends.txt
new file mode 100644
index 0000000..fdf6b17
--- /dev/null
+++ b/advtrains/advtrains_interlocking/depends.txt
@@ -0,0 +1,2 @@
+advtrains
+advtrains_train_track? \ No newline at end of file
diff --git a/advtrains/advtrains_interlocking/init.lua b/advtrains/advtrains_interlocking/init.lua
new file mode 100644
index 0000000..a2f5882
--- /dev/null
+++ b/advtrains/advtrains_interlocking/init.lua
@@ -0,0 +1,30 @@
+-- Advtrains interlocking system
+-- See database.lua for a detailed explanation
+
+advtrains.interlocking = {}
+
+advtrains.SHUNT_SPEED_MAX = 6
+
+function advtrains.interlocking.sigd_equal(sigd, cmp)
+ return vector.equals(sigd.p, cmp.p) and sigd.s==cmp.s
+end
+
+
+local modpath = minetest.get_modpath(minetest.get_current_modname()) .. DIR_DELIM
+
+dofile(modpath.."database.lua")
+dofile(modpath.."signal_api.lua")
+dofile(modpath.."demosignals.lua")
+dofile(modpath.."train_sections.lua")
+dofile(modpath.."route_prog.lua")
+dofile(modpath.."routesetting.lua")
+dofile(modpath.."tcb_ts_ui.lua")
+dofile(modpath.."route_ui.lua")
+dofile(modpath.."tool.lua")
+
+dofile(modpath.."approach.lua")
+dofile(modpath.."ars.lua")
+dofile(modpath.."tsr_rail.lua")
+
+
+minetest.register_privilege("interlocking", {description = "Can set up track sections, routes and signals.", give_to_singleplayer = true})
diff --git a/advtrains/advtrains_interlocking/models/at_il_tcb_node.obj b/advtrains/advtrains_interlocking/models/at_il_tcb_node.obj
new file mode 100644
index 0000000..bb6aab5
--- /dev/null
+++ b/advtrains/advtrains_interlocking/models/at_il_tcb_node.obj
@@ -0,0 +1,248 @@
+# Blender v2.76 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib at_il_tcb_node.mtl
+o Cube
+v 0.038370 -0.500000 -0.038370
+v 0.038370 -0.500000 0.038370
+v -0.038370 -0.500000 0.038370
+v -0.038370 -0.500000 -0.038370
+v 0.038370 0.098086 -0.038370
+v 0.038370 0.098086 0.038370
+v -0.038370 0.098086 0.038370
+v -0.038370 0.098086 -0.038370
+v -0.182395 0.065479 0.099357
+v -0.182395 0.182395 0.099357
+v -0.182395 0.065479 -0.171034
+v -0.182395 0.182395 -0.171034
+v 0.182395 0.065479 0.099357
+v 0.182395 0.182395 0.099357
+v 0.182395 0.065479 -0.171034
+v 0.182395 0.182395 -0.171034
+v -0.112374 0.070035 -0.139406
+v -0.112374 -0.500000 -0.139406
+v 0.112189 -0.500000 -0.139406
+v 0.112189 0.070035 -0.139406
+v 0.122883 -0.500000 -0.137278
+v 0.122883 0.070035 -0.137278
+v 0.131950 -0.500000 -0.131220
+v 0.131950 0.070035 -0.131220
+v 0.138008 -0.500000 -0.122154
+v 0.138008 0.070035 -0.122154
+v 0.140135 -0.500000 -0.111459
+v 0.140135 0.070035 -0.111459
+v 0.138008 -0.500000 -0.100765
+v 0.138008 0.070035 -0.100765
+v 0.131950 -0.500000 -0.091698
+v 0.131950 0.070035 -0.091698
+v 0.122883 -0.500000 -0.085640
+v 0.122883 0.070035 -0.085640
+v 0.112189 -0.500000 -0.083513
+v 0.112189 0.070035 -0.083513
+v 0.101494 -0.500000 -0.085640
+v 0.101494 0.070035 -0.085640
+v 0.092428 -0.500000 -0.091698
+v 0.092428 0.070035 -0.091698
+v 0.086370 -0.500000 -0.100765
+v 0.086370 0.070035 -0.100765
+v 0.084242 -0.500000 -0.111459
+v 0.084242 0.070035 -0.111459
+v 0.086370 -0.500000 -0.122154
+v 0.086370 0.070035 -0.122154
+v 0.092428 -0.500000 -0.131220
+v 0.092428 0.070035 -0.131220
+v 0.101494 -0.500000 -0.137278
+v 0.101494 0.070035 -0.137278
+v -0.101679 -0.500000 -0.137278
+v -0.101679 0.070035 -0.137278
+v -0.092613 -0.500000 -0.131220
+v -0.092613 0.070035 -0.131220
+v -0.086555 -0.500000 -0.122154
+v -0.086555 0.070035 -0.122154
+v -0.084428 -0.500000 -0.111459
+v -0.084428 0.070035 -0.111459
+v -0.086555 -0.500000 -0.100765
+v -0.086555 0.070035 -0.100765
+v -0.092613 -0.500000 -0.091698
+v -0.092613 0.070035 -0.091698
+v -0.101679 -0.500000 -0.085640
+v -0.101679 0.070035 -0.085640
+v -0.112374 -0.500000 -0.083513
+v -0.112374 0.070035 -0.083513
+v -0.123069 -0.500000 -0.085640
+v -0.123069 0.070035 -0.085640
+v -0.132135 -0.500000 -0.091698
+v -0.132135 0.070035 -0.091698
+v -0.138193 -0.500000 -0.100765
+v -0.138193 0.070035 -0.100765
+v -0.140320 -0.500000 -0.111459
+v -0.140320 0.070035 -0.111459
+v -0.138193 -0.500000 -0.122154
+v -0.138193 0.070035 -0.122154
+v -0.132135 -0.500000 -0.131220
+v -0.132135 0.070035 -0.131220
+v -0.123069 -0.500000 -0.137278
+v -0.123069 0.070035 -0.137278
+vt 0.876073 0.266665
+vt 0.876073 0.977812
+vt 0.784827 0.977812
+vt 0.784827 0.266665
+vt 0.693582 0.977812
+vt 0.693582 0.266665
+vt 0.602336 0.977812
+vt 0.602336 0.266665
+vt 0.967319 0.266665
+vt 0.967319 0.977812
+vt 0.147929 0.032040
+vt 0.469434 0.032040
+vt 0.469434 0.171057
+vt 0.147929 0.171057
+vt 0.903184 0.032040
+vt 0.903184 0.171057
+vt 0.147929 0.032751
+vt 0.469434 0.032751
+vt 0.469434 0.171768
+vt 0.147929 0.171768
+vt 0.903184 0.032751
+vt 0.903183 0.171768
+vt 0.263807 0.270252
+vt 0.585312 0.270252
+vt 0.585312 0.704001
+vt 0.263807 0.704001
+vt 0.584297 0.703059
+vt 0.262792 0.703059
+vt 0.262793 0.269309
+vt 0.584297 0.269309
+vt 0.108472 0.980897
+vt 0.108473 0.303114
+vt 0.121438 0.303114
+vt 0.121438 0.980897
+vt 0.081877 0.980125
+vt 0.081879 0.302342
+vt 0.094844 0.302342
+vt 0.094843 0.980125
+vt 0.095507 0.980897
+vt 0.095508 0.303114
+vt 0.107809 0.302342
+vt 0.107808 0.980125
+vt 0.082541 0.980897
+vt 0.082543 0.303114
+vt 0.120774 0.302342
+vt 0.120774 0.980125
+vt 0.069575 0.980897
+vt 0.069577 0.303114
+vt 0.133739 0.302342
+vt 0.133740 0.980125
+vt 0.056609 0.980897
+vt 0.056612 0.303114
+vt 0.146705 0.302342
+vt 0.146706 0.980125
+vt 0.043643 0.980897
+vt 0.043647 0.303114
+vt 0.159670 0.302342
+vt 0.159672 0.980125
+vt 0.030677 0.980897
+vt 0.030682 0.303113
+vt 0.172635 0.302342
+vt 0.172638 0.980125
+vt 0.017711 0.980897
+vt 0.017717 0.303113
+vt 0.185600 0.302342
+vt 0.185604 0.980125
+vt 0.212200 0.980896
+vt 0.212195 0.303113
+vt 0.225160 0.303113
+vt 0.225166 0.980896
+vt 0.198565 0.302342
+vt 0.198570 0.980125
+vt 0.199234 0.980897
+vt 0.199230 0.303114
+vt 0.211531 0.302342
+vt 0.211536 0.980125
+vt 0.186268 0.980897
+vt 0.186264 0.303114
+vt 0.224496 0.302342
+vt 0.224502 0.980125
+vt 0.173302 0.980897
+vt 0.173299 0.303114
+vt 0.017047 0.980125
+vt 0.017052 0.302342
+vt 0.030018 0.302342
+vt 0.030013 0.980125
+vt 0.134403 0.303114
+vt 0.134404 0.980897
+vt 0.160336 0.980897
+vt 0.160334 0.303114
+vt 0.042983 0.302342
+vt 0.042979 0.980125
+vt 0.147369 0.303114
+vt 0.147370 0.980897
+vt 0.055948 0.302342
+vt 0.055945 0.980125
+vt 0.068911 0.980125
+vt 0.068913 0.302342
+vn 1.000000 0.000000 0.000000
+vn -0.000000 -0.000000 1.000000
+vn -1.000000 -0.000000 -0.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 0.000000
+vn 0.000000 1.000000 0.000000
+vn -0.831500 0.000000 -0.555600
+vn 0.195100 0.000000 -0.980800
+vn -0.980800 0.000000 -0.195100
+vn 0.555600 0.000000 -0.831500
+vn -0.980800 0.000000 0.195100
+vn 0.831500 0.000000 -0.555600
+vn -0.831500 0.000000 0.555600
+vn 0.980800 0.000000 -0.195100
+vn -0.555600 0.000000 0.831500
+vn 0.980800 0.000000 0.195100
+vn -0.195100 0.000000 0.980800
+vn 0.831500 0.000000 0.555600
+vn 0.195100 0.000000 0.980800
+vn 0.555600 0.000000 0.831500
+vn -0.555600 0.000000 -0.831500
+vn -0.195100 0.000000 -0.980800
+usemtl Material
+s off
+f 1/1/1 5/2/1 6/3/1 2/4/1
+f 2/4/2 6/3/2 7/5/2 3/6/2
+f 3/6/3 7/5/3 8/7/3 4/8/3
+f 5/2/4 1/1/4 4/9/4 8/10/4
+f 10/11/3 12/12/3 11/13/3 9/14/3
+f 12/12/4 16/15/4 15/16/4 11/13/4
+f 16/17/1 14/18/1 13/19/1 15/20/1
+f 14/18/2 10/21/2 9/22/2 13/19/2
+f 9/23/5 11/24/5 15/25/5 13/26/5
+f 14/27/6 16/28/6 12/29/6 10/30/6
+f 75/31/7 76/32/7 78/33/7 77/34/7
+f 19/35/8 20/36/8 22/37/8 21/38/8
+f 73/39/9 74/40/9 76/32/9 75/31/9
+f 21/38/10 22/37/10 24/41/10 23/42/10
+f 71/43/11 72/44/11 74/40/11 73/39/11
+f 23/42/12 24/41/12 26/45/12 25/46/12
+f 69/47/13 70/48/13 72/44/13 71/43/13
+f 25/46/14 26/45/14 28/49/14 27/50/14
+f 67/51/15 68/52/15 70/48/15 69/47/15
+f 27/50/16 28/49/16 30/53/16 29/54/16
+f 65/55/17 66/56/17 68/52/17 67/51/17
+f 29/54/18 30/53/18 32/57/18 31/58/18
+f 63/59/19 64/60/19 66/56/19 65/55/19
+f 31/58/20 32/57/20 34/61/20 33/62/20
+f 61/63/20 62/64/20 64/60/20 63/59/20
+f 33/62/19 34/61/19 36/65/19 35/66/19
+f 59/67/18 60/68/18 62/69/18 61/70/18
+f 35/66/17 36/65/17 38/71/17 37/72/17
+f 57/73/16 58/74/16 60/68/16 59/67/16
+f 37/72/15 38/71/15 40/75/15 39/76/15
+f 55/77/14 56/78/14 58/74/14 57/73/14
+f 39/76/13 40/75/13 42/79/13 41/80/13
+f 53/81/12 54/82/12 56/78/12 55/77/12
+f 41/83/11 42/84/11 44/85/11 43/86/11
+f 77/34/21 78/33/21 80/87/21 79/88/21
+f 51/89/10 52/90/10 54/82/10 53/81/10
+f 43/86/9 44/85/9 46/91/9 45/92/9
+f 79/88/22 80/87/22 17/93/22 18/94/22
+f 18/94/8 17/93/8 52/90/8 51/89/8
+f 45/92/7 46/91/7 48/95/7 47/96/7
+f 49/97/22 50/98/22 20/36/22 19/35/22
+f 47/96/21 48/95/21 50/98/21 49/97/21
diff --git a/advtrains/advtrains_interlocking/route_prog.lua b/advtrains/advtrains_interlocking/route_prog.lua
new file mode 100644
index 0000000..eadfd93
--- /dev/null
+++ b/advtrains/advtrains_interlocking/route_prog.lua
@@ -0,0 +1,548 @@
+-- Route programming system
+
+--[[
+Progamming routes:
+1. Select "program new route" in the signalling dialog
+-> route_start marker will appear to designate route-program mode
+2. Do those actions in any order:
+A. punch a TCB marker node to proceed route along this TCB. This will only work if
+ this is actually a TCB bordering the current TS, and will place a
+ route_set marker and shift to the next TS
+B. right-click a turnout to switch it (no impact to route programming
+C. punch a turnout (or some other passive component) to fix its state (toggle)
+ for the route. A sprite telling "Route Fix" will show that fact.
+3. To complete route setting, use the chat command '/at_program_route <route name>'.
+ The last punched TCB will get a 'route end' marker
+ The end of a route should be at another signal facing the same direction as the entrance signal,
+ however this is not enforced and left up to the signal engineer (the programmer)
+
+The route visualization will also be used to visualize routes after they have been programmed.
+]]--
+
+
+-- table with objectRefs
+local markerent = {}
+
+minetest.register_entity("advtrains_interlocking:routemarker", {
+ visual = "mesh",
+ mesh = "trackplane.b3d",
+ textures = {"at_il_route_set.png"},
+ collisionbox = {-1,-0.5,-1, 1,-0.4,1},
+ visual_size = {x=10, y=10},
+ on_punch = function(self)
+ self.object:remove()
+ end,
+ get_staticdata = function() return "STATIC" end,
+ on_activate = function(self, sdata) if sdata=="STATIC" then self.object:remove() end end,
+ static_save = false,
+})
+
+
+-- Spawn or update a route marker entity
+-- pos: position where this is going to be
+-- key: something unique to determine which entity to remove if this was set before
+-- img: texture
+local function routemarker(context, pos, key, img, yaw, itex)
+ if not markerent[context] then
+ markerent[context] = {}
+ end
+ if markerent[context][key] then
+ markerent[context][key]:remove()
+ end
+
+ local obj = minetest.add_entity(vector.add(pos, {x=0, y=0.3, z=0}), "advtrains_interlocking:routemarker")
+ if not obj then return end
+ obj:set_yaw(yaw)
+ obj:set_properties({
+ infotext = itex,
+ textures = {img},
+ })
+
+ markerent[context][key] = obj
+end
+
+minetest.register_entity("advtrains_interlocking:routesprite", {
+ visual = "sprite",
+ textures = {"at_il_turnout_free.png"},
+ collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2},
+ visual_size = {x=1, y=1},
+ on_punch = function(self)
+ if self.callback then
+ self.callback()
+ end
+ self.object:remove()
+ end,
+ get_staticdata = function() return "STATIC" end,
+ on_activate = function(self, sdata) if sdata=="STATIC" then self.object:remove() end end,
+ static_save = false,
+})
+
+
+-- Spawn or update a route sprite entity
+-- pos: position where this is going to be
+-- key: something unique to determine which entity to remove if this was set before
+-- img: texture
+local function routesprite(context, pos, key, img, itex, callback)
+ if not markerent[context] then
+ markerent[context] = {}
+ end
+ if markerent[context][key] then
+ markerent[context][key]:remove()
+ end
+
+ local obj = minetest.add_entity(vector.add(pos, {x=0, y=0, z=0}), "advtrains_interlocking:routesprite")
+ if not obj then return end
+ obj:set_properties({
+ infotext = itex,
+ textures = {img},
+ })
+
+ if callback then
+ obj:get_luaentity().callback = callback
+ end
+
+ markerent[context][key] = obj
+end
+
+--[[
+Route definition:
+route = {
+ name = <string>
+ [n] = {
+ next = <sigd>, -- of the next (note: next) TCB on the route
+ locks = {<pts> = "state"} -- route locks of this route segment
+ }
+ terminal =
+}
+The first item in the TCB path (namely i=0) is always the start signal of this route,
+so this is left out.
+All subsequent entries, starting from 1, contain:
+- all route locks of the segment on TS between the (i-1). and the i. TCB
+- the next TCB signal describer in proceeding direction of the route.
+'Terminal' once again repeats the "next" entry of the last route segment.
+It is needed for distant signal aspect determination. If it is not set,
+the distant signal aspect is determined as DANGER.
+]]--
+
+local function chat(pname, message)
+ minetest.chat_send_player(pname, "[Route programming] "..message)
+end
+local function clear_lock(locks, pname, pts)
+ locks[pts] = nil
+ chat(pname, pts.." is no longer affected when this route is set.")
+end
+
+local function otherside(s)
+ if s==1 then return 2 else return 1 end
+end
+
+function advtrains.interlocking.clear_visu_context(context)
+ if not markerent[context] then return end
+ for key, obj in pairs(markerent[context]) do
+ obj:remove()
+ end
+ markerent[context] = nil
+end
+
+-- visualize route. 'context' is a string that identifies the context of this visualization
+-- e.g. prog_<player> or vis_<pts> for later visualizations
+-- last 2 parameters are only to be used in the context of route programming!
+function advtrains.interlocking.visualize_route(origin, route, context, tmp_lcks, pname)
+ advtrains.interlocking.clear_visu_context(context)
+
+ local oyaw = 0
+ local onode_ok, oconns, orhe = advtrains.get_rail_info_at(origin.p, advtrains.all_tracktypes)
+ if onode_ok then
+ oyaw = advtrains.dir_to_angle(oconns[origin.s].c)
+ end
+ routemarker(context, origin.p, "rte_origin", "at_il_route_start.png", oyaw, route.name)
+
+ local c_sigd = origin
+ for k,v in ipairs(route) do
+ c_sigd = v.next
+ -- display route path
+ -- Final "next" marker can be EOI, thus undefined. This is legitimate.
+ if c_sigd then
+ local yaw = 0
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(c_sigd.p, advtrains.all_tracktypes)
+ if node_ok then
+ yaw = advtrains.dir_to_angle(conns[c_sigd.s].c)
+ end
+ local img = "at_il_route_set.png"
+ if k==#route and not tmp_lcks then
+ img = "at_il_route_end.png"
+ end
+ routemarker(context, c_sigd.p, "rte"..k, img, yaw, route.name.." #"..k)
+ end
+ -- display locks
+ for pts, state in pairs(v.locks) do
+ local pos = minetest.string_to_pos(pts)
+ routesprite(context, pos, "fix"..k..pts, "at_il_route_lock.png", "Fixed in state '"..state.."' by route "..route.name.." until segment #"..k.." is freed.")
+ end
+ end
+
+ -- The presence of tmp_lcks tells us that we are displaying during route programming.
+ if tmp_lcks then
+ -- display route end markers at appropriate places (check next TS, if it exists)
+ local terminal = c_sigd
+ if terminal then
+ local term_tcbs = advtrains.interlocking.db.get_tcbs(terminal)
+ if term_tcbs.ts_id then
+ local over_ts = advtrains.interlocking.db.get_ts(term_tcbs.ts_id)
+ for i, sigd in ipairs(over_ts.tc_breaks) do
+ if not vector.equals(sigd.p, terminal.p) then
+ local yaw = 0
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(sigd.p, advtrains.all_tracktypes)
+ if node_ok then
+ yaw = advtrains.dir_to_angle(conns[otherside(sigd.s)].c)
+ end
+ routemarker(context, sigd.p, "rteterm"..i, "at_il_route_end.png", yaw, route.name.." Terminal "..i)
+ end
+ end
+ end
+ end
+ -- display locks set by player
+ for pts, state in pairs(tmp_lcks) do
+ local pos = minetest.string_to_pos(pts)
+ routesprite(context, pos, "fixp"..pts, "at_il_route_lock_edit.png", "Fixed in state '"..state.."' by route "..route.name.." (punch to unfix)",
+ function() clear_lock(tmp_lcks, pname, pts) end)
+ end
+ end
+end
+
+
+local player_rte_prog = {}
+
+function advtrains.interlocking.init_route_prog(pname, sigd)
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ player_rte_prog[pname] = {
+ origin = sigd,
+ route = {
+ name = "PROG["..pname.."]",
+ },
+ tmp_lcks = {},
+ }
+ advtrains.interlocking.visualize_route(sigd, player_rte_prog[pname].route, "prog_"..pname, player_rte_prog[pname].tmp_lcks, pname)
+ minetest.chat_send_player(pname, "Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.")
+end
+
+local function get_last_route_item(origin, route)
+ if #route == 0 then
+ return origin
+ end
+ return route[#route].next
+end
+
+local function do_advance_route(pname, rp, sigd, tsname)
+ table.insert(rp.route, {next = sigd, locks = rp.tmp_lcks})
+ rp.tmp_lcks = {}
+ chat(pname, "Added track section '"..tsname.."' to the route.")
+end
+
+local function finishrpform(pname)
+ local rp = player_rte_prog[pname]
+ if not rp then return end
+
+ local form = "size[7,6]label[0.5,0.5;Finish programming route]"
+ local terminal = get_last_route_item(rp.origin, rp.route)
+ if terminal then
+ local term_tcbs = advtrains.interlocking.db.get_tcbs(terminal)
+
+ if term_tcbs.signal then
+ form = form .. "label[0.5,1.5;Route ends at signal:]"
+ form = form .. "label[0.5,2 ;"..term_tcbs.signal_name.."]"
+ else
+ form = form .. "label[0.5,1.5;WARNING: Route does not end at a signal.]"
+ form = form .. "label[0.5,2 ;Routes should in most cases end at signals.]"
+ form = form .. "label[0.5,2.5;Cancel if you are unsure!]"
+ end
+ else
+ form = form .. "label[0.5,1.5;Route leads into]"
+ form = form .. "label[0.5,2 ;non-interlocked area]"
+ end
+ form = form.."field[0.8,3.5;5.2,1;name;Enter Route Name;]"
+ form = form.."button_exit[0.5,4.5; 5,1;save;Save Route]"
+
+
+ minetest.show_formspec(pname, "at_il_routepf", form)
+end
+
+
+local function check_advance_valid(tcbpos, rp)
+ -- track circuit break, try to advance route over it
+ local lri = get_last_route_item(rp.origin, rp.route)
+ if not lri then
+ return false, false
+ end
+
+ local is_endpoint = false
+
+ local this_sigd, this_ts, adv_side
+
+ if vector.equals(lri.p, tcbpos) then
+ -- If the player just punched the last TCB again, it's of course possible to
+ -- finish the route here (although it can't be advanced by here.
+ -- Fun fact: you can now program routes that end exactly where they begin :)
+ is_endpoint = true
+ this_sigd = lri
+ else
+ -- else, we need to check whether this TS actually borders
+ local start_tcbs = advtrains.interlocking.db.get_tcbs(lri)
+ if not start_tcbs.ts_id then
+ return false, false
+ end
+
+ this_ts = advtrains.interlocking.db.get_ts(start_tcbs.ts_id)
+ for _,sigd in ipairs(this_ts.tc_breaks) do
+ if vector.equals(sigd.p, tcbpos) then
+ adv_side = otherside(sigd.s)
+ end
+ end
+ if not adv_side then
+ -- this TCB is not bordering to the section
+ return false, false
+ end
+ this_sigd = {p=tcbpos, s=adv_side}
+ end
+
+ -- check whether the ts at the other end is capable of "end over"
+ local adv_tcbs = advtrains.interlocking.db.get_tcbs(this_sigd)
+ local next_tsid = adv_tcbs.ts_id
+ local can_over, over_ts, next_tc_bs = false, nil, nil
+ local cannotover_rsn = "Next section is diverging (>2 TCBs)"
+ if next_tsid then
+ -- you may not advance over EOI. While this is technically possible,
+ -- in practise this just enters an unnecessary extra empty route item.
+ over_ts = advtrains.interlocking.db.get_ts(adv_tcbs.ts_id)
+ next_tc_bs = over_ts.tc_breaks
+ can_over = #next_tc_bs <= 2
+ else
+ cannotover_rsn = "End of interlocking"
+ end
+
+ local over_sigd = nil
+ if can_over then
+ if next_tc_bs and #next_tc_bs == 2 then
+ local sdt
+ if vector.equals(next_tc_bs[1].p, tcbpos) then
+ sdt = next_tc_bs[2]
+ end
+ if vector.equals(next_tc_bs[2].p, tcbpos) then
+ sdt = next_tc_bs[1]
+ end
+ if not sdt then
+ error("Inconsistency: "..dump(next_ts))
+ end
+ -- swap TCB direction
+ over_sigd = {p = sdt.p, s = otherside(sdt.s) }
+ end
+ end
+
+ return is_endpoint, true, this_sigd, this_ts, can_over, over_ts, over_sigd, cannotover_rsn
+end
+
+local function show_routing_form(pname, tcbpos, message)
+
+ local rp = player_rte_prog[pname]
+
+ if not rp then return end
+
+ local is_endpoint, advance_valid, this_sigd, this_ts, can_over, over_ts, over_sigd, cannotover_rsn = check_advance_valid(tcbpos, rp)
+
+ -- at this place, advance_valid shows whether the current route can be advanced
+ -- over this TCB.
+ -- If it can:
+ -- Advance over (continue programming)
+ -- End here
+ -- Advance and end (only <=2 TCBs, terminal signal needs to be known)
+ -- if not:
+ -- show nothing at all
+ -- In all cases, Discard and Backtrack buttons needed.
+
+ local form = "size[7,9.5]label[0.5,0.5;Advance/Complete Route]"
+ if message then
+ form = form .. "label[0.5,1;"..message.."]"
+ end
+
+ if advance_valid and not is_endpoint then
+ form = form.. "label[0.5,1.8;Advance to next route section]"
+ form = form.."image_button[0.5,2.2; 5,1;at_il_routep_advance.png;advance;]"
+
+ form = form.. "label[0.5,3.5;-------------------------]"
+ else
+ form = form.. "label[0.5,2.3;This TCB is not suitable as]"
+ form = form.. "label[0.5,2.8;route continuation.]"
+ end
+ if advance_valid or is_endpoint then
+ form = form.. "label[0.5,3.8;Finish route HERE]"
+ form = form.."image_button[0.5, 4.2; 5,1;at_il_routep_end_here.png;endhere;]"
+ if can_over then
+ form = form.. "label[0.5,5.3;Finish route at end of NEXT section]"
+ form = form.."image_button[0.5,5.7; 5,1;at_il_routep_end_over.png;endover;]"
+ else
+ form = form.. "label[0.5,5.3;Advancing over next section is]"
+ form = form.. "label[0.5,5.8;impossible at this place.]"
+ if cannotover_rsn then
+ form = form.. "label[0.5,6.3;"..cannotover_rsn.."]"
+ end
+ end
+ end
+
+ form = form.. "label[0.5,7;-------------------------]"
+ if #rp.route > 0 then
+ form = form.."button[0.5,7.4; 5,1;retract;Step back one section]"
+ end
+ form = form.."button[0.5,8.4; 5,1;cancel;Cancel route programming]"
+
+ minetest.show_formspec(pname, "at_il_rprog_"..minetest.pos_to_string(tcbpos), form)
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+
+ local tcbpts = string.match(formname, "^at_il_rprog_([^_]+)$")
+ local tcbpos
+ if tcbpts then
+ tcbpos = minetest.string_to_pos(tcbpts)
+ end
+ if tcbpos then
+ -- RPROG form
+ local rp = player_rte_prog[pname]
+ if not rp then
+ minetest.close_formspec(pname, formname)
+ return
+ end
+
+ local is_endpoint, advance_valid, this_sigd, this_ts, can_over, over_ts, over_sigd = check_advance_valid(tcbpos, rp)
+
+ if advance_valid then
+ if fields.advance then
+ -- advance route
+ if not is_endpoint then
+ do_advance_route(pname, rp, this_sigd, this_ts.name)
+ end
+ end
+ if fields.endhere then
+ if not is_endpoint then
+ do_advance_route(pname, rp, this_sigd, this_ts.name)
+ end
+ finishrpform(pname)
+ end
+ if can_over and fields.endover then
+ if not is_endpoint then
+ do_advance_route(pname, rp, this_sigd, this_ts.name)
+ end
+ do_advance_route(pname, rp, over_sigd, over_ts and over_ts.name or "--EOI--")
+ finishrpform(pname)
+ end
+ end
+ if fields.retract then
+ if #rp.route <= 0 then
+ minetest.close_formspec(pname, formname)
+ return
+ end
+ rp.tmp_locks = rp.route[#rp.route].locks
+ rp.route[#rp.route] = nil
+ chat(pname, "Route section "..(#rp.route+1).." removed.")
+ end
+ if fields.cancel then
+ player_rte_prog[pname] = nil
+ advtrains.interlocking.clear_visu_context("prog_"..pname)
+ chat(pname, "Route discarded.")
+ minetest.close_formspec(pname, formname)
+ return
+ end
+
+ advtrains.interlocking.visualize_route(rp.origin, rp.route, "prog_"..pname, rp.tmp_lcks, pname)
+ minetest.close_formspec(pname, formname)
+ return
+ end
+
+ if formname == "at_il_routepf" then
+ if not fields.save or not fields.name then return end
+ if fields.name == "" then
+ -- show form again
+ finishrpform(pname)
+ return
+ end
+
+ local rp = player_rte_prog[pname]
+ if rp then
+ if #rp.route <= 0 then
+ chat(pname, "Cannot program route without a target")
+ return
+ end
+
+ local tcbs = advtrains.interlocking.db.get_tcbs(rp.origin)
+ if not tcbs then
+ chat(pname, "The origin TCB has become unknown during programming. Try again.")
+ return
+ end
+
+ local terminal = get_last_route_item(rp.origin, rp.route)
+ rp.route.terminal = terminal
+ rp.route.name = fields.name
+
+ table.insert(tcbs.routes, rp.route)
+
+ advtrains.interlocking.clear_visu_context("prog_"..pname)
+ player_rte_prog[pname] = nil
+ chat(pname, "Successfully programmed route.")
+
+ advtrains.interlocking.show_route_edit_form(pname, rp.origin, #tcbs.routes)
+ return
+ end
+ end
+end)
+
+
+-- Central route programming punch callback
+minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ local rp = player_rte_prog[pname]
+ if rp then
+ -- determine what the punched node is
+ if minetest.get_item_group(node.name, "at_il_track_circuit_break") >= 1 then
+ -- get position of the assigned tcb
+ local meta = minetest.get_meta(pos)
+ local tcbpts = meta:get_string("tcb_pos")
+ if tcbpts == "" then
+ chat(pname, "This TCB is unconfigured, you first need to assign it to a rail")
+ return
+ end
+ local tcbpos = minetest.string_to_pos(tcbpts)
+
+ -- show formspec
+
+ show_routing_form(pname, tcbpos)
+
+ advtrains.interlocking.visualize_route(rp.origin, rp.route, "prog_"..pname, rp.tmp_lcks, pname)
+
+ return
+ end
+ if advtrains.is_passive(pos) then
+ local pts = advtrains.roundfloorpts(pos)
+ if rp.tmp_lcks[pts] then
+ clear_lock(rp.tmp_lcks, pname, pts)
+ else
+ local state = advtrains.getstate(pos)
+ rp.tmp_lcks[pts] = state
+ chat(pname, pts.." is held in "..state.." position when this route is set and freed ")
+ end
+ advtrains.interlocking.visualize_route(rp.origin, rp.route, "prog_"..pname, rp.tmp_lcks, pname)
+ return
+ end
+
+ end
+end)
+
+
+--TODO on route setting
+-- routes should end at signals. complete route setting by punching a signal, and command as exceptional route completion
+-- Create simpler way to advance a route to the next tcb/signal on simple sections without turnouts
diff --git a/advtrains/advtrains_interlocking/route_ui.lua b/advtrains/advtrains_interlocking/route_ui.lua
new file mode 100644
index 0000000..71fed09
--- /dev/null
+++ b/advtrains/advtrains_interlocking/route_ui.lua
@@ -0,0 +1,152 @@
+-- route_ui.lua
+-- User interface for showing and editing routes
+
+local atil = advtrains.interlocking
+local ildb = atil.db
+
+-- TODO duplicate
+local lntrans = { "A", "B" }
+local function sigd_to_string(sigd)
+ return minetest.pos_to_string(sigd.p).." / "..lntrans[sigd.s]
+end
+
+
+
+function atil.show_route_edit_form(pname, sigd, routeid)
+
+ if not minetest.check_player_privs(pname, {train_operator=true, interlocking=true}) then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+
+ local tcbs = atil.db.get_tcbs(sigd)
+ if not tcbs then return end
+ local route = tcbs.routes[routeid]
+ if not route then return end
+
+ local form = "size[9,10]label[0.5,0.2;Route overview]"
+ form = form.."field[0.8,1.2;5.2,1;name;Route name;"..minetest.formspec_escape(route.name).."]"
+ form = form.."button[5.5,0.9;1,1;setname;Set]"
+
+ -- construct textlist for route information
+ local tab = {}
+ local function itab(t)
+ tab[#tab+1] = minetest.formspec_escape(string.gsub(t, ",", " "))
+ end
+ itab("TCB "..sigd_to_string(sigd).." ("..tcbs.signal_name..") Route #"..routeid)
+
+ -- this code is partially copy-pasted from routesetting.lua
+ -- we start at the tc designated by signal
+ local c_sigd = sigd
+ local i = 1
+ local c_tcbs, c_ts_id, c_ts, c_rseg, c_lckp
+ while c_sigd and i<=#route do
+ c_tcbs = ildb.get_tcbs(c_sigd)
+ if not c_tcbs then
+ itab("-!- No TCBS at "..sigd_to_string(c_sigd)..". Please reconfigure route!")
+ break
+ end
+ c_ts_id = c_tcbs.ts_id
+ if not c_ts_id then
+ itab("-!- No track section adjacent to "..sigd_to_string(c_sigd)..". Please reconfigure route!")
+ break
+ end
+ c_ts = ildb.get_ts(c_ts_id)
+
+ c_rseg = route[i]
+ c_lckp = {}
+
+ itab(""..i.." Entry "..sigd_to_string(c_sigd).." -> Sec. "..(c_ts and c_ts.name or "-").." -> Exit "..(c_rseg.next and sigd_to_string(c_rseg.next) or "END"))
+
+ if c_rseg.locks then
+ for pts, state in pairs(c_rseg.locks) do
+
+ local pos = minetest.string_to_pos(pts)
+ itab(" Lock: "..pts.." -> "..state)
+ if not advtrains.is_passive(pos) then
+ itab("-!- No passive component at "..pts..". Please reconfigure route!")
+ break
+ end
+ end
+ end
+ -- advance
+ c_sigd = c_rseg.next
+ i = i + 1
+ end
+ if c_sigd then
+ local e_tcbs = ildb.get_tcbs(c_sigd)
+ itab("Route end: "..sigd_to_string(c_sigd).." ("..(e_tcbs and e_tcbs.signal_name or "-")..")")
+ else
+ itab("Route ends on dead-end")
+ end
+
+ form = form.."textlist[0.5,2;7,4;rtelog;"..table.concat(tab, ",").."]"
+
+ form = form.."button[0.5,6;2,1;back;<<< Back to signal]"
+ form = form.."button[3.5,6;2,1;aspect;Signal Aspect]"
+ form = form.."button[5.5,6;2,1;delete;Delete Route]"
+
+ --atdebug(route.ars)
+ form = form.."textarea[1,7.3;5.2,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]"
+ form = form.."button[6,7.7;1,1;savears;Save]"
+
+ minetest.show_formspec(pname, "at_il_routeedit_"..minetest.pos_to_string(sigd.p).."_"..sigd.s.."_"..routeid, form)
+
+end
+
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, {train_operator=true, interlocking=true}) then
+ return
+ end
+
+ local pts, connids, routeids = string.match(formname, "^at_il_routeedit_([^_]+)_(%d)_(%d+)$")
+ local pos, connid, routeid
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ connid = tonumber(connids)
+ routeid = tonumber(routeids)
+ if not connid or connid<1 or connid>2 then return end
+ if not routeid then return end
+ end
+ if pos and connid and routeid and not fields.quit then
+ local sigd = {p=pos, s=connid}
+ local tcbs = ildb.get_tcbs(sigd)
+ if not tcbs then return end
+ local route = tcbs.routes[routeid]
+ if not route then return end
+
+ if fields.setname and fields.name then
+ route.name = fields.name
+ end
+
+ if fields.aspect then
+ local suppasp = advtrains.interlocking.signal_get_supported_aspects(tcbs.signal)
+
+ local callback = function(pname, asp)
+ route.aspect = asp
+ advtrains.interlocking.show_route_edit_form(pname, sigd, routeid)
+ end
+
+ advtrains.interlocking.show_signal_aspect_selector(pname, suppasp, route.name, callback, route.aspect)
+ return
+ end
+ if fields.delete then
+ -- if something set the route in the meantime, make sure this doesn't break.
+ atil.route.update_route(sigd, tcbs, nil, true)
+ table.remove(tcbs.routes, routeid)
+ advtrains.interlocking.show_signalling_form(sigd, pname)
+ end
+
+ if fields.ars and fields.savears then
+ route.ars = atil.text_to_ars(fields.ars)
+ --atdebug(route.ars)
+ end
+
+ if fields.back then
+ advtrains.interlocking.show_signalling_form(sigd, pname)
+ end
+
+ end
+end)
diff --git a/advtrains/advtrains_interlocking/routesetting.lua b/advtrains/advtrains_interlocking/routesetting.lua
new file mode 100644
index 0000000..575b053
--- /dev/null
+++ b/advtrains/advtrains_interlocking/routesetting.lua
@@ -0,0 +1,357 @@
+-- Setting and clearing routes
+
+-- TODO duplicate
+local lntrans = { "A", "B" }
+local function sigd_to_string(sigd)
+ return minetest.pos_to_string(sigd.p).." / "..lntrans[sigd.s]
+end
+
+local asp_generic_free = {
+ main = {
+ free = true,
+ speed = -1,
+ },
+ shunt = {
+ free = false,
+ },
+ dst = {
+ free = true,
+ speed = -1,
+ },
+ info = {}
+}
+
+local ildb = advtrains.interlocking.db
+local ilrs = {}
+
+local sigd_equal = advtrains.interlocking.sigd_equal
+
+-- table containing locked points
+-- also manual locks (maintenance a.s.o.) are recorded here
+-- [pts] = {
+-- [n] = { [by = <ts_id>], rsn = <human-readable text>, [origin = <sigd>] }
+-- }
+ilrs.rte_locks = {}
+ilrs.rte_callbacks = {
+ ts = {},
+ lck = {}
+}
+
+
+-- main route setting. First checks if everything can be set as designated,
+-- then (if "try" is not set) actually sets it
+-- returns:
+-- true - route can be/was successfully set
+-- false, message, cbts, cblk - something went wrong, what is contained in the message.
+-- cbts: the ts id of the conflicting ts, cblk: the pts of the conflicting component
+function ilrs.set_route(signal, route, try)
+ if not try then
+ local tsuc, trsn, cbts, cblk = ilrs.set_route(signal, route, true)
+ if not tsuc then
+ return false, trsn, cbts, cblk
+ end
+ end
+
+
+ -- we start at the tc designated by signal
+ local c_sigd = signal
+ local first = true
+ local i = 1
+ local rtename = route.name
+ local signalname = ildb.get_tcbs(signal).signal_name
+ local c_tcbs, c_ts_id, c_ts, c_rseg, c_lckp
+ while c_sigd and i<=#route do
+ c_tcbs = ildb.get_tcbs(c_sigd)
+ if not c_tcbs then
+ if not try then atwarn("Did not find TCBS",c_sigd,"while setting route",rtename,"of",signal) end
+ return false, "No TCB found at "..sigd_to_string(c_sigd)..". Please reconfigure route!"
+ end
+ c_ts_id = c_tcbs.ts_id
+ if not c_ts_id then
+ if not try then atwarn("Encountered End-Of-Interlocking while setting route",rtename,"of",signal) end
+ return false, "No track section adjacent to "..sigd_to_string(c_sigd)..". Please reconfigure route!"
+ end
+ c_ts = ildb.get_ts(c_ts_id)
+ c_rseg = route[i]
+ c_lckp = {}
+
+ if c_ts.route then
+ if not try then atwarn("Encountered ts lock during a real run of routesetting routine, at ts=",c_ts_id,"while setting route",rtename,"of",signal) end
+ return false, "Section '"..c_ts.name.."' already has route set from "..sigd_to_string(c_ts.route.origin)..":\n"..c_ts.route.rsn, c_ts_id, nil
+ end
+ if c_ts.trains and #c_ts.trains>0 then
+ if not try then atwarn("Encountered ts occupied during a real run of routesetting routine, at ts=",c_ts_id,"while setting route",rtename,"of",signal) end
+ return false, "Section '"..c_ts.name.."' is occupied!", c_ts_id, nil
+ end
+
+ for pts, state in pairs(c_rseg.locks) do
+ local confl = ilrs.has_route_lock(pts, state)
+
+ local pos = minetest.string_to_pos(pts)
+ if advtrains.is_passive(pos) then
+ local cstate = advtrains.getstate(pos)
+ if cstate ~= state then
+ local confl = ilrs.has_route_lock(pts)
+ if confl then
+ if not try then atwarn("Encountered route lock while a real run of routesetting routine, at position",pts,"while setting route",rtename,"of",signal) end
+ return false, "Lock conflict at "..pts..", Held locked by:\n"..confl, nil, pts
+ elseif not try then
+ advtrains.setstate(pos, state)
+ end
+ end
+ if not try then
+ ilrs.add_route_lock(pts, c_ts_id, "Route '"..rtename.."' from signal '"..signalname.."'", signal)
+ c_lckp[#c_lckp+1] = pts
+ end
+ else
+ if not try then atwarn("Encountered route lock misconfiguration (no passive component) while a real run of routesetting routine, at position",pts,"while setting route",rtename,"of",signal) end
+ return false, "No passive component at "..pts..". Please reconfigure route!"
+ end
+ end
+ -- reserve ts and write locks
+ if not try then
+ local nvar = c_rseg.next
+ if not route[i+1] then
+ -- We shouldn't use the "next" value of the final route segment, because this can lead to accidental route-cancelling of already set routes from another signal.
+ nvar = nil
+ end
+ c_ts.route = {
+ origin = signal,
+ entry = c_sigd,
+ rsn = "Route '"..rtename.."' from signal '"..signalname.."', segment #"..i,
+ first = first,
+ }
+ c_ts.route_post = {
+ locks = c_lckp,
+ next = nvar,
+ }
+ if c_tcbs.signal then
+ c_tcbs.route_committed = true
+ c_tcbs.aspect = route.aspect or asp_generic_free
+ c_tcbs.route_origin = signal
+ advtrains.interlocking.update_signal_aspect(c_tcbs)
+ end
+ end
+ -- advance
+ first = nil
+ c_sigd = c_rseg.next
+ i = i + 1
+ end
+
+ return true
+end
+
+-- Checks whether there is a route lock that prohibits setting the component
+-- to the wanted state. returns string with reasons on conflict
+function ilrs.has_route_lock(pts)
+ -- look this up
+ local e = ilrs.rte_locks[pts]
+ if not e then return nil
+ elseif #e==0 then
+ ilrs.rte_locks[pts] = nil
+ return nil
+ end
+ local txts = {}
+ for _, ent in ipairs(e) do
+ txts[#txts+1] = ent.rsn
+ end
+ return table.concat(txts, "\n")
+end
+
+-- adds route lock for position
+function ilrs.add_route_lock(pts, ts, rsn, origin)
+ ilrs.free_route_locks_indiv(pts, ts, true)
+ local elm = {by=ts, rsn=rsn, origin=origin}
+ if not ilrs.rte_locks[pts] then
+ ilrs.rte_locks[pts] = { elm }
+ else
+ table.insert(ilrs.rte_locks[pts], elm)
+ end
+end
+
+-- adds route lock for position
+function ilrs.add_manual_route_lock(pts, rsn)
+ local elm = {rsn=rsn}
+ if not ilrs.rte_locks[pts] then
+ ilrs.rte_locks[pts] = { elm }
+ else
+ table.insert(ilrs.rte_locks[pts], elm)
+ end
+end
+
+-- frees route locking for all points (components) that were set by this ts
+function ilrs.free_route_locks(ts, lcks, nocallbacks)
+ for _,pts in pairs(lcks) do
+ ilrs.free_route_locks_indiv(pts, ts, nocallbacks)
+ end
+end
+
+function ilrs.free_route_locks_indiv(pts, ts, nocallbacks)
+ local e = ilrs.rte_locks[pts]
+ if not e then return nil
+ elseif #e==0 then
+ ilrs.rte_locks[pts] = nil
+ return nil
+ end
+ local i = 1
+ while i <= #e do
+ if e[i].by == ts then
+ --atdebug("free_route_locks_indiv",pts,"clearing entry",e[i].by,e[i].rsn)
+ table.remove(e,i)
+ else
+ i = i + 1
+ end
+ end
+ -- This must be delayed, because this code is executed in-between a train step
+ -- TODO use luaautomation timers?
+ if not nocallbacks then
+ minetest.after(0, ilrs.update_waiting, "lck", pts)
+ minetest.after(0.5, advtrains.set_fallback_state, minetest.string_to_pos(pts))
+ end
+end
+-- frees all route locks, even manual ones set with the tool, at a specific position
+function ilrs.remove_route_locks(pts, nocallbacks)
+ ilrs.rte_locks[pts] = nil
+ -- This must be delayed, because this code is executed in-between a train step
+ -- TODO use luaautomation timers?
+ if not nocallbacks then
+ minetest.after(0, ilrs.update_waiting, "lck", pts)
+ end
+end
+
+
+-- starting from the designated sigd, clears all subsequent route and route_post
+-- information from the track sections.
+-- note that this does not clear the routesetting status from the entry signal,
+-- only from the ts's
+function ilrs.cancel_route_from(sigd)
+ -- we start at the tc designated by signal
+ local c_sigd = sigd
+ local c_tcbs, c_ts_id, c_ts, c_rseg, c_lckp
+ while c_sigd do
+ --atdebug("cancel_route_from: at sigd",c_sigd)
+ c_tcbs = ildb.get_tcbs(c_sigd)
+ if not c_tcbs then
+ atwarn("Failed to cancel route, no TCBS at",c_sigd)
+ return false
+ end
+
+ --atdebug("cancelling",c_ts.route.rsn)
+ -- clear signal aspect and routesetting state
+ c_tcbs.route_committed = nil
+ c_tcbs.aspect = nil
+ c_tcbs.routeset = nil
+ c_tcbs.route_auto = nil
+ c_tcbs.route_origin = nil
+
+ advtrains.interlocking.update_signal_aspect(c_tcbs)
+
+ c_ts_id = c_tcbs.ts_id
+ if not c_tcbs then
+ atwarn("Failed to cancel route, end of interlocking at",c_sigd)
+ return false
+ end
+ c_ts = ildb.get_ts(c_ts_id)
+
+ if not c_ts
+ or not c_ts.route
+ or not sigd_equal(c_ts.route.entry, c_sigd) then
+ --atdebug("cancel_route_from: abort (eoi/no route):")
+ return false
+ end
+
+ c_ts.route = nil
+
+ if c_ts.route_post then
+ advtrains.interlocking.route.free_route_locks(c_ts_id, c_ts.route_post.locks)
+ c_sigd = c_ts.route_post.next
+ else
+ c_sigd = nil
+ end
+ c_ts.route_post = nil
+ minetest.after(0, advtrains.interlocking.route.update_waiting, "ts", c_ts_id)
+ end
+ --atdebug("cancel_route_from: done (no final sigd)")
+ return true
+end
+
+-- TCBS Routesetting helper: generic update function for
+-- route setting
+-- Call this function to set and cancel routes!
+-- sigd, tcbs: self-explanatory
+-- newrte: If a new route should be set, the route index of it (in tcbs.routes). nil otherwise
+-- cancel: true in combination with newrte=nil causes cancellation of the current route.
+function ilrs.update_route(sigd, tcbs, newrte, cancel)
+ --atdebug("Update_Route for",sigd,tcbs.signal_name)
+ local has_changed_aspect = false
+ if tcbs.route_origin and not sigd_equal(tcbs.route_origin, sigd) then
+ --atdebug("Signal not in control, held by",tcbs.signal_name)
+ return
+ end
+ if (newrte and tcbs.routeset and tcbs.routeset ~= newrte) or cancel then
+ if tcbs.route_committed then
+ --atdebug("Cancelling:",tcbs.routeset)
+ advtrains.interlocking.route.cancel_route_from(sigd)
+ end
+ tcbs.route_committed = nil
+ tcbs.aspect = nil
+ has_changed_aspect = true
+ tcbs.routeset = nil
+ tcbs.route_auto = nil
+ tcbs.route_rsn = nil
+ end
+ if newrte or tcbs.routeset then
+ if tcbs.route_committed then
+ return
+ end
+ if newrte then tcbs.routeset = newrte end
+ --atdebug("Setting:",tcbs.routeset)
+ local succ, rsn, cbts, cblk = ilrs.set_route(sigd, tcbs.routes[tcbs.routeset])
+ if not succ then
+ tcbs.route_rsn = rsn
+ --atdebug("Routesetting failed:",rsn)
+ -- add cbts or cblk to callback table
+ if cbts then
+ --atdebug("cbts =",cbts)
+ if not ilrs.rte_callbacks.ts[cbts] then ilrs.rte_callbacks.ts[cbts]={} end
+ advtrains.insert_once(ilrs.rte_callbacks.ts[cbts], sigd, sigd_equal)
+ end
+ if cblk then
+ --atdebug("cblk =",cblk)
+ if not ilrs.rte_callbacks.lck[cblk] then ilrs.rte_callbacks.lck[cblk]={} end
+ advtrains.insert_once(ilrs.rte_callbacks.lck[cblk], sigd, sigd_equal)
+ end
+ else
+ --atdebug("Committed Route:",tcbs.routeset)
+ has_changed_aspect = true
+ end
+ end
+ if has_changed_aspect then
+ -- FIX: prevent an minetest.after() loop caused by update_signal_aspect dispatching path invalidation, which in turn calls ARS again
+ advtrains.interlocking.update_signal_aspect(tcbs)
+ end
+ advtrains.interlocking.update_player_forms(sigd)
+end
+
+-- Try to re-set routes that conflicted with this point
+-- sys can be one of "ts" and "lck"
+-- key is then ts_id or pts respectively
+function ilrs.update_waiting(sys, key)
+ --atdebug("update_waiting:",sys,".",key)
+ local t = ilrs.rte_callbacks[sys][key]
+ ilrs.rte_callbacks[sys][key] = nil
+ if t then
+ for _,sigd in ipairs(t) do
+ --atdebug("Updating", sigd)
+ -- While these are run, the table we cleared before may be populated again, which is in our interest.
+ -- (that's the reason we needed to copy it)
+ local tcbs = ildb.get_tcbs(sigd)
+ if tcbs then
+ ilrs.update_route(sigd, tcbs)
+ end
+ end
+ end
+end
+
+advtrains.interlocking.route = ilrs
+
diff --git a/advtrains/advtrains_interlocking/settingtypes.txt b/advtrains/advtrains_interlocking/settingtypes.txt
new file mode 100644
index 0000000..f1c22b0
--- /dev/null
+++ b/advtrains/advtrains_interlocking/settingtypes.txt
@@ -0,0 +1,4 @@
+# Stop trains forcibly in front of signal when about to run over an LZB 0 restriction, instead of setting emergency halt for manual resolving
+# This prevents the need to manually restart trains that overran red signals, but is unrealistic.
+# This is a workaround to circumvent system breakages due to bugs in LZB braking curves
+at_il_force_lzb_halt (Force LZB Halt) bool true
diff --git a/advtrains/advtrains_interlocking/signal_api.lua b/advtrains/advtrains_interlocking/signal_api.lua
new file mode 100644
index 0000000..9729195
--- /dev/null
+++ b/advtrains/advtrains_interlocking/signal_api.lua
@@ -0,0 +1,546 @@
+-- Signal API implementation
+
+
+--[[
+Signal aspect table:
+asp = {
+ main = {
+ free = <boolean>,
+ speed = <int km/h>,
+ },
+ shunt = {
+ free = <boolean>,
+ -- Whether train may proceed as shunt move, on sight
+ -- main aspect takes precedence over this
+ proceed_as_main = <boolean>,
+ -- If an approaching train is a shunt move and "main.free" is set,
+ -- the train may proceed as a train move under the "main" aspect
+ -- If this is not set, shunt moves are NOT allowed to switch to
+ -- a train move, and must stop even if "main.free" is set.
+ -- This is intended to be used for "Halt for shunt moves" signs.
+ }
+ dst = {
+ free = <boolean>,
+ speed = <int km/h>,
+ }
+ info = {
+ call_on = <boolean>, -- Call-on route, expect train in track ahead (not implemented yet)
+ dead_end = <boolean>, -- Route ends on a dead end (e.g. bumper) (not implemented yet)
+ w_speed = <integer>,
+ -- "Warning speed restriction". Supposed for short-term speed
+ -- restrictions which always override any other restrictions
+ -- imposed by "speed" fields, until lifted by a value of -1
+ -- (Example: german Langsamfahrstellen-Signale)
+ }
+}
+-- For "speed" and "w_speed" fields, a value of -1 means that the
+-- restriction is lifted. If they are omitted, the value imposed at
+-- the last aspect received remains valid.
+-- The "dst" subtable can be completely omitted when no explicit dst
+-- aspect should be signalled to the train. In this case, the last
+-- signalled dst aspect remains valid.
+
+== How signals actually work in here ==
+Each signal (in the advtrains universe) is some node that has at least the
+following things:
+- An "influence point" that is set somewhere on a rail
+- An aspect which trains that pass the "influence point" have to obey
+
+There can be static and dynamic signals. Static signals are, roughly
+spoken, signs, while dynamic signals are "real" signals which can display
+different things.
+
+The node definition of a signal node should contain those fields:
+groups = {
+ advtrains_signal = 2,
+ save_in_at_nodedb = 1,
+}
+advtrains = {
+ set_aspect = function(pos, node, asp)
+ -- This function gets called whenever the signal should display
+ -- a new or changed signal aspect. It is not required that
+ -- the signal actually displays the exact same aspect, since
+ -- some signals can not do this by design.
+ -- Example: pure shunt signals can not display a "main" aspect
+ -- and have no effect on train moves, so they will only ever
+ -- honor the shunt.free field for their aspect.
+ -- In turn, it is not guaranteed that the aspect will fulfill the
+ -- criteria put down in supported_aspects.
+ -- If set_aspect is present, supported_aspects should also be declared.
+
+ -- The aspect passed in here can always be queried using the
+ -- advtrains.interlocking.signal_get_supposed_aspect(pos) function.
+ -- It is always DANGER when the signal is not used as route signal.
+
+ -- For static signals, this function should be completely omitted
+ -- If this function is omitted, it won't be possible to use
+ -- route setting on this signal.
+ end,
+ supported_aspects = {
+ -- A table which tells which different types of aspects this signal
+ -- is able to display. It is used to construct the "aspect editing"
+ -- formspec for route programming (and others) It should always be
+ -- present alongside with set_aspect. If this is not specified but
+ -- set_aspect is, the user will be allowed to select any aspect.
+ -- Any of the fields marked with <boolean/nil> support 3 types of values:
+ nil: if this signal can switch between free/blocked
+ false: always shows "blocked", unchangable
+ true: always shows "free", unchangable
+ -- Any of the "speed" fields should contain a list of possible values
+ -- to be set as restriction. If omitted, this signal should never
+ -- set the corresponding "speed" field in the aspect, which means
+ -- that the previous speed limit stays valid
+ -- If your signal can only display a single speed (may it be -1),
+ -- always enclose that single value into a list. (such as {-1})
+ main = {
+ free = <boolean/nil>,
+ speed = {<speed1>, ..., <speedn>} or nil,
+ },
+ dst = {
+ free = <boolean/nil>,
+ speed = {<speed1>, ..., <speedn>} or nil,
+ },
+ shunt = {
+ free = <boolean/nil>,
+ },
+ info = {
+ call_on = <boolean/nil>,
+ dead_end = <boolean/nil>,
+ w_speed = {<speed1>, ..., <speedn>} or nil,
+ }
+
+ },
+ get_aspect = function(pos, node)
+ -- This function gets called by the train safety system. It
+ should return the aspect that this signal actually displays,
+ not preferably the input of set_aspect.
+ -- For regular, full-featured light signals, they will probably
+ honor all entries in the original aspect, however, e.g.
+ simple shunt signals always return main.free=true regardless of
+ the set_aspect input because they can not signal "Halt" to
+ train moves.
+ -- advtrains.interlocking.DANGER contains a default "all-danger" aspect.
+ -- If your signal does not cover certain sub-tables of the aspect,
+ the following reasonable defaults are automatically assumed:
+ main = {
+ free = true,
+ }
+ dst = {
+ free = true,
+ }
+ shunt = {
+ free = false,
+ proceed_as_main = false,
+ }
+ end,
+}
+on_rightclick = advtrains.interlocking.signal_rc_handler
+can_dig = advtrains.interlocking.signal_can_dig
+after_dig_node = advtrains.interlocking.signal_after_dig
+
+(If you need to specify custom can_dig or after_dig_node callbacks,
+please call those functions anyway!)
+
+Important note: If your signal should support external ways to set its
+aspect (e.g. via mesecons), there are some things that need to be considered:
+- advtrains.interlocking.signal_get_supposed_aspect(pos) won't respect this
+- Whenever you change the signal aspect, and that aspect change
+did not happen through a call to
+advtrains.interlocking.signal_set_aspect(pos, asp), you are
+*required* to call this function:
+advtrains.interlocking.signal_on_aspect_changed(pos)
+in order to notify trains about the aspect change.
+This function will query get_aspect to retrieve the new aspect.
+
+]]--
+
+local DANGER = {
+ main = {
+ free = false,
+ speed = 0,
+ },
+ shunt = {
+ free = false,
+ },
+ dst = {
+ free = false,
+ speed = 0,
+ },
+ info = {}
+}
+advtrains.interlocking.DANGER = DANGER
+
+local function fillout_aspect(asp)
+ if not asp.main then
+ asp.main = {
+ free = true,
+ }
+ elseif type(asp.main) ~= "table" then
+ asp.main = {
+ free = asp.main~=0,
+ speed = asp.main,
+ }
+ end
+ if not asp.dst then
+ asp.dst = {
+ free = true,
+ }
+ end
+ if not asp.shunt then
+ asp.shunt = {
+ free = false,
+ proceed_as_main = false,
+ }
+ elseif type(asp.shunt) ~= "table" then
+ asp.shunt = {
+ free = asp.shunt,
+ proceed_as_main = asp.proceed_as_main,
+ }
+ end
+ if not asp.info then
+ asp.info = {}
+ end
+end
+
+function advtrains.interlocking.update_signal_aspect(tcbs)
+ if tcbs.signal then
+ local asp = tcbs.aspect or DANGER
+ advtrains.interlocking.signal_set_aspect(tcbs.signal, asp)
+ end
+end
+
+function advtrains.interlocking.signal_can_dig(pos)
+ return not advtrains.interlocking.db.get_sigd_for_signal(pos)
+end
+
+function advtrains.interlocking.signal_after_dig(pos)
+ -- clear influence point
+ advtrains.interlocking.db.clear_ip_by_signalpos(pos)
+end
+
+function advtrains.interlocking.signal_set_aspect(pos, asp)
+ fillout_aspect(asp)
+ local node=advtrains.ndb.get_node(pos)
+ local ndef=minetest.registered_nodes[node.name]
+ if ndef and ndef.advtrains and ndef.advtrains.set_aspect then
+ ndef.advtrains.set_aspect(pos, node, asp)
+ advtrains.interlocking.signal_on_aspect_changed(pos)
+ end
+end
+
+-- should be called when aspect has changed on this signal.
+function advtrains.interlocking.signal_on_aspect_changed(pos)
+ local ipts, iconn = advtrains.interlocking.db.get_ip_by_signalpos(pos)
+ if not ipts then return end
+ local ipos = minetest.string_to_pos(ipts)
+
+ local tns = advtrains.occ.get_trains_over(ipos)
+ for id, sidx in pairs(tns) do
+-- local train = advtrains.trains[id]
+ --if train.index <= sidx then
+ minetest.after(0, advtrains.invalidate_path, id)
+ --end
+ end
+end
+
+function advtrains.interlocking.signal_rc_handler(pos, node, player, itemstack, pointed_thing)
+ local pname = player:get_player_name()
+ local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos)
+ if sigd then
+ advtrains.interlocking.show_signalling_form(sigd, pname)
+ else
+ local ndef = minetest.registered_nodes[node.name]
+ if ndef.advtrains and ndef.advtrains.set_aspect then
+ -- permit to set aspect manually
+ minetest.show_formspec(pname, "at_il_sigasp_"..minetest.pos_to_string(pos), "field[aspect;Set Aspect ('A' to assign IP);D0D0D]")
+ else
+ --static signal - only IP
+ advtrains.interlocking.show_ip_form(pos, pname)
+ end
+ end
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ local pts = string.match(formname, "^at_il_sigasp_(.+)$")
+ local pos
+ if pts then pos = minetest.string_to_pos(pts) end
+ if pos and fields.aspect then
+ if fields.aspect == "A" then
+ advtrains.interlocking.show_ip_form(pos, pname)
+ return
+ end
+ local mfs, msps, dfs, dsps, shs = string.match(fields.aspect, "^([FD])([-0-9]+)([FD])([-0-9]+)([FD])$")
+ local asp = {
+ main = {
+ free = mfs=="F",
+ speed = tonumber(msps),
+ },
+ shunt = {
+ free = shs=="F",
+ },
+ dst = {
+ free = dfs=="F",
+ speed = tonumber(dsps),
+ },
+ info = {
+ call_on = false, -- Call-on route, expect train in track ahead
+ dead_end = false, -- Route ends on a dead end (e.g. bumper)
+ }
+ }
+ advtrains.interlocking.signal_set_aspect(pos, asp)
+ end
+end)
+
+-- Returns the aspect the signal at pos is supposed to show
+function advtrains.interlocking.signal_get_supposed_aspect(pos)
+ local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos)
+ if sigd then
+ local tcbs = advtrains.interlocking.db.get_tcbs(sigd)
+ if tcbs.aspect then
+ return tcbs.aspect
+ end
+ end
+ return DANGER;
+end
+
+-- Returns the actual aspect of the signal at position, as returned by the nodedef.
+-- returns nil when there's no signal at the position
+function advtrains.interlocking.signal_get_aspect(pos)
+ local node=advtrains.ndb.get_node(pos)
+ local ndef=minetest.registered_nodes[node.name]
+ if ndef and ndef.advtrains and ndef.advtrains.get_aspect then
+ local asp = ndef.advtrains.get_aspect(pos, node)
+ if not asp then asp = DANGER end
+ fillout_aspect(asp)
+ return asp
+ end
+ return nil
+end
+
+-- Returns the "supported_aspects" of the signal at position, as returned by the nodedef.
+-- returns nil when there's no signal at the position
+function advtrains.interlocking.signal_get_supported_aspects(pos)
+ local node=advtrains.ndb.get_node(pos)
+ local ndef=minetest.registered_nodes[node.name]
+ if ndef and ndef.advtrains and ndef.advtrains.supported_aspects then
+ local asp = ndef.advtrains.supported_aspects
+ return asp
+ end
+ return nil
+end
+
+local players_assign_ip = {}
+
+local function ipmarker(ipos, connid)
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(ipos, advtrains.all_tracktypes)
+ if not node_ok then return end
+ local yaw = advtrains.dir_to_angle(conns[connid].c)
+
+ -- using tcbmarker here
+ local obj = minetest.add_entity(vector.add(ipos, {x=0, y=0.2, z=0}), "advtrains_interlocking:tcbmarker")
+ if not obj then return end
+ obj:set_yaw(yaw)
+ obj:set_properties({
+ textures = { "at_il_signal_ip.png" },
+ })
+end
+
+-- shows small info form for signal IP state/assignment
+-- only_notset: show only if it is not set yet (used by signal tcb assignment)
+function advtrains.interlocking.show_ip_form(pos, pname, only_notset)
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ local form = "size[7,5]label[0.5,0.5;Signal at "..minetest.pos_to_string(pos).."]"
+ local pts, connid = advtrains.interlocking.db.get_ip_by_signalpos(pos)
+ if pts then
+ form = form.."label[0.5,1.5;Influence point is set at "..pts.."/"..connid.."]"
+ form = form.."button_exit[0.5,2.5; 5,1;set;Move]"
+ form = form.."button_exit[0.5,3.5; 5,1;clear;Clear]"
+ local ipos = minetest.string_to_pos(pts)
+ ipmarker(ipos, connid)
+ else
+ form = form.."label[0.5,1.5;Influence point is not set.]"
+ form = form.."label[0.5,2.0;It is recommended to set an influence point.]"
+ form = form.."label[0.5,2.5;This is the point where trains will obey the signal.]"
+
+ form = form.."button_exit[0.5,3.5; 5,1;set;Set]"
+ end
+ if not only_notset or not pts then
+ minetest.show_formspec(pname, "at_il_ipassign_"..minetest.pos_to_string(pos), form)
+ end
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, {train_operator=true, interlocking=true}) then
+ return
+ end
+ local pts = string.match(formname, "^at_il_ipassign_([^_]+)$")
+ local pos
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ end
+ if pos then
+ if fields.set then
+ advtrains.interlocking.signal_init_ip_assign(pos, pname)
+ elseif fields.clear then
+ advtrains.interlocking.db.clear_ip_by_signalpos(pos)
+ end
+ end
+end)
+
+-- inits the signal IP assignment process
+function advtrains.interlocking.signal_init_ip_assign(pos, pname)
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ --remove old IP
+ --advtrains.interlocking.db.clear_ip_by_signalpos(pos)
+ minetest.chat_send_player(pname, "Configuring Signal: Please look in train's driving direction and punch rail to set influence point.")
+
+ players_assign_ip[pname] = pos
+end
+
+minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ -- IP assignment
+ local signalpos = players_assign_ip[pname]
+ if signalpos then
+ if vector.distance(pos, signalpos)<=50 then
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ if node_ok and #conns == 2 then
+
+ local yaw = player:get_look_horizontal()
+ local plconnid = advtrains.yawToClosestConn(yaw, conns)
+
+ -- add assignment if not already present.
+ local pts = advtrains.roundfloorpts(pos)
+ if not advtrains.interlocking.db.get_ip_signal_asp(pts, plconnid) then
+ advtrains.interlocking.db.set_ip_signal(pts, plconnid, signalpos)
+ ipmarker(pos, plconnid)
+ minetest.chat_send_player(pname, "Configuring Signal: Successfully set influence point")
+ else
+ minetest.chat_send_player(pname, "Configuring Signal: Influence point of another signal is already present!")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring Signal: This is not a normal two-connection rail! Aborted.")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring Signal: Node is too far away. Aborted.")
+ end
+ players_assign_ip[pname] = nil
+ end
+end)
+
+
+--== aspect selector ==--
+
+local players_aspsel = {}
+
+--[[
+suppasp: "supported_aspects" table
+purpose: form title string
+callback: func(pname, aspect) called on form submit
+]]
+function advtrains.interlocking.show_signal_aspect_selector(pname, p_suppasp, p_purpose, callback, p_isasp)
+ local suppasp = p_suppasp or {
+ main = {}, dst = {}, shunt = {}, info = {},
+ }
+ local purpose = p_purpose or ""
+ local isasp = p_isasp and fillout_aspect(p_isasp)
+
+ local form = "size[7,5]label[0.5,0.5;Select Signal Aspect:]"
+ form = form.."label[0.5,1;"..purpose.."]"
+
+ form = form.."label[0.5,1.5;== Main Signal ==]"
+ if suppasp.main.free == nil then
+ local st = 2
+ if isasp and not isasp.main.free then st=1 end
+ form = form.."dropdown[0.5,2;2;main_free;danger,free;"..st.."]"
+ end
+ if suppasp.main.speed then
+ local selid = 1
+ if isasp and isasp.main.speed then
+ for idx, spv in ipairs(suppasp.main.speed) do
+ if spv == isasp.main.speed then
+ selid = idx
+ break
+ end
+ end
+ end
+ form = form.."label[2.3,1;Speed:]"
+ form = form.."dropdown[3,2;2;main_speed;"..table.concat(suppasp.main.speed, ",")..";"..selid.."]"
+ end
+
+ form = form.."label[0.5,3;== Shunting ==]"
+ if suppasp.shunt.free == nil then
+ local st = 1
+ if isasp and isasp.shunt.free then st=2 end
+ form = form.."dropdown[0.5,3.5;2;shunt_free;---,allowed;"..st.."]"
+ end
+
+ form = form.."button_exit[0.5,4.5; 5,1;save;OK]"
+
+ local token = advtrains.random_id()
+
+ minetest.show_formspec(pname, "at_il_sigaspdia_"..token, form)
+
+ minetest.after(1, function()
+ players_aspsel[pname] = {
+ suppasp = suppasp,
+ callback = callback,
+ token = token,
+ }
+ end)
+end
+
+local function usebool(sup, val, free)
+ if sup == nil then
+ return val==free
+ else
+ return sup
+ end
+end
+local function usespeed(sup, val)
+ if sup then
+ return tonumber(val)
+ else
+ return nil
+ end
+end
+
+-- TODO use non-hacky way to parse outputs
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ local psl = players_aspsel[pname]
+ if psl then
+ if formname == "at_il_sigaspdia_"..psl.token then
+ if fields.save then
+ local asp = {
+ main = {
+ free = usebool(psl.suppasp.main.free, fields.main_free, "free"),
+ speed = usespeed(psl.suppasp.main.speed, fields.main_speed),
+ },
+ dst = {
+ free = true, speed = -1,
+ },
+ shunt = {
+ free = usebool(psl.suppasp.shunt.free, fields.shunt_free, "allowed"),
+ },
+ info = {}
+ }
+ psl.callback(pname, asp)
+ end
+ else
+ players_aspsel[pname] = nil
+ end
+ end
+
+end)
diff --git a/advtrains/advtrains_interlocking/tcb_ts_ui.lua b/advtrains/advtrains_interlocking/tcb_ts_ui.lua
new file mode 100644
index 0000000..da318a7
--- /dev/null
+++ b/advtrains/advtrains_interlocking/tcb_ts_ui.lua
@@ -0,0 +1,789 @@
+-- Track Circuit Breaks and Track Sections - Player interaction
+
+local players_assign_tcb = {}
+local players_assign_signal = {}
+local players_link_ts = {}
+
+local ildb = advtrains.interlocking.db
+local ilrs = advtrains.interlocking.route
+
+local sigd_equal = advtrains.interlocking.sigd_equal
+
+local lntrans = { "A", "B" }
+
+local function sigd_to_string(sigd)
+ return minetest.pos_to_string(sigd.p).." / "..lntrans[sigd.s]
+end
+
+minetest.register_node("advtrains_interlocking:tcb_node", {
+ drawtype = "mesh",
+ paramtype="light",
+ paramtype2="facedir",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/6, -1/2, -1/6, 1/6, 1/4, 1/6},
+ },
+ mesh = "at_il_tcb_node.obj",
+ tiles = {"at_il_tcb_node.png"},
+ description="Track Circuit Break",
+ sunlight_propagates=true,
+ groups = {
+ cracky=3,
+ not_blocking_trains=1,
+ --save_in_at_nodedb=2,
+ at_il_track_circuit_break = 1,
+ },
+ after_place_node = function(pos, node, player)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("infotext", "Unconfigured Track Circuit Break, right-click to assign.")
+ end,
+ on_rightclick = function(pos, node, player)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+
+ local meta = minetest.get_meta(pos)
+ local tcbpts = meta:get_string("tcb_pos")
+ if tcbpts ~= "" then
+ local tcbpos = minetest.string_to_pos(tcbpts)
+ local tcb = ildb.get_tcb(tcbpos)
+ if tcb then
+ advtrains.interlocking.show_tcb_form(tcbpos, pname)
+ else
+ minetest.chat_send_player(pname, "This TCB has been removed. Please dig marker.")
+ end
+ else
+ --unconfigured
+ minetest.chat_send_player(pname, "Configuring TCB: Please punch the rail you want to assign this TCB to.")
+
+ players_assign_tcb[pname] = pos
+ end
+ end,
+ --on_punch = function(pos, node, player)
+ -- local meta = minetest.get_meta(pos)
+ -- local tcbpts = meta:get_string("tcb_pos")
+ -- if tcbpts ~= "" then
+ -- local tcbpos = minetest.string_to_pos(tcbpts)
+ -- advtrains.interlocking.show_tcb_marker(tcbpos)
+ -- end
+ --end,
+ can_dig = function(pos, player)
+ if player == nil then return false end
+
+ local pname = player:get_player_name()
+
+ -- Those markers can only be dug when all adjacent TS's are set
+ -- as EOI.
+ local meta = minetest.get_meta(pos)
+ local tcbpts = meta:get_string("tcb_pos")
+ if tcbpts ~= "" then
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ local tcbpos = minetest.string_to_pos(tcbpts)
+ local tcb = ildb.get_tcb(tcbpos)
+ if not tcb then return true end
+ for connid=1,2 do
+ if tcb[connid].ts_id or tcb[connid].signal then
+ minetest.chat_send_player(pname, "Can't remove TCB: Both sides must have no track section and no signal assigned!")
+ return false
+ end
+ if not ildb.may_modify_tcbs(tcb[connid]) then
+ minetest.chat_send_player(pname, "Can't remove TCB: Side "..connid.." forbids modification (shouldn't happen).")
+ return false
+ end
+ end
+ end
+ return true
+ end,
+ after_dig_node = function(pos, oldnode, oldmetadata, player)
+ if not oldmetadata or not oldmetadata.fields then return end
+ local tcbpts = oldmetadata.fields.tcb_pos
+ if tcbpts and tcbpts ~= "" then
+ local tcbpos = minetest.string_to_pos(tcbpts)
+ local success = ildb.remove_tcb(tcbpos)
+ if success and player then
+ minetest.chat_send_player(player:get_player_name(), "TCB has been removed.")
+ else
+ minetest.chat_send_player(player:get_player_name(), "Failed to remove TCB!")
+ minetest.set_node(pos, oldnode)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("tcb_pos", minetest.pos_to_string(tcbpos))
+ end
+ end
+ end,
+})
+
+minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ -- TCB assignment
+ local tcbnpos = players_assign_tcb[pname]
+ if tcbnpos then
+ if vector.distance(pos, tcbnpos)<=20 then
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ if node_ok and #conns == 2 then
+ local ok = ildb.create_tcb(pos)
+
+ if not ok then
+ minetest.chat_send_player(pname, "Configuring TCB: TCB already exists at this position! It has now been re-assigned.")
+ end
+
+ ildb.sync_tcb_neighbors(pos, 1)
+ ildb.sync_tcb_neighbors(pos, 2)
+
+ local meta = minetest.get_meta(tcbnpos)
+ meta:set_string("tcb_pos", minetest.pos_to_string(pos))
+ meta:set_string("infotext", "TCB assigned to "..minetest.pos_to_string(pos))
+ minetest.chat_send_player(pname, "Configuring TCB: Successfully configured TCB")
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: This is not a normal two-connection rail! Aborted.")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: Node is too far away. Aborted.")
+ end
+ players_assign_tcb[pname] = nil
+ end
+
+ -- Signal assignment
+ local sigd = players_assign_signal[pname]
+ if sigd then
+ if vector.distance(pos, sigd.p)<=50 then
+ local is_signal = minetest.get_item_group(node.name, "advtrains_signal") >= 2
+ if is_signal then
+ local ndef = minetest.registered_nodes[node.name]
+ if ndef and ndef.advtrains and ndef.advtrains.set_aspect then
+ local tcbs = ildb.get_tcbs(sigd)
+ if tcbs then
+ tcbs.signal = pos
+ if not tcbs.signal_name then
+ tcbs.signal_name = "Signal at "..minetest.pos_to_string(sigd.p)
+ end
+ if not tcbs.routes then
+ tcbs.routes = {}
+ end
+ ildb.set_sigd_for_signal(pos, sigd)
+ minetest.chat_send_player(pname, "Configuring TCB: Successfully assigned signal.")
+ advtrains.interlocking.show_ip_form(pos, pname, true)
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: Internal error, TCBS doesn't exist. Aborted.")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: Cannot use static signals for routesetting. Aborted.")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: Not a compatible signal. Aborted.")
+ end
+ else
+ minetest.chat_send_player(pname, "Configuring TCB: Node is too far away. Aborted.")
+ end
+ players_assign_signal[pname] = nil
+ end
+end)
+
+-- TCB Form
+
+local function mktcbformspec(tcbs, btnpref, offset, pname)
+ local form = ""
+ local ts
+ if tcbs.ts_id then
+ ts = ildb.get_ts(tcbs.ts_id)
+ end
+ if ts then
+ form = form.."label[0.5,"..offset..";Side "..btnpref..": "..minetest.formspec_escape(ts.name).."]"
+ form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_gotots;Show track section]"
+ if ildb.may_modify_tcbs(tcbs) then
+ -- Note: the security check to prohibit those actions is located in database.lua in the corresponding functions.
+ form = form.."button[0.5,"..(offset+1.5)..";2.5,1;"..btnpref.."_update;Update near TCBs]"
+ form = form.."button[3 ,"..(offset+1.5)..";2.5,1;"..btnpref.."_remove;Remove from section]"
+ end
+ else
+ tcbs.ts_id = nil
+ form = form.."label[0.5,"..offset..";Side "..btnpref..": ".."End of interlocking]"
+ form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_makeil;Create Interlocked Track Section]"
+ --if tcbs.section_free then
+ --form = form.."button[0.5,"..(offset+1.5)..";5,1;"..btnpref.."_setlocked;Section is free]"
+ --else
+ --form = form.."button[0.5,"..(offset+1.5)..";5,1;"..btnpref.."_setfree;Section is blocked]"
+ --end
+ end
+ if tcbs.signal then
+ form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_sigdia;Signalling]"
+ else
+ form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_asnsig;Assign a signal]"
+ end
+ return form
+end
+
+
+function advtrains.interlocking.show_tcb_form(pos, pname)
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ local tcb = ildb.get_tcb(pos)
+ if not tcb then return end
+
+ local form = "size[6,9] label[0.5,0.5;Track Circuit Break Configuration]"
+ form = form .. mktcbformspec(tcb[1], "A", 1, pname)
+ form = form .. mktcbformspec(tcb[2], "B", 5, pname)
+
+ minetest.show_formspec(pname, "at_il_tcbconfig_"..minetest.pos_to_string(pos), form)
+ advtrains.interlocking.show_tcb_marker(pos)
+end
+
+--helper: length of nil table is 0
+local function nlen(t)
+ if not t then return 0 end
+ return #t
+end
+
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ local pts = string.match(formname, "^at_il_tcbconfig_(.+)$")
+ local pos
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ end
+ if pos and not fields.quit then
+ local tcb = ildb.get_tcb(pos)
+ if not tcb then return end
+ local f_gotots = {fields.A_gotots, fields.B_gotots}
+ local f_update = {fields.A_update, fields.B_update}
+ local f_remove = {fields.A_remove, fields.B_remove}
+ local f_makeil = {fields.A_makeil, fields.B_makeil}
+ local f_setlocked = {fields.A_setlocked, fields.B_setlocked}
+ local f_setfree = {fields.A_setfree, fields.B_setfree}
+ local f_asnsig = {fields.A_asnsig, fields.B_asnsig}
+ local f_sigdia = {fields.A_sigdia, fields.B_sigdia}
+
+ for connid=1,2 do
+ local tcbs = tcb[connid]
+ if tcbs.ts_id then
+ if f_gotots[connid] then
+ advtrains.interlocking.show_ts_form(tcbs.ts_id, pname)
+ return
+ end
+ if f_update[connid] then
+ ildb.sync_tcb_neighbors(pos, connid)
+ end
+ if f_remove[connid] then
+ ildb.remove_from_interlocking({p=pos, s=connid})
+ end
+ else
+ if f_makeil[connid] then
+ -- try sinc_tcb_neighbors first
+ ildb.sync_tcb_neighbors(pos, connid)
+ -- if that didn't work, create new section
+ if not tcbs.ts_id then
+ ildb.create_ts({p=pos, s=connid})
+ ildb.sync_tcb_neighbors(pos, connid)
+ end
+ end
+ -- non-interlocked
+ if f_setfree[connid] then
+ tcbs.section_free = true
+ end
+ if f_setlocked[connid] then
+ tcbs.section_free = nil
+ end
+ end
+ if f_asnsig[connid] and not tcbs.signal then
+ minetest.chat_send_player(pname, "Configuring TCB: Please punch the signal to assign.")
+ players_assign_signal[pname] = {p=pos, s=connid}
+ minetest.close_formspec(pname, formname)
+ return
+ end
+ if f_sigdia[connid] and tcbs.signal then
+ advtrains.interlocking.show_signalling_form({p=pos, s=connid}, pname)
+ return
+ end
+
+ end
+ advtrains.interlocking.show_tcb_form(pos, pname)
+ end
+
+end)
+
+
+
+-- TS Formspec
+
+-- textlist selection temporary storage
+local ts_pselidx = {}
+
+function advtrains.interlocking.show_ts_form(ts_id, pname, sel_tcb)
+ if not minetest.check_player_privs(pname, "interlocking") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ local ts = ildb.get_ts(ts_id)
+ if not ts_id then return end
+
+ local form = "size[10,10]label[0.5,0.5;Track Section Detail - "..ts_id.."]"
+ form = form.."field[0.8,2;5.2,1;name;Section name;"..minetest.formspec_escape(ts.name).."]"
+ form = form.."button[5.5,1.7;1,1;setname;Set]"
+ local hint
+
+ local strtab = {}
+ for idx, sigd in ipairs(ts.tc_breaks) do
+ strtab[#strtab+1] = minetest.formspec_escape(sigd_to_string(sigd))
+ advtrains.interlocking.show_tcb_marker(sigd.p)
+ end
+
+ form = form.."textlist[0.5,3;5,3;tcblist;"..table.concat(strtab, ",").."]"
+
+ if ildb.may_modify_ts(ts) then
+
+ if players_link_ts[pname] then
+ local other_id = players_link_ts[pname]
+ local other_ts = ildb.get_ts(other_id)
+ if other_ts then
+ if ildb.may_modify_ts(other_ts) then
+ form = form.."button[5.5,3;3.5,1;mklink;Join with "..minetest.formspec_escape(other_ts.name).."]"
+ form = form.."button[9 ,3;0.5,1;cancellink;X]"
+ end
+ end
+ else
+ form = form.."button[5.5,3;4,1;link;Join into other section]"
+ hint = 1
+ end
+ form = form.."button[5.5,4;4,1;dissolve;Dissolve Section]"
+ form = form.."tooltip[dissolve;This will remove the track section and set all its end points to End Of Interlocking]"
+ if sel_tcb then
+ form = form.."button[5.5,5;4,1;del_tcb;Unlink selected TCB]"
+ hint = 2
+ end
+ else
+ hint=3
+ end
+
+ if ts.route then
+ form = form.."label[0.5,6.1;Route is set: "..ts.route.rsn.."]"
+ elseif ts.route_post then
+ form = form.."label[0.5,6.1;Section holds "..#(ts.route_post.lcks or {}).." route locks.]"
+ end
+ -- occupying trains
+ if ts.trains and #ts.trains>0 then
+ form = form.."label[0.5,7.1;Trains on this section:]"
+ form = form.."textlist[0.5,7.7;3,2;trnlist;"..table.concat(ts.trains, ",").."]"
+ else
+ form = form.."label[0.5,7.1;No trains on this section.]"
+ end
+
+ form = form.."button[5.5,7;4,1;reset;Reset section state]"
+
+ if hint == 1 then
+ form = form.."label[0.5,0.75;Use the 'Join' button to designate rail crosses and link not listed far-away TCBs]"
+ elseif hint == 2 then
+ form = form.."label[0.5,0.75;Unlinking a TCB will set it to non-interlocked mode.]"
+ elseif hint == 3 then
+ form = form.."label[0.5,0.75;You cannot modify track sections when a route is set or a train is on the section.]"
+ --form = form.."label[0.5,1;Trying to unlink a TCB directly connected to this track will not work.]"
+ end
+
+ ts_pselidx[pname]=sel_tcb
+ minetest.show_formspec(pname, "at_il_tsconfig_"..ts_id, form)
+
+end
+
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ -- independent of the formspec, clear this whenever some formspec event happens
+ local tpsi = ts_pselidx[pname]
+ ts_pselidx[pname] = nil
+
+ local ts_id = string.match(formname, "^at_il_tsconfig_(.+)$")
+ if ts_id and not fields.quit then
+ local ts = ildb.get_ts(ts_id)
+ if not ts then return end
+
+ local sel_tcb
+ if fields.tcblist then
+ local tev = minetest.explode_textlist_event(fields.tcblist)
+ sel_tcb = tev.index
+ ts_pselidx[pname] = sel_tcb
+ elseif tpsi then
+ sel_tcb = tpsi
+ end
+
+ if ildb.may_modify_ts(ts) then
+ if players_link_ts[pname] then
+ if fields.cancellink then
+ players_link_ts[pname] = nil
+ elseif fields.mklink then
+ ildb.link_track_sections(players_link_ts[pname], ts_id)
+ players_link_ts[pname] = nil
+ end
+ end
+
+ if fields.del_tcb and sel_tcb and sel_tcb > 0 and sel_tcb <= #ts.tc_breaks then
+ if not ildb.remove_from_interlocking(ts.tc_breaks[sel_tcb]) then
+ minetest.chat_send_player(pname, "Please unassign signal first!")
+ end
+ sel_tcb = nil
+ end
+
+ if fields.link then
+ players_link_ts[pname] = ts_id
+ end
+ if fields.dissolve then
+ ildb.dissolve_ts(ts_id)
+ minetest.close_formspec(pname, formname)
+ return
+ end
+ end
+
+ if fields.setname then
+ ts.name = fields.name
+ if ts.name == "" then
+ ts.name = "Section "..ts_id
+ end
+ end
+
+ if fields.reset then
+ -- User requested resetting the section
+ -- Show him what this means...
+ local form = "size[7,5]label[0.5,0.5;Reset track section]"
+ form = form.."label[0.5,1;This will clear the list of trains\nand the routesetting status of this section.\nAre you sure?]"
+ form = form.."button_exit[0.5,2.5; 5,1;reset;Yes]"
+ form = form.."button_exit[0.5,3.5; 5,1;cancel;Cancel]"
+ minetest.show_formspec(pname, "at_il_tsreset_"..ts_id, form)
+ return
+ end
+
+ advtrains.interlocking.show_ts_form(ts_id, pname, sel_tcb)
+ return
+ end
+
+ ts_id = string.match(formname, "^at_il_tsreset_(.+)$")
+ if ts_id and fields.reset then
+ local ts = ildb.get_ts(ts_id)
+ if not ts then return end
+ ts.trains = {}
+ if ts.route_post then
+ advtrains.interlocking.route.free_route_locks(ts_id, ts.route_post.locks)
+ end
+ ts.route_post = nil
+ ts.route = nil
+ for _, sigd in ipairs(ts.tc_breaks) do
+ local tcbs = ildb.get_tcbs(sigd)
+ advtrains.interlocking.update_signal_aspect(tcbs)
+ end
+ minetest.chat_send_player(pname, "Reset track section "..ts_id.."!")
+ end
+end)
+
+-- TCB marker entities
+
+-- table with objectRefs
+local markerent = {}
+
+minetest.register_entity("advtrains_interlocking:tcbmarker", {
+ visual = "mesh",
+ mesh = "trackplane.b3d",
+ textures = {"at_il_tcb_marker.png"},
+ collisionbox = {-1,-0.5,-1, 1,-0.4,1},
+ visual_size = {x=10, y=10},
+ on_punch = function(self)
+ self.object:remove()
+ end,
+ on_rightclick = function(self, player)
+ if self.tcbpos and player then
+ advtrains.interlocking.show_tcb_form(self.tcbpos, player:get_player_name())
+ end
+ end,
+ get_staticdata = function() return "STATIC" end,
+ on_activate = function(self, sdata) if sdata=="STATIC" then self.object:remove() end end,
+ static_save = false,
+})
+
+function advtrains.interlocking.show_tcb_marker(pos)
+ --atdebug("showing tcb marker",pos)
+ local tcb = ildb.get_tcb(pos)
+ if not tcb then return end
+ local node_ok, conns, rhe = advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ if not node_ok then return end
+ local yaw = advtrains.conn_angle_median(conns[2].c, conns[1].c)
+
+ local itex = {}
+ for connid=1,2 do
+ local tcbs = tcb[connid]
+ local ts
+ if tcbs.ts_id then
+ ts = ildb.get_ts(tcbs.ts_id)
+ end
+ if ts then
+ itex[connid] = ts.name
+ else
+ itex[connid] = "--EOI--"
+ end
+ end
+
+ local pts = advtrains.roundfloorpts(pos)
+ if markerent[pts] then
+ markerent[pts]:remove()
+ end
+
+ local obj = minetest.add_entity(pos, "advtrains_interlocking:tcbmarker")
+ if not obj then return end
+ obj:set_yaw(yaw)
+ obj:set_properties({
+ infotext = "A = "..itex[1].."\nB = "..itex[2]
+ })
+ local le = obj:get_luaentity()
+ if le then le.tcbpos = pos end
+
+ markerent[pts] = obj
+end
+
+-- Signalling formspec - set routes a.s.o
+
+-- textlist selection temporary storage
+local sig_pselidx = {}
+-- Players having a signalling form open
+local p_open_sig_form = {}
+
+function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte)
+ if not minetest.check_player_privs(pname, "train_operator") then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ local hasprivs = minetest.check_player_privs(pname, "interlocking")
+ local tcbs = ildb.get_tcbs(sigd)
+
+ if not tcbs.signal then return end
+ if not tcbs.signal_name then tcbs.signal_name = "Signal at "..minetest.pos_to_string(sigd.p) end
+ if not tcbs.routes then tcbs.routes = {} end
+
+ local form = "size[7,10]label[0.5,0.5;Signal at "..minetest.pos_to_string(sigd.p).."]"
+ form = form.."field[0.8,1.5;5.2,1;name;Signal name;"..minetest.formspec_escape(tcbs.signal_name).."]"
+ form = form.."button[5.5,1.2;1,1;setname;Set]"
+
+ if tcbs.routeset then
+ local rte = tcbs.routes[tcbs.routeset]
+ if not rte then
+ atwarn("Unknown route set from signal!")
+ tcbs.routeset = nil
+ return
+ end
+ form = form.."label[0.5,2.5;A route is requested from this signal:]"
+ form = form.."label[0.5,3.0;"..minetest.formspec_escape(rte.name).."]"
+ if tcbs.route_committed then
+ form = form.."label[0.5,3.5;Route has been set.]"
+ else
+ form = form.."label[0.5,3.5;Waiting for route to be set...]"
+ if tcbs.route_rsn then
+ form = form.."label[0.5,4;"..minetest.formspec_escape(tcbs.route_rsn).."]"
+ end
+ end
+ if not tcbs.route_auto then
+ form = form.."button[0.5,7; 5,1;auto;Enable Automatic Working]"
+ else
+ form = form.."label[0.5,7 ;Automatic Working is active.]"
+ form = form.."label[0.5,7.3;Route is re-set when a train passed.]"
+ form = form.."button[0.5,7.7; 5,1;noauto;Disable Automatic Working]"
+ end
+
+ form = form.."button[0.5,6; 5,1;cancelroute;Cancel Route]"
+ else
+ if not tcbs.route_origin then
+ local strtab = {}
+ for idx, route in ipairs(tcbs.routes) do
+ local clr = ""
+ if route.ars then
+ clr = "#FF5555"
+ if route.ars.default then
+ clr = "#55FF55"
+ end
+ end
+ strtab[#strtab+1] = clr .. minetest.formspec_escape(route.name)
+ end
+ form = form.."label[0.5,2.5;Routes:]"
+ form = form.."textlist[0.5,3;5,3;rtelist;"..table.concat(strtab, ",").."]"
+ if sel_rte then
+ form = form.."button[0.5,6; 5,1;setroute;Set Route]"
+ form = form.."button[0.5,7;2,1;dsproute;Show]"
+ if hasprivs then
+ form = form.."button[3.5,7;2,1;editroute;Edit]"
+ end
+ else
+ if tcbs.ars_disabled then
+ form = form.."label[0.5,6 ;NOTE: ARS is disabled.]"
+ form = form.."label[0.5,6.5;Routes are not automatically set.]"
+ end
+ end
+ if hasprivs then
+ form = form.."button[0.5,8;2.5,1;newroute;New Route]"
+ form = form.."button[ 3,8;2.5,1;unassign;Unassign Signal]"
+ form = form.."button[ 3,9;2.5,1;influp;Influence Point]"
+ end
+ if tcbs.ars_disabled then
+ form = form.."button[0.5,9;2.5,1;arsenable;Enable ARS]"
+ else
+ form = form.."button[0.5,9;2.5,1;arsdisable;Disable ARS]"
+ end
+ elseif sigd_equal(tcbs.route_origin, sigd) then
+ -- something has gone wrong: tcbs.routeset should have been set...
+ form = form.."label[0.5,2.5;Inconsistent state: route_origin is same TCBS but no route set. Try again.]"
+ ilrs.cancel_route_from(sigd)
+ else
+ form = form.."label[0.5,2.5;Route is set over this signal by:\n"..sigd_to_string(tcbs.route_origin).."]"
+ form = form.."label[0.5,4;Wait for this route to be cancelled in order to do anything here.]"
+ end
+ end
+ sig_pselidx[pname] = sel_rte
+ minetest.show_formspec(pname, "at_il_signalling_"..minetest.pos_to_string(sigd.p).."_"..sigd.s, form)
+ p_open_sig_form[pname] = sigd
+
+ -- always a good idea to update the signal aspect
+ advtrains.interlocking.update_signal_aspect(tcbs)
+end
+
+function advtrains.interlocking.update_player_forms(sigd)
+ for pname, tsigd in pairs(p_open_sig_form) do
+ if advtrains.interlocking.sigd_equal(sigd, tsigd) then
+ advtrains.interlocking.show_signalling_form(sigd, pname, nil)
+ end
+ end
+end
+
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "train_operator") then
+ return
+ end
+ local hasprivs = minetest.check_player_privs(pname, "interlocking")
+
+ -- independent of the formspec, clear this whenever some formspec event happens
+ local tpsi = sig_pselidx[pname]
+ sig_pselidx[pname] = nil
+ p_open_sig_form[pname] = nil
+
+ local pts, connids = string.match(formname, "^at_il_signalling_([^_]+)_(%d)$")
+ local pos, connid
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ connid = tonumber(connids)
+ if not connid or connid<1 or connid>2 then return end
+ end
+ if pos and connid and not fields.quit then
+ local sigd = {p=pos, s=connid}
+ local tcbs = ildb.get_tcbs(sigd)
+ if not tcbs then return end
+
+ local sel_rte
+ if fields.rtelist then
+ local tev = minetest.explode_textlist_event(fields.rtelist)
+ sel_rte = tev.index
+ elseif tpsi then
+ sel_rte = tpsi
+ end
+ if fields.setname and fields.name and hasprivs then
+ tcbs.signal_name = fields.name
+ end
+ if tcbs.routeset and fields.cancelroute then
+ if tcbs.routes[tcbs.routeset] and tcbs.routes[tcbs.routeset].ars then
+ tcbs.ars_disabled = true
+ end
+ -- if route committed, cancel route ts info
+ ilrs.update_route(sigd, tcbs, nil, true)
+ end
+ if not tcbs.routeset then
+ if fields.newroute and hasprivs then
+ advtrains.interlocking.init_route_prog(pname, sigd)
+ minetest.close_formspec(pname, formname)
+ return
+ end
+ if sel_rte and tcbs.routes[sel_rte] then
+ if fields.setroute then
+ ilrs.update_route(sigd, tcbs, sel_rte)
+ end
+ if fields.dsproute then
+ local t = os.clock()
+ advtrains.interlocking.visualize_route(sigd, tcbs.routes[sel_rte], "disp_"..t)
+ minetest.after(10, function() advtrains.interlocking.clear_visu_context("disp_"..t) end)
+ end
+ if fields.editroute and hasprivs then
+ advtrains.interlocking.show_route_edit_form(pname, sigd, sel_rte)
+ --local rte = tcbs.routes[sel_rte]
+ --minetest.show_formspec(pname, formname.."_renroute_"..sel_rte, "field[name;Enter new route name;"..rte.name.."]")
+ return
+ end
+ end
+ end
+
+ if fields.unassign and hasprivs then
+ -- unassigning the signal from the tcbs
+ -- only when no route is set.
+ -- Routes and name remain saved, in case the player wants to reassign a new signal
+ if not tcbs.routeset then
+ local signal_pos = tcbs.signal
+ ildb.set_sigd_for_signal(signal_pos, nil)
+ tcbs.signal = nil
+ tcbs.aspect = nil
+ minetest.close_formspec(pname, formname)
+ minetest.chat_send_player(pname, "Signal has been unassigned. Name and routes are kept for reuse.")
+ return
+ else
+ minetest.chat_send_player(pname, "Please cancel route first!")
+ end
+ end
+ if fields.influp and hasprivs then
+ advtrains.interlocking.show_ip_form(tcbs.signal, pname)
+ return
+ end
+
+ if tcbs.ars_disabled and fields.arsenable then
+ tcbs.ars_disabled = nil
+ end
+ if not tcbs.ars_disabled and fields.arsdisable then
+ tcbs.ars_disabled = true
+ end
+
+ if fields.auto then
+ tcbs.route_auto = true
+ end
+ if fields.noauto then
+ tcbs.route_auto = false
+ end
+
+ advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte)
+ return
+ end
+
+
+ if not hasprivs then return end
+ -- rename route
+ local rind, rte_id
+ pts, connids, rind = string.match(formname, "^at_il_signalling_([^_]+)_(%d)_renroute_(%d+)$")
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ connid = tonumber(connids)
+ rte_id = tonumber(rind)
+ if not connid or connid<1 or connid>2 then return end
+ end
+ if pos and connid and rind and fields.name then
+ local sigd = {p=pos, s=connid}
+ local tcbs = ildb.get_tcbs(sigd)
+ if tcbs.routes[rte_id] then
+ tcbs.routes[rte_id].name = fields.name
+ advtrains.interlocking.show_signalling_form(sigd, pname)
+ end
+ end
+end)
diff --git a/advtrains/advtrains_interlocking/textures/advtrains_dtrack_npr_placer.png b/advtrains/advtrains_interlocking/textures/advtrains_dtrack_npr_placer.png
new file mode 100644
index 0000000..0d1c769
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/advtrains_dtrack_npr_placer.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/advtrains_dtrack_shared_npr.png b/advtrains/advtrains_interlocking/textures/advtrains_dtrack_shared_npr.png
new file mode 100644
index 0000000..0116c27
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/advtrains_dtrack_shared_npr.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_route_end.png b/advtrains/advtrains_interlocking/textures/at_il_route_end.png
new file mode 100644
index 0000000..1433f0c
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_route_end.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_route_lock.png b/advtrains/advtrains_interlocking/textures/at_il_route_lock.png
new file mode 100644
index 0000000..6a5269b
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_route_lock.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_route_lock_edit.png b/advtrains/advtrains_interlocking/textures/at_il_route_lock_edit.png
new file mode 100644
index 0000000..df5f923
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_route_lock_edit.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_route_set.png b/advtrains/advtrains_interlocking/textures/at_il_route_set.png
new file mode 100644
index 0000000..3531420
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_route_set.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_route_start.png b/advtrains/advtrains_interlocking/textures/at_il_route_start.png
new file mode 100644
index 0000000..dcb5160
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_route_start.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_routep_advance.png b/advtrains/advtrains_interlocking/textures/at_il_routep_advance.png
new file mode 100644
index 0000000..d971e85
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_routep_advance.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_routep_end_here.png b/advtrains/advtrains_interlocking/textures/at_il_routep_end_here.png
new file mode 100644
index 0000000..9dd3088
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_routep_end_here.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_routep_end_over.png b/advtrains/advtrains_interlocking/textures/at_il_routep_end_over.png
new file mode 100644
index 0000000..e03198b
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_routep_end_over.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_routep_end_over_last.png b/advtrains/advtrains_interlocking/textures/at_il_routep_end_over_last.png
new file mode 100644
index 0000000..f4fb1aa
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_routep_end_over_last.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_signal_asp_danger.png b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_danger.png
new file mode 100644
index 0000000..fca786d
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_danger.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_signal_asp_free.png b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_free.png
new file mode 100644
index 0000000..e9d6e9c
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_free.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_signal_asp_slow.png b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_slow.png
new file mode 100644
index 0000000..9242bb3
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_signal_asp_slow.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_signal_ip.png b/advtrains/advtrains_interlocking/textures/at_il_signal_ip.png
new file mode 100644
index 0000000..bf1618a
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_signal_ip.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_signal_off.png b/advtrains/advtrains_interlocking/textures/at_il_signal_off.png
new file mode 100644
index 0000000..f9b1f79
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_signal_off.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_tcb_marker.png b/advtrains/advtrains_interlocking/textures/at_il_tcb_marker.png
new file mode 100644
index 0000000..3efc38a
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_tcb_marker.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_tcb_node.png b/advtrains/advtrains_interlocking/textures/at_il_tcb_node.png
new file mode 100644
index 0000000..d5f615f
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_tcb_node.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_tool.png b/advtrains/advtrains_interlocking/textures/at_il_tool.png
new file mode 100644
index 0000000..f6ce1cc
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_tool.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_l.png b/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_l.png
new file mode 100644
index 0000000..fb79e3d
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_l.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_r.png b/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_r.png
new file mode 100644
index 0000000..e04dfbd
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_turnout_cr_r.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_turnout_free.png b/advtrains/advtrains_interlocking/textures/at_il_turnout_free.png
new file mode 100644
index 0000000..5c83193
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_turnout_free.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/textures/at_il_turnout_st.png b/advtrains/advtrains_interlocking/textures/at_il_turnout_st.png
new file mode 100644
index 0000000..50d5ad5
--- /dev/null
+++ b/advtrains/advtrains_interlocking/textures/at_il_turnout_st.png
Binary files differ
diff --git a/advtrains/advtrains_interlocking/tool.lua b/advtrains/advtrains_interlocking/tool.lua
new file mode 100644
index 0000000..5d38b3a
--- /dev/null
+++ b/advtrains/advtrains_interlocking/tool.lua
@@ -0,0 +1,66 @@
+-- tool.lua
+-- Interlocking tool
+
+local ilrs = advtrains.interlocking.route
+
+minetest.register_craftitem("advtrains_interlocking:tool",{
+ description = "Interlocking tool\nright-click turnouts to inspect route locks",
+ groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
+ inventory_image = "at_il_tool.png",
+ wield_image = "at_il_tool.png",
+ stack_max = 1,
+ on_place = function(itemstack, placer, pointed_thing)
+ local pname = placer:get_player_name()
+ if not pname then
+ return
+ end
+ if not minetest.check_player_privs(pname, {interlocking=true}) then
+ minetest.chat_send_player(pname, "Insufficient privileges to use this!")
+ return
+ end
+ if pointed_thing.type=="node" then
+ local pos=pointed_thing.under
+ if advtrains.is_passive(pos) then
+ local form = "size[7,5]label[0.5,0.5;Route lock inspector]"
+ local pts = minetest.pos_to_string(pos)
+
+ local rtl = ilrs.has_route_lock(pts)
+
+ if rtl then
+ form = form.."label[0.5,1;Route locks currently put:\n"..rtl.."]"
+ form = form.."button_exit[0.5,3.5; 5,1;clear;Clear]"
+ else
+ form = form.."label[0.5,1;No route locks set]"
+ form = form.."button_exit[0.5,3.5; 5,1;emplace;Emplace manual lock]"
+ end
+
+ minetest.show_formspec(pname, "at_il_rtool_"..pts, form)
+ else
+ minetest.chat_send_player(pname, "Cannot use this here.")
+ return
+ end
+ end
+ end,
+})
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ if not minetest.check_player_privs(pname, "interlocking") then
+ return
+ end
+ local pos
+ local pts = string.match(formname, "^at_il_rtool_(.+)$")
+ if pts then
+ pos = minetest.string_to_pos(pts)
+ end
+ if pos then
+ if advtrains.is_passive(pos) then
+ if fields.clear then
+ ilrs.remove_route_locks(pts)
+ end
+ if fields.emplace then
+ ilrs.add_manual_route_lock(pts, "Manual lock ("..pname..")")
+ end
+ end
+ end
+end)
diff --git a/advtrains/advtrains_interlocking/train_sections.lua b/advtrains/advtrains_interlocking/train_sections.lua
new file mode 100644
index 0000000..757f36a
--- /dev/null
+++ b/advtrains/advtrains_interlocking/train_sections.lua
@@ -0,0 +1,199 @@
+-- train_related.lua
+-- Occupation of track sections - mainly implementation of train callbacks
+
+--[[
+Track section occupation is saved as follows
+
+In train:
+train.il_sections = {
+ [n] = {ts_id = <...> (origin = <sigd>)}
+}
+-- "origin" is the TCB (signal describer) the train initially entered this section
+
+In track section
+ts.trains = {
+ [n] = <train_id>
+}
+
+When any inconsistency is detected, we will assume the most restrictive setup.
+It will be possible to indicate a section "free" via the GUI.
+]]
+
+local ildb = advtrains.interlocking.db
+
+local sigd_equal = advtrains.interlocking.sigd_equal
+
+local function itexist(tbl, com)
+ for _,item in ipairs(tbl) do
+ if (item==com) then
+ return true
+ end
+ end
+ return false
+end
+local function itkexist(tbl, ikey, com)
+ for _,item in ipairs(tbl) do
+ if item[ikey] == com then
+ return true
+ end
+ end
+ return false
+end
+
+local function itremove(tbl, com)
+ local i=1
+ while i <= #tbl do
+ if tbl[i] == com then
+ table.remove(tbl, i)
+ else
+ i = i + 1
+ end
+ end
+end
+local function itkremove(tbl, ikey, com)
+ local i=1
+ while i <= #tbl do
+ if tbl[i][ikey] == com then
+ table.remove(tbl, i)
+ else
+ i = i + 1
+ end
+ end
+end
+
+local function setsection(tid, train, ts_id, ts, sigd)
+ -- train
+ if not train.il_sections then train.il_sections = {} end
+ if not itkexist(train.il_sections, "ts_id", ts_id) then
+ table.insert(train.il_sections, {ts_id = ts_id, origin = sigd})
+ end
+
+ -- ts
+ if not ts.trains then ts.trains = {} end
+ if not itexist(ts.trains, tid) then
+ table.insert(ts.trains, tid)
+ end
+
+ -- routes
+ local tcbs = advtrains.interlocking.db.get_tcbs(sigd)
+
+ -- route setting - clear route state
+ if ts.route then
+ --atdebug(tid,"enters",ts_id,"examining Routestate",ts.route)
+ if not sigd_equal(ts.route.entry, sigd) then
+ -- Train entered not from the route. Locate origin and cancel route!
+ atwarn("Train",tid,"hit route",ts.route.rsn,"!")
+ advtrains.interlocking.route.cancel_route_from(ts.route.origin)
+ atwarn("Route was cancelled.")
+ else
+ -- train entered route regularily. Reset route and signal
+ tcbs.route_committed = nil
+ tcbs.route_comitted = nil -- TODO compatibility cleanup
+ tcbs.aspect = nil
+ tcbs.route_origin = nil
+ advtrains.interlocking.update_signal_aspect(tcbs)
+ if tcbs.signal and sigd_equal(ts.route.entry, ts.route.origin) then
+ if tcbs.route_auto and tcbs.routeset then
+ --atdebug("Resetting route (",ts.route.origin,")")
+ advtrains.interlocking.route.update_route(ts.route.origin, tcbs)
+ else
+ tcbs.routeset = nil
+ end
+ end
+ end
+ ts.route = nil
+ end
+ if tcbs.signal then
+ advtrains.interlocking.route.update_route(sigd, tcbs)
+ end
+end
+
+local function freesection(tid, train, ts_id, ts)
+ -- train
+ if not train.il_sections then train.il_sections = {} end
+ itkremove(train.il_sections, "ts_id", ts_id)
+
+ -- ts
+ if not ts.trains then ts.trains = {} end
+ itremove(ts.trains, tid)
+
+ if ts.route_post then
+ advtrains.interlocking.route.free_route_locks(ts_id, ts.route_post.locks)
+ if ts.route_post.next then
+ --this does nothing when the train went the right way, because
+ -- "route" info is already cleared.
+ advtrains.interlocking.route.cancel_route_from(ts.route_post.next)
+ end
+ ts.route_post = nil
+ end
+ -- This must be delayed, because this code is executed in-between a train step
+ -- TODO use luaautomation timers?
+ minetest.after(0, advtrains.interlocking.route.update_waiting, "ts", ts_id)
+end
+
+
+-- This is regular operation
+-- The train is on a track and drives back and forth
+
+-- This sets the section for both directions, to be failsafe
+advtrains.tnc_register_on_enter(function(pos, id, train, index)
+ local tcb = ildb.get_tcb(pos)
+ if tcb then
+ for connid=1,2 do
+ local ts = tcb[connid].ts_id and ildb.get_ts(tcb[connid].ts_id)
+ if ts then
+ setsection(id, train, tcb[connid].ts_id, ts, {p=pos, s=connid})
+ end
+ end
+ end
+end)
+
+
+-- this time, of course, only clear the backside (cp connid)
+advtrains.tnc_register_on_leave(function(pos, id, train, index)
+ local tcb = ildb.get_tcb(pos)
+ if tcb and train.path_cp[index] then
+ local connid = train.path_cp[index]
+ local ts = tcb[connid].ts_id and ildb.get_ts(tcb[connid].ts_id)
+ if ts then
+ freesection(id, train, tcb[connid].ts_id, ts)
+ end
+ end
+end)
+
+-- those callbacks are needed to account for created and removed trains (also regarding coupling)
+
+advtrains.te_register_on_create(function(id, train)
+ -- let's see what track sections we find here
+ local index = atround(train.index)
+ local pos = advtrains.path_get(train, index)
+ local ts_id, origin = ildb.get_ts_at_pos(pos)
+ if ts_id then
+ local ts = ildb.get_ts(ts_id)
+ if ts then
+ setsection(id, train, ts_id, ts, origin)
+ else
+ atwarn("ILDB corruption: TCB",origin," has invalid TS reference")
+ end
+ -- Make train a shunt move
+ train.is_shunt = true
+ elseif ts_id==nil then
+ atlog("Train",id,": Unable to determine whether to block a track section!")
+ else
+ --atdebug("Train",id,": Outside of interlocked area!")
+ end
+end)
+
+advtrains.te_register_on_remove(function(id, train)
+ if train.il_sections then
+ for idx, item in ipairs(train.il_sections) do
+
+ local ts = item.ts_id and ildb.get_ts(item.ts_id)
+
+ if ts and ts.trains then
+ itremove(ts.trains, id)
+ end
+ end
+ train.il_sections = nil
+ end
+end)
diff --git a/advtrains/advtrains_interlocking/tsr_rail.lua b/advtrains/advtrains_interlocking/tsr_rail.lua
new file mode 100644
index 0000000..a500c8f
--- /dev/null
+++ b/advtrains/advtrains_interlocking/tsr_rail.lua
@@ -0,0 +1,56 @@
+-- tsr_rail.lua
+-- Point speed restriction rails
+-- Simple rail whose only purpose is to place a TSR on the position, as a temporary solution until the timetable system covers everything.
+-- This code resembles the code in lines/stoprail.lua
+
+local function updateform(pos)
+ local meta = minetest.get_meta(pos)
+ local pe = advtrains.encode_pos(pos)
+ local npr = advtrains.interlocking.npr_rails[pe] or 2
+
+ meta:set_string("infotext", "Point speed restriction: "..npr)
+ meta:set_string("formspec", "field[npr;Set point speed restriction:;"..npr.."]")
+end
+
+
+local adefunc = function(def, preset, suffix, rotation)
+ return {
+ after_place_node=function(pos)
+ updateform(pos)
+ end,
+ after_dig_node=function(pos)
+ local pe = advtrains.encode_pos(pos)
+ advtrains.interlocking.npr_rails[pe] = nil
+ end,
+ on_receive_fields = function(pos, formname, fields, player)
+ if fields.npr then
+ local pe = advtrains.encode_pos(pos)
+ advtrains.interlocking.npr_rails[pe] = tonumber(fields.npr)
+ updateform(pos)
+ end
+ end,
+ advtrains = {
+ on_train_approach = function(pos,train_id, train, index)
+ if train.path_cn[index] == 1 then
+ local pe = advtrains.encode_pos(pos)
+ local npr = advtrains.interlocking.npr_rails[pe] or 2
+ advtrains.lzb_add_checkpoint(train, index, npr, nil)
+ end
+ end,
+ },
+ }
+end
+
+
+if minetest.get_modpath("advtrains_train_track") ~= nil then
+ advtrains.register_tracks("default", {
+ nodename_prefix="advtrains_interlocking:dtrack_npr",
+ texture_prefix="advtrains_dtrack_npr",
+ models_prefix="advtrains_dtrack",
+ models_suffix=".b3d",
+ shared_texture="advtrains_dtrack_shared_npr.png",
+ description="Point Speed Restriction Rail",
+ formats={},
+ get_additional_definiton = adefunc,
+ }, advtrains.trackpresets.t_30deg_straightonly)
+end \ No newline at end of file
diff --git a/advtrains/advtrains_itrainmap/depends.txt b/advtrains/advtrains_itrainmap/depends.txt
new file mode 100644
index 0000000..6f00bf6
--- /dev/null
+++ b/advtrains/advtrains_itrainmap/depends.txt
@@ -0,0 +1 @@
+advtrains \ No newline at end of file
diff --git a/advtrains/advtrains_itrainmap/init.lua b/advtrains/advtrains_itrainmap/init.lua
new file mode 100644
index 0000000..0443609
--- /dev/null
+++ b/advtrains/advtrains_itrainmap/init.lua
@@ -0,0 +1,149 @@
+
+
+local map_def={
+ example = {
+ p1x=168,
+ p1z=530,
+ p2x=780,
+ p2z=1016,
+ background="itm_example.png",
+ },
+}
+
+local itm_cache={}
+local itm_pdata={}
+local itm_conf_mindia=0.1
+
+minetest.register_privilege("itm", { description = "Allows to display train map", give_to_singleplayer = true, default = false })
+
+local function create_map_form_with_bg(d)
+ local minx, minz, maxx, maxz = math.min(d.p1x, d.p2x), math.min(d.p1z, d.p2z), math.max(d.p1x, d.p2x), math.max(d.p1z, d.p2z)
+ local form_x, form_z=10,10
+ local edge_x, edge_z = form_x/(maxx-minx), form_z/(maxz-minz)
+ local len_x, len_z=math.max(edge_x, itm_conf_mindia), math.max(edge_z, itm_conf_mindia)
+ local form="size["..(form_x+edge_x)..","..(form_z+edge_z).."] background[0,0;0,0;"..d.background..";true] "
+ local lbl={}
+
+ for pts, tid in pairs(advtrains.detector.on_node) do
+ local pos=minetest.string_to_pos(pts)
+ form=form.."box["..(edge_x*(pos.x-minx))..","..(form_z-(edge_z*(pos.z-minz)))..";"..len_x..","..len_z..";red]"
+ lbl[sid(tid)]=pos
+ end
+
+ for t_id, xz in pairs(lbl) do
+ form=form.."label["..(edge_x*(xz.x-minx))..","..(form_x-(edge_z*(xz.z-minz)))..";"..t_id.."]"
+ end
+ return form
+end
+
+local function create_map_form(d)
+ if d.background then
+ return create_map_form_with_bg(d)
+ end
+
+ local minx, minz, maxx, maxz = math.min(d.p1x, d.p2x), math.min(d.p1z, d.p2z), math.max(d.p1x, d.p2x), math.max(d.p1z, d.p2z)
+ local form_x, form_z=10,10
+ local edge_x, edge_z = form_x/(maxx-minx), form_z/(maxz-minz)
+ local len_x, len_z=math.max(edge_x, itm_conf_mindia), math.max(edge_z, itm_conf_mindia)
+ local form="size["..(form_x+edge_x)..","..(form_z+edge_z).."]"
+ local lbl={}
+
+ for x,itx in pairs(itm_cache) do
+ if x>=minx and x<=maxx then
+ for z,y in pairs(itx) do
+ if z>=minz and z<=maxz then
+ local adn=advtrains.detector.get({x=x, y=y, z=z})
+ local color="gray"
+ if adn then
+ color="red"
+ lbl[sid(adn)]={x=x, z=z}
+ end
+ form=form.."box["..(edge_x*(x-minx))..","..(form_z-(edge_z*(z-minz)))..";"..len_x..","..len_z..";"..color.."]"
+ end
+ end
+ end
+ end
+ for t_id, xz in pairs(lbl) do
+ form=form.."label["..(edge_x*(xz.x-minx))..","..(form_x-(edge_z*(xz.z-minz)))..";"..t_id.."]"
+ end
+ return form
+end
+
+local function cache_ndb()
+ itm_cache={}
+ local ndb_nodes=advtrains.ndb.get_nodes()
+ for y, xzt in pairs(ndb_nodes) do
+ for x, zt in pairs(xzt) do
+ for z, _ in pairs(zt) do
+ if not itm_cache[x] then
+ itm_cache[x]={}
+ end
+ itm_cache[x][z]=y
+ end
+ end
+ end
+end
+
+minetest.register_chatcommand("itm", {
+ params="[x1 z1 x2 z2] or [mdef]",
+ description="Display advtrains train map of given area.\nFirst form:[x1 z1 x2 z2] - specify area directly.\nSecond form:[mdef] - Use a predefined map background(see init.lua)\nThird form: No parameters - use WorldEdit position markers.",
+ privs={itm=true},
+ func = function(name, param)
+ local mdef=string.match(param, "^(%S+)$")
+ if mdef then
+ local d=map_def[mdef]
+ if not d then
+ return false, "Map definiton not found: "..mdef
+ end
+ itm_pdata[name]=map_def[mdef]
+ minetest.show_formspec(name, "itrainmap", create_map_form(d))
+ return true, "Showing train map: "..mdef
+ end
+ local x1, z1, x2, z2=string.match(param, "^(%S+) (%S+) (%S+) (%S+)$")
+ if not (x1 and z1 and x2 and z2) then
+ if worldedit then
+ local wep1, wep2=worldedit.pos1[name], worldedit.pos2[name]
+ if wep1 and wep2 then
+ x1, z1, x2, z2=wep1.x, wep1.z, wep2.x, wep2.z
+ end
+ end
+ end
+ if not (x1 and z1 and x2 and z2) then
+ return false, "Invalid parameters and no WE positions set"
+ end
+ local d={p1x=x1, p1z=z1, p2x=x2, p2z=z2}
+ itm_pdata[name]=d
+ minetest.show_formspec(name, "itrainmap", create_map_form(d))
+ return true, "Showing ("..x1..","..z1..")-("..x2..","..z2..")"
+ end,
+})
+minetest.register_chatcommand("itm_cache_ndb", {
+ params="",
+ description="Cache advtrains node database again. Run when tracks changed.",
+ privs={itm=true},
+ func = function(name, param)
+ cache_ndb()
+ return true, "Done caching node database."
+ end,
+})
+
+local timer=0
+function advtrains_itm_mainloop(dtime)
+ timer=timer-math.min(dtime, 0.1)
+ if timer<=0 then
+ for pname,d in pairs(itm_pdata) do
+ minetest.show_formspec(pname, "itrainmap", create_map_form(d))
+ end
+ timer=2
+ end
+end
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ if formname=="itrainmap" and fields.quit then
+ itm_pdata[player:get_player_name()]=nil
+ end
+end)
+
+function advtrains_itm_init()
+ --automatically run itm_cache_ndb
+ minetest.after(2, cache_ndb)
+end
diff --git a/advtrains/advtrains_itrainmap/textures/itm_example.png b/advtrains/advtrains_itrainmap/textures/itm_example.png
new file mode 100644
index 0000000..caf084a
--- /dev/null
+++ b/advtrains/advtrains_itrainmap/textures/itm_example.png
Binary files differ
diff --git a/advtrains/advtrains_line_automation/depends.txt b/advtrains/advtrains_line_automation/depends.txt
new file mode 100644
index 0000000..ce2e23c
--- /dev/null
+++ b/advtrains/advtrains_line_automation/depends.txt
@@ -0,0 +1,2 @@
+advtrains_interlocking
+advtrains_train_track? \ No newline at end of file
diff --git a/advtrains/advtrains_line_automation/init.lua b/advtrains/advtrains_line_automation/init.lua
new file mode 100644
index 0000000..7b758bc
--- /dev/null
+++ b/advtrains/advtrains_line_automation/init.lua
@@ -0,0 +1,47 @@
+-- Advtrains line automation system
+
+advtrains.lines = {
+ -- [station code] = {name=..., owner=...}
+ stations = {},
+
+ --[[ [new pos hash] = {
+ stn = <station code>,
+ track = <platform identifier>,
+ doors = <door side L,R,C>
+ wait = <least wait time>
+ reverse = <boolean>
+ signal = <position of signal that is the "exit signal" for this platform>
+ }]]
+ stops = {},
+}
+
+
+local modpath = minetest.get_modpath(minetest.get_current_modname()) .. DIR_DELIM
+
+dofile(modpath.."railwaytime.lua")
+dofile(modpath.."scheduler.lua")
+dofile(modpath.."stoprail.lua")
+
+
+function advtrains.lines.load(data)
+ if data then
+ advtrains.lines.stations = data.stations or {}
+ advtrains.lines.stops = data.stops or {}
+ advtrains.lines.rwt.set_time(data.rwt_time)
+ advtrains.lines.sched.load(data.scheduler_queue)
+ end
+end
+
+function advtrains.lines.save()
+ return {
+ stations = advtrains.lines.stations,
+ stops = advtrains.lines.stops,
+ rwt_time = advtrains.lines.rwt.get_time(),
+ scheduler_queue = advtrains.lines.sched.save()
+ }
+end
+
+function advtrains.lines.step(dtime)
+ advtrains.lines.rwt.step(dtime)
+ advtrains.lines.sched.run()
+end
diff --git a/advtrains/advtrains_line_automation/railwaytime.lua b/advtrains/advtrains_line_automation/railwaytime.lua
new file mode 100644
index 0000000..258009e
--- /dev/null
+++ b/advtrains/advtrains_line_automation/railwaytime.lua
@@ -0,0 +1,308 @@
+-- railwaytime.lua
+-- Advtrains uses a desynchronized time for train movement. Everything is counted relative to this time counter.
+-- The advtrains-internal time is in no way synchronized to the real-life time, due to:
+-- - Lag
+-- - Server stops/restarts
+-- However, this means that implementing a "timetable" system using the "real time" is not practical. Therefore,
+-- we introduce a custom time system, the RWT(Railway Time), which has nothing to do with RLT(Real-Life Time)
+-- RWT has a time cycle of 1 hour. This should be sufficient for most train lines that will ever be built in Minetest.
+-- A RWT looks like this: 37;25
+-- The ; is to distinguish it from a normal RLT (which has colons e.g. 12:34:56). Left number is minutes, right number is seconds.
+-- The minimum RWT is 00;00, the maximum is 59;59.
+-- It is OK to leave one places out at either end, esp. when writing relative times, such as:
+-- 43;3 22;0 2;30 0;10 ;10
+-- Those places are then filled with zeroes. Indeed, ";" would be valid for 00;00 .
+
+-- There is an "adapt mode", which was proposed by gpcf, and results in RWT automatically adapting itself to real-world time.
+-- It works by shifting the minute/second after the realtime minute/second, adjusting the cycle value as needed.
+
+-- Using negative times is discouraged. If you need a negative time, you may insert a minus (-) ONLY in the "c" place
+
+--[[
+1;23;45 = {
+ s=45,
+ m=23,
+ c=1, -- Cycle(~hour), not displayed most time
+}
+
+Railway times can exist in 3 forms:
+- as table (see above)
+- as string (like "12;34")
+- as number (of seconds)
+
+Forms are automagically converted as needed by the converter functions to_*
+To be sure a rwt is in the required form, explicitly use a converter.
+
+]]
+
+local rwt = {}
+
+--Time Stamp (Seconds since start of world)
+local e_time = 0
+local e_has_loaded = false
+
+local setting_rwt_real = minetest.settings:get("advtrains_lines_rwt_realtime")
+if setting_rwt_real=="" then
+ setting_rwt_real = "independent"
+end
+
+local e_last_epoch -- last real-time timestamp
+
+-- Advance RWT to match minute/second to the current real-world time
+-- only accounts for the minute/second part, leaves hour/cycle untouched
+local function adapt_real_time()
+ local datetab = os.date("*t")
+ local real_sectotal = 60*datetab.min + datetab.sec
+
+ local rwttab = rwt.now()
+ local rwt_sectotal = 60*rwttab.m + rwttab.s
+
+ --calculate the difference and take it %3600 (seconds/hour) to always move forward
+ local secsfwd = (real_sectotal - rwt_sectotal) % 3600
+
+ atlog("[lines][rwt] Skipping",secsfwd,"seconds forward to sync rwt (",rwt.to_string(rwttab),") to real time (",os.date("%H:%M:%S"),")")
+
+ e_time = e_time + secsfwd
+end
+
+function rwt.set_time(t)
+ e_time = t or 0
+ if setting_rwt_real == "adapt_real" then
+ adapt_real_time()
+ end
+ atlog("[lines][rwt] Initialized railway time: ",rwt.to_string(e_time))
+ e_last_epoch = os.time()
+
+ e_has_loaded = true
+end
+
+function rwt.get_time()
+ return e_time
+end
+
+function rwt.step(dt)
+ if not e_has_loaded then
+ rwt.set_time(0)
+ end
+
+ if setting_rwt_real=="independent" then
+ -- Regular stepping with dtime
+ e_time = e_time + dt
+ else
+ -- advance with real-world time
+ local diff = os.time() - e_last_epoch
+ e_last_epoch = os.time()
+
+ if diff>0 then
+ e_time = e_time + diff
+ end
+ end
+end
+
+function rwt.now()
+ return rwt.to_table(e_time)
+end
+
+function rwt.new(c, m, s)
+ return {
+ c = c or 0,
+ m = m or 0,
+ s = s or 0
+ }
+end
+function rwt.copy(rwtime)
+ local rwtimet = rwt.to_table(rwtime)
+ return {
+ c = rwtimet.c or 0,
+ m = rwtimet.m or 0,
+ s = rwtimet.s or 0
+ }
+end
+
+function rwt.to_table(rwtime)
+ if type(rwtime) == "table" then
+ return rwtime
+ elseif type(rwtime) == "string" then
+ return rwt.parse(rwtime)
+ elseif type(rwtime) == "number" then
+ local res = {}
+ local seconds = atfloor(rwtime)
+ res.s = seconds % 60
+ local minutes = atfloor(seconds/60)
+ res.m = minutes % 60
+ res.c = atfloor(minutes/60)
+ return res
+ end
+end
+
+function rwt.to_secs(rwtime, c_over)
+ local res = rwtime
+ if type(rwtime) == "string" then
+ res = rwt.parse(rwtime)
+ elseif type(rwtime) == "number" then
+ return rwtime
+ end
+ if type(res)=="table" then
+ return (c_over or res.c)*60*60 + res.m*60 + res.s
+ end
+end
+
+function rwt.to_string(rwtime_p, no_cycle)
+ local rwtime = rwt.to_table(rwtime_p)
+ if rwtime.c~=0 and not no_cycle then
+ return string.format("%d;%02d;%02d", rwtime.c, rwtime.m, rwtime.s)
+ else
+ return string.format("%02d;%02d", rwtime.m, rwtime.s)
+ end
+end
+
+---
+
+local function v_n(str, cpl)
+ if not str then return nil end
+ if str == "" then
+ return 0
+ end
+ local n = tonumber(str)
+ if not cpl and (n<0 or n>59) then
+ return nil
+ end
+ return n
+end
+
+function rwt.parse(str)
+ --atdebug("parse",str)
+ --3-value form
+ local str_c, str_m, str_s = string.match(str, "^(%-?%d?%d?);(%d%d);(%d?%d?)$")
+ if str_c and str_m and str_s then
+ --atdebug("3v",str_c, str_m, str_s)
+ local c, m, s = v_n(str_c, true), v_n(str_m), v_n(str_s)
+ if c and m and s then
+ return rwt.new(c,m,s)
+ end
+ end
+ --2-value form
+ local str_m, str_s = string.match(str, "^(%d?%d?);(%d?%d?)$")
+ if str_m and str_s then
+ --atdebug("2v",str_m, str_s)
+ local m, s = v_n(str_m), v_n(str_s)
+ if m and s then
+ return rwt.new(0,m,s)
+ end
+ end
+end
+
+---
+
+function rwt.add(t1, t2)
+ local t1s = rwt.to_secs(t1)
+ local t2s = rwt.to_secs(t2)
+ return rwt.to_table(t1s + t2s)
+end
+
+-- How many seconds FROM t1 TO t2
+function rwt.diff(t1, t2)
+ local t1s = rwt.to_secs(t1)
+ local t2s = rwt.to_secs(t2)
+ return t2s - t1s
+end
+
+-- Subtract t2 from t1 (inverted argument order compared to diff())
+function rwt.sub(t1, t2)
+ return rwt.to_table(rwt.diff(t2, t1))
+end
+
+-- Adjusts t2 by thresh and then returns time from t1 to t2
+function rwt.adj_diff(t1, t2, thresh)
+ local newc = rwt.adjust_cycle(t2, thresh, t1)
+ local t1s = rwt.to_secs(t1)
+ local t2s = rwt.to_secs(t2, newc)
+ return t1s - t2s
+end
+
+
+
+-- Threshold values
+-- "reftime" is the time to which this is made relative and defaults to now.
+rwt.CA_FUTURE = 60*60 - 1 -- Selected so that time lies at or in the future of reftime (at nearest point in time)
+rwt.CA_FUTURES = 60*60 -- Same, except when times are equal, advances one full cycle
+rwt.CA_PAST = 0 -- Selected so that time lies at or in the past of reftime
+rwt.CA_PASTS = -1 -- Same, except when times are equal, goes back one full cycle
+rwt.CA_CENTER = 30*60 -- If time is within past 30 minutes of reftime, selected as past, else selected as future.
+
+-- Adjusts the "cycle" value of a railway time to be in some relation to reftime.
+-- Returns new cycle
+function rwt.adjust_cycle(rwtime, reftime_p, thresh)
+ local reftime = reftime_p or rwt.now()
+
+ local reftimes = rwt.to_secs(reftime)
+
+ local rwtimes = rwt.to_secs(rwtime, 0)
+ local timeres = reftimes + thresh - rwtimes
+ local cycles = atfloor(timeres / (60*60))
+
+ return cycles
+end
+
+function rwt.adjust(rwtime, reftime, thresh)
+ local cp = rwt.copy(rwtime)
+ cp.c = rwt.adjust_cycle(rwtime, reftime, thresh)
+ return cp
+end
+
+-- Useful for departure times: returns time (in seconds)
+-- until the next (adjusted FUTURE) occurence of deptime is reached
+-- in this case, rwtime is used as reftime and deptime should lie in the future of rwtime
+-- rwtime defaults to NOW
+function rwt.get_time_until(deptime, rwtime_p)
+ local rwtime = rwtime_p or rwt.now()
+ return rwt.adj_diff(rwtime, deptime, rwt.CA_FUTURE)
+end
+
+
+-- Helper functions for handling "repeating times" (rpt)
+-- Those are generic declarations for time intervals like "every 5 minutes", with an optional offset
+-- ( /02;00-00;45 in timetable syntax
+
+-- Get the time (in seconds) until the next time this rpt occurs
+function rwt.time_to_next_rpt(rwtime, rpt_interval, rpt_offset)
+ local rpti_s = rwt.to_secs(rpt_interval)
+
+ return (rpti_s - rwt.time_from_last_rpt(rwtime, rpti_s, rpt_offset)) % rpti_s
+ -- Modulo is just there to clip a false value of rpti_s to 0
+end
+
+
+-- Get the time (in seconds) since the last time this rpt occured
+function rwt.time_from_last_rpt(rwtime, rpt_interval, rpt_offset)
+ local rwtime_s = rwt.to_secs(rwtime)
+ local rpti_s = rwt.to_secs(rpt_interval)
+ local rpto_s = rwt.to_secs(rpt_offset)
+
+ return ((rwtime_s - rpto_s) % rpti_s)
+end
+
+-- From rwtime, get the next time that is divisible by rpt_interval offset by rpt_offset
+function rwt.next_rpt(rwtime, rpt_interval, rpt_offset)
+ local rwtime_s = rwt.to_secs(rwtime)
+ local rpti_s = rwt.to_secs(rpt_interval)
+ local time_from_last = rwt.time_from_last_rpt(rwtime_s, rpti_s, rpt_offset)
+
+ local res_s = rwtime_s - time_from_last + rpti_s
+
+ return rwt.to_table(res_s)
+end
+
+-- from rwtime, get the last time that this rpt matched (which is actually just next_rpt - rpt_offset
+function rwt.last_rpt(rwtime, rpt_interval, rpt_offset)
+ local rwtime_s = rwt.to_sec(rwtime)
+ local rpti_s = rwt.to_sec(rpt_interval)
+ local time_from_last = rwt.time_from_last_rpt(rwtime, rpt_interval, rpt_offset)
+
+ local res_s = rwtime_s - time_from_last
+
+ return rwt.to_table(res_s)
+end
+
+
+advtrains.lines.rwt = rwt
diff --git a/advtrains/advtrains_line_automation/readme.txt b/advtrains/advtrains_line_automation/readme.txt
new file mode 100644
index 0000000..3280ce9
--- /dev/null
+++ b/advtrains/advtrains_line_automation/readme.txt
@@ -0,0 +1,5 @@
+== advtrains_line_automation
+This mod provides an extension to the interlocking system which allows to automatically operate trains on train lines.
+
+This extension makes use of the table
+advtrains.lines \ No newline at end of file
diff --git a/advtrains/advtrains_line_automation/scheduler.lua b/advtrains/advtrains_line_automation/scheduler.lua
new file mode 100644
index 0000000..6025b02
--- /dev/null
+++ b/advtrains/advtrains_line_automation/scheduler.lua
@@ -0,0 +1,133 @@
+-- scheduler.lua
+-- Implementation of a Railway time schedule queue
+-- In contrast to the LuaATC interrupt queue, this one can handle many different
+-- event receivers. This is done by registering a callback with the scheduler
+
+local ln = advtrains.lines
+local sched = {}
+
+local UNITS_THRESH = 10
+local MAX_PER_ITER = 10
+
+local callbacks = {}
+
+-- Register a handler callback to handle scheduler items.
+-- e - a handler identifier (corresponds to "handler" in enqueue() )
+-- func - a function(evtdata) to be executed when a schedule item expires
+-- evtdata - arbitrary data that has been passed into enqueue()
+function sched.register_callback(e, func)
+ callbacks[e] = func
+end
+
+--[[
+{
+ t = <railway time in seconds>
+ e = <handler callback>
+ d = <data table>
+ u = <unit identifier>
+}
+The "unit identifier" is there to prevent schedule overflows. It can be, for example, the position hash
+of a node or a train ID. If the number of schedules for a unit exceeds UNITS_THRESH, further schedules are
+blocked.
+]]--
+local queue = {}
+
+local units_cnt = {}
+
+function sched.load(data)
+ if data then
+ for i,elem in ipairs(data) do
+ table.insert(queue, elem)
+ units_cnt[elem.u] = (units_cnt[elem.u] or 0) + 1
+ end
+ atlog("[lines][scheduler] Loaded the schedule queue,",#data,"items.")
+ end
+end
+function sched.save()
+ return queue
+end
+
+function sched.run()
+ local ctime = ln.rwt.get_time()
+ local cnt = 0
+ local ucn, elem
+ while cnt <= MAX_PER_ITER do
+ elem = queue[1]
+ if elem and elem.t <= ctime then
+ table.remove(queue, 1)
+ if callbacks[elem.e] then
+ -- run it
+ callbacks[elem.e](elem.d)
+ else
+ atwarn("[lines][scheduler] No callback to handle schedule",elem)
+ end
+ cnt=cnt+1
+ ucn = units_cnt[elem.u]
+ if ucn and ucn>0 then
+ units_cnt[elem.u] = ucn - 1
+ end
+ else
+ break
+ end
+ end
+end
+
+-- Enqueue a new scheduled item to be executed at "rwtime"
+-- handler: a string identifying the handler to use (registered with sched.register_callback())
+-- evtdata: Arbitrary Lua data to be passed to the handler callback
+-- unitid: An arbitrary string uniquely identifying the thing that is issuing this enqueue.
+-- used to prevent expotentially growing "scheduler bombs"
+-- unitlim: Custom override for UNITS_THRESH (see there)
+function sched.enqueue(rwtime, handler, evtdata, unitid, unitlim)
+ local qtime = ln.rwt.to_secs(rwtime)
+ assert(type(handler)=="string")
+ assert(type(unitid)=="string")
+ assert(type(unitlim)=="number")
+
+ local cnt=1
+ local ucn, elem
+
+ ucn = (units_cnt[unitid] or 0)
+ local ulim=(unitlim or UNITS_THRESH)
+ if ucn >= ulim then
+ atlog("[lines][scheduler] discarding enqueue for",handler,"(limit",ulim,") because unit",unitid,"has already",ucn,"schedules enqueued")
+ return false
+ end
+
+ while true do
+ elem = queue[cnt]
+ if not elem or elem.t > qtime then
+ table.insert(queue, cnt, {
+ t=qtime,
+ e=handler,
+ d=evtdata,
+ u=unitid,
+ })
+ units_cnt[unitid] = ucn + 1
+ return true
+ end
+ cnt = cnt+1
+ end
+end
+
+-- See enqueue(). Same meaning, except that rwtime is relative to now.
+function sched.enqueue_in(rwtime, handler, evtdata, unitid, unitlim)
+ local ctime = ln.rwt.get_time()
+ local rwtime_s = ln.rwt.to_secs(rwtime)
+ sched.enqueue(ctime + rwtime_s, handler, evtdata, unitid, unitlim)
+end
+
+-- Discards all schedules for unit "unitid" (removes them from the queue)
+function sched.discard_all(unitid)
+ local i = 1
+ while i<=#queue do
+ if queue[i].u == unitid then
+ table.remove(queue,i)
+ else
+ i=i+1
+ end
+ end
+ units_cnt[unitid] = 0
+end
+
+ln.sched = sched
diff --git a/advtrains/advtrains_line_automation/settingtypes.txt b/advtrains/advtrains_line_automation/settingtypes.txt
new file mode 100644
index 0000000..ea3f66e
--- /dev/null
+++ b/advtrains/advtrains_line_automation/settingtypes.txt
@@ -0,0 +1,6 @@
+# This controls how the Railway Time relates to real-world time:
+# *independent - RWT counts independent of real time synchronized to ingame steps. Recommended for singleplayer and ad-hoc servers.
+# *follow_real - RWT is independent of real time, but counts up in real-world time speed
+# *adapt_real - RWT adapts its minute and second to real-world time. When the server is stopped and restarted, this results in a "time jump".
+# Time will jump for 1 cycle (59;59) at maximum.
+advtrains_lines_rwt_realtime (RWT real time adaption) enum independent independent,follow_real,adapt_real \ No newline at end of file
diff --git a/advtrains/advtrains_line_automation/stoprail.lua b/advtrains/advtrains_line_automation/stoprail.lua
new file mode 100644
index 0000000..ee8faac
--- /dev/null
+++ b/advtrains/advtrains_line_automation/stoprail.lua
@@ -0,0 +1,218 @@
+-- stoprail.lua
+-- adds "stop rail". Recognized by lzb. (part of behavior is implemented there)
+
+
+local function to_int(n)
+ --- Disallow floating-point numbers
+ local k = tonumber(n)
+ if k then
+ return math.floor(k)
+ end
+end
+
+local function updatemeta(pos)
+ local meta = minetest.get_meta(pos)
+ local pe = advtrains.encode_pos(pos)
+ local stdata = advtrains.lines.stops[pe]
+ if not stdata then
+ meta:set_string("infotext", "Error")
+ end
+
+ meta:set_string("infotext", "Stn. "..stdata.stn.." T. "..stdata.track)
+end
+
+local door_dropdown = {L=1, R=2, C=3}
+local door_dropdown_rev = {Right="R", Left="L", Closed="C"}
+
+local function show_stoprailform(pos, player)
+ local pe = advtrains.encode_pos(pos)
+ local pname = player:get_player_name()
+ if minetest.is_protected(pos, pname) then
+ minetest.chat_send_player(pname, "Position is protected!")
+ return
+ end
+
+ local stdata = advtrains.lines.stops[pe]
+ if not stdata then
+ advtrains.lines.stops[pe] = {
+ stn="", track="", doors="R", wait=10, ars={default=true}, ddelay=1,speed="M"
+ }
+ stdata = advtrains.lines.stops[pe]
+ end
+
+ local stn = advtrains.lines.stations[stdata.stn]
+ local stnname = stn and stn.name or ""
+ if not stdata.ddelay then
+ stdata.ddelay = 1
+ end
+ if not stdata.speed then
+ stdata.speed = "M"
+ end
+
+ local form = "size[8,7]"
+ form = form.."field[0.5,0.5;7,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]"
+ form = form.."field[0.5,1.5;7,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]"
+ form = form.."field[0.5,2.5;2,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]"
+ form = form.."field[3,2.5;3,1;speed;"..attrans("Departure Speed")..";"..minetest.formspec_escape(stdata.speed).."]"
+ form = form.."label[0.5,3;Door side:]"
+ form = form.."dropdown[0.5,3;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]"
+ form = form.."dropdown[3,3;1.5;reverse;---,Reverse;"..(stdata.reverse and 2 or 1).."]"
+
+ form = form.."field[5,3.5;2,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]"
+ form = form.."field[5,4.5;2,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]"
+
+ form = form.."textarea[0.5,4;4,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]"
+
+ form = form.."button[0.5,6;7,1;save;"..attrans("Save").."]"
+
+ minetest.show_formspec(pname, "at_lines_stop_"..pe, form)
+end
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pname = player:get_player_name()
+ local pe = string.match(formname, "^at_lines_stop_(............)$")
+ local pos = advtrains.decode_pos(pe)
+ if pos then
+ if minetest.is_protected(pos, pname) then
+ minetest.chat_send_player(pname, "Position is protected!")
+ return
+ end
+
+ local stdata = advtrains.lines.stops[pe]
+ if fields.save then
+ if fields.stn and stdata.stn ~= fields.stn then
+ if fields.stn ~= "" then
+ local stn = advtrains.lines.stations[fields.stn]
+ if stn then
+ if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then
+ stdata.stn = fields.stn
+ else
+ minetest.chat_send_player(pname, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner)
+ end
+ else
+ advtrains.lines.stations[fields.stn] = {name = fields.stnname, owner = pname}
+ stdata.stn = fields.stn
+ end
+ end
+ updatemeta(pos)
+ show_stoprailform(pos, player)
+ return
+ end
+ local stn = advtrains.lines.stations[stdata.stn]
+ if stn and fields.stnname and fields.stnname ~= stn.name then
+ if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then
+ stn.name = fields.stnname
+ else
+ minetest.chat_send_player(pname, "Not allowed to edit station name, owned by "..stn.owner)
+ end
+ end
+
+ -- dropdowns
+ if fields.doors then
+ stdata.doors = door_dropdown_rev[fields.doors] or "C"
+ end
+ if fields.reverse then
+ stdata.reverse = fields.reverse == "Reverse"
+ end
+
+
+ if fields.track then
+ stdata.track = fields.track
+ end
+ if fields.wait then
+ stdata.wait = to_int(fields.wait) or 10
+ end
+
+ if fields.ars then
+ stdata.ars = advtrains.interlocking.text_to_ars(fields.ars)
+ end
+
+ if fields.ddelay then
+ stdata.ddelay = to_int(fields.ddelay) or 1
+ end
+ if fields.speed then
+ stdata.speed = to_int(fields.speed) or "M"
+ end
+
+ --TODO: signal
+ updatemeta(pos)
+ show_stoprailform(pos, player)
+ end
+ end
+
+end)
+
+
+local adefunc = function(def, preset, suffix, rotation)
+ return {
+ after_place_node=function(pos)
+ local pe = advtrains.encode_pos(pos)
+ advtrains.lines.stops[pe] = {
+ stn="", track="", doors="R", wait=10
+ }
+ updatemeta(pos)
+ end,
+ after_dig_node=function(pos)
+ local pe = advtrains.encode_pos(pos)
+ advtrains.lines.stops[pe] = nil
+ end,
+ on_rightclick = function(pos, node, player)
+ show_stoprailform(pos, player)
+ end,
+ advtrains = {
+ on_train_approach = function(pos,train_id, train, index)
+ if train.path_cn[index] == 1 then
+ local pe = advtrains.encode_pos(pos)
+ local stdata = advtrains.lines.stops[pe]
+ if stdata and stdata.stn then
+
+ --TODO REMOVE AFTER SOME TIME (only migration)
+ if not stdata.ars then
+ stdata.ars = {default=true}
+ end
+ if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then
+ advtrains.lzb_add_checkpoint(train, index, 2, nil)
+ local stn = advtrains.lines.stations[stdata.stn]
+ local stnname = stn and stn.name or "Unknown Station"
+ train.text_inside = "Next Stop:\n"..stnname
+ end
+ end
+ end
+ end,
+ on_train_enter = function(pos, train_id, train, index)
+ if train.path_cn[index] == 1 then
+ local pe = advtrains.encode_pos(pos)
+ local stdata = advtrains.lines.stops[pe]
+ if not stdata then
+ return
+ end
+
+ if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then
+ local stn = advtrains.lines.stations[stdata.stn]
+ local stnname = stn and stn.name or "Unknown Station"
+
+ -- Send ATC command and set text
+ advtrains.atc.train_set_command(train, "B0 W O"..stdata.doors.." D"..stdata.wait.." OC "..(stdata.reverse and "R" or "").."D"..(stdata.ddelay or 1) .. "S" ..(stdata.speed or "M"), true)
+ train.text_inside = stnname
+ if tonumber(stdata.wait) then
+ minetest.after(tonumber(stdata.wait), function() train.text_inside = "" end)
+ end
+ end
+ end
+ end
+ },
+ }
+end
+
+if minetest.get_modpath("advtrains_train_track") ~= nil then
+ advtrains.register_tracks("default", {
+ nodename_prefix="advtrains_line_automation:dtrack_stop",
+ texture_prefix="advtrains_dtrack_stop",
+ models_prefix="advtrains_dtrack",
+ models_suffix=".b3d",
+ shared_texture="advtrains_dtrack_shared_stop.png",
+ description="Station/Stop Rail",
+ formats={},
+ get_additional_definiton = adefunc,
+ }, advtrains.trackpresets.t_30deg_straightonly)
+end \ No newline at end of file
diff --git a/advtrains/advtrains_line_automation/textures/advtrains_dtrack_shared_stop.png b/advtrains/advtrains_line_automation/textures/advtrains_dtrack_shared_stop.png
new file mode 100644
index 0000000..b6629cf
--- /dev/null
+++ b/advtrains/advtrains_line_automation/textures/advtrains_dtrack_shared_stop.png
Binary files differ
diff --git a/advtrains/advtrains_line_automation/textures/advtrains_dtrack_stop_placer.png b/advtrains/advtrains_line_automation/textures/advtrains_dtrack_stop_placer.png
new file mode 100644
index 0000000..0d1c769
--- /dev/null
+++ b/advtrains/advtrains_line_automation/textures/advtrains_dtrack_stop_placer.png
Binary files differ
diff --git a/advtrains/advtrains_luaautomation/README.txt b/advtrains/advtrains_luaautomation/README.txt
new file mode 100644
index 0000000..287a0bd
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/README.txt
@@ -0,0 +1,288 @@
+
+#### Advtrains - Lua Automation features
+
+This mod offers components that run LUA code and interface with each other through a global environment. It makes complex automated railway systems possible.
+
+### atlatc
+The mod is sometimes abbreviated as 'atlatc'. This stands for AdvTrainsLuaATC. This short name has been chosen for user convenience, since the name of this mod ('advtrains_luaautomation') is very long.
+
+### Privilege
+To perform any operations using this mod (except executing operation panels), players need the "atlatc" privilege.
+This privilege should never be granted to anyone except trusted administrators. Even though the LUA environment is sandboxed, it is still possible to DoS the server by coding infinite loops or requesting expotentially growing interrupts.
+
+### Active and passive
+Active components are these who have LUA code running in them. They are triggered on specific events. Passive components are dumb, they only have a state and can be set to another state, they can't perform actions themselves.
+
+### Environments
+
+Each active component is assigned to an environment. This is where all data are held. Components in different environments can't inferface with each other.
+This system allows multiple independent automation systems to run simultaneously without polluting each other's environment.
+
+/env_create <env_name>
+Create environment with the given name. To be able to do anything, you first need to create an environment. Choose the name wisely, you can't change it afterwards.
+
+/env_setup <env_name>
+Invoke the form to edit the environment's initialization code. For more information, see the section on active components. You can also delete an environment from here.
+
+### Active components
+
+The code of every active component is run on specific events which are explained soon. When run, every variable written that is not local and is no function or userdata is saved over code re-runs and over server restarts. Additionally, the following global variables are defined:
+
+# event
+The variable 'event' contains a table with information on the current event. How this table can look is explained below.
+
+# S
+The variable 'S' contains a table which is shared between all components of the environment. Its contents are persistent over server restarts. May not contain functions, every other value is allowed.
+Example:
+Component 1: S.stuff="foo"
+Component 2: print(S.stuff)
+-> foo
+
+# F
+The variable 'F' also contains a table which is shared between all components of the environment. Its contents are discarded on server shutdown or when the init code gets re-run. Every data type is allowed, even functions.
+The purpose of this table is not to save data, but to provide static value and function definitions. The table should be populated by the init code.
+
+# Standard Lua functions
+The following standard Lua libraries are available:
+string, math, table, os
+The following standard Lua functions are available:
+assert, error, ipairs, pairs, next, select, tonumber, tostring, type, unpack
+
+Every attempt to overwrite any of the predefined values results in an error.
+
+# LuaAutomation-specific global functions
+
+POS(x,y,z)
+Shorthand function to create a position vector {x=?, y=?, z=?} with less characters
+
+In the following functions, all parameters named 'pos' designate a position. You can use either:
+- a default Minetest position vector (like {x=34, y=2, z=-18})
+- the POS(34,2,-18) shorthand
+- A string, the passive component name. See 'passive component naming'.
+
+getstate(pos)
+Get the state of the passive component at position 'pos'. See section on passive components for more info.
+pos can be either a position vector (created by POS()) or a string, the name of this passive component.
+
+setstate(pos, newstate)
+Set the state of the passive component at position 'pos'.
+
+is_passive(pos)
+Checks whether there is a passive component at the position pos (and/or whether a passive component with this name exists)
+
+interrupt(time, message)
+Cause LuaAutomation to trigger an 'int' event on this component after the given time in seconds with the specified 'message' field. 'message' can be of any Lua data type.
+Not available in init code!
+
+interrupt_pos(pos, message)
+Immediately trigger an 'ext_int' event on the active component at position pos. 'message' is like in interrupt().
+USE WITH CARE, or better don't use! Incorrect use can result in expotential growth of interrupts.
+
+digiline_send(channel, message)
+Make this active component send a digiline message on the specified channel.
+Not available in init code!
+
+-- The next 4 functions are available when advtrains_interlocking is enabled: --
+
+can_set_route(pos, route_name)
+Returns whether it is possible to set the route designated by route_name from the signal at pos.
+
+set_route(pos, route_name)
+Requests the given route from the signal at pos. Has the same effect as clicking "Set Route" in the signalling dialog.
+
+cancel_route(pos)
+Cancels the route that is set from the signal at pos. Has the same effect as clicking "Cancel Route" in the signalling dialog.
+
+get_aspect(pos)
+Returns the signal aspect of the signal at pos. A signal aspect has the following format:
+aspect = {
+ main = { -- the next track section in line. Shows blocked for shunt routes
+ free = <boolean>,
+ speed = <int km/h>,
+ },
+ shunt = { -- whether a "shunting allowed" aspect should be shown
+ free = <boolean>,
+ }
+ dst = { -- the aspect of the next main signal on (at end of) route
+ free = <boolean>,
+ speed = <int km/h>,
+ }
+ info = {
+ call_on = <boolean>, -- Call-on route, expect train in track ahead
+ dead_end = <boolean>, -- Route ends on a dead end (e.g. bumper)
+ }
+}
+As of August 2018, only the aspect.main.free field is ever used by the interlocking system.
+
+# Lines
+
+The advtrains_line_automation component adds a few contraptions that should make creating timeable systems easier.
+Part of its functionality is also available in LuaATC:
+
+- rwt.* - all Railway Time functions are included as documented in https://advtrains.de/wiki/doku.php?id=dev:lines:rwt
+
+- schedule(rw_time, msg)
+- schedule_in(rw_dtime, msg)
+Schedules an event of type {type="schedule", schedule=true, msg=msg} at (resp. after) the specified railway time.
+(which can be in any format). You can only schedule one event this way. (uses the new lines-internal scheduler)
+
+## Components and events
+
+The event table is a table of the following format:
+{
+ type = "<type>",
+ <type> = true,
+ ... additional content ...
+}
+You can check for the event type by either using
+if event.type == "wanted" then ...do stuff... end
+or
+if event.wanted then ...do stuff... end
+(if 'wanted' is the event type to check for)
+
+# Init code
+The initialization code is not a component as such, but rather a part of the whole environment. It can (and should) be used to make definitions that other components can refer to.
+Examples:
+A function to define behavior for trains in subway stations:
+function F.station()
+ if event.train then atc_send("B0WOL") end
+ if event.int and event.message="depart" then atc_send("OCD1SM") end
+end
+
+The init code is run whenever the F table needs to be refilled with data. This is the case on server startup and whenever the init code is changed and you choose to run it.
+Functions are run in the environment of the currently active node, regardless of where they were defined. So, the 'event' table always reflects the state of the calling node.
+
+The 'event' table of the init code is always {type="init", init=true}.
+
+# ATC rails
+The Lua-controlled ATC rails are the only components that can actually interface with trains. The following event types are generated:
+
+{type="train", train=true, id="<train_id>"}
+This event is fired when a train enters the rail. The field 'id' is the unique train ID, which is 6-digit random numerical string.
+If the world contains trains from an older advtrains version, this string may be longer and contain a dot (.)
+
+{type="int", int=true, msg=<message>}
+Fired when an interrupt set by the 'interrupt' function runs out. 'message' is the message passed to the interrupt function.
+For backwards compatiblity reasons, <message> is also contained in an event.message field.
+{type="ext_int", ext_int=true, message=<message>}
+Fired when another node called 'interrupt_pos' on this position. 'message' is the message passed to the interrupt_pos function.
+
+{type="digiline", digiline=true, channel=<channel>, msg=<message>}
+Fired when the controller receives a digiline message.
+
+In addition to the default environment functions, the following functions are available:
+
+atc_send(<atc_command>)
+ Sends the specified ATC command to the train and returns true. If there is no train, returns false and does nothing.
+atc_reset()
+ Resets the train's current ATC command. If there is no train, returns false and does nothing.
+atc_arrow
+ Boolean, true when the train is driving in the direction of the arrows of the ATC rail. Nil if there is no train.
+atc_id
+ Train ID of the train currently passing the controller. Nil if there's no train.
+atc_speed
+ Speed of the train, or nil if there is no train.
+atc_set_text_outside(text)
+ Set text shown on the outside of the train. Pass nil to show no text.
+atc_set_text_inside(text)
+ Set text shown to train passengers. Pass nil to show no text.
+get_line()
+ Returns the "Line" property of the train (a string).
+ This can be used to distinguish between trains of different lines and route them appropriately.
+ The interlocking system also uses this property for Automatic Routesetting.
+set_line(line)
+ Sets the "Line" property of the train (a string).
+ If the first digit of this string is a number (0-9), any subway wagons on the train will have this one displayed as line number
+ (where "0" is actually shown as Line 10 on the train)
+get_rc()
+ Returns the "Routingcode" property of the train (a string).
+ The interlocking system uses this property for Automatic Routesetting.
+set_rc(routingcode)
+ Sets the "Routingcode" property of the train (a string).
+ The interlocking system uses this property for Automatic Routesetting.
+split_at_index(index, command)
+ Splits the train at the specified index, into a train with index-1 wagons and a second train starting with the index-th wagon.
+ command specifies an atc command to be sent to the second train after decoupling.
+split_at_fc(command, len)
+ Splits the train in such a way that all cars with non-empty
+ current FC of the first part of the train have the same FC. The
+ command specified is sent to the rear part, as with
+ split_at_index. It returns the fc of the cars of the first part.
+
+ The optional argument len specifies the maximum length for the
+ first part of the train. Say, we have len=3, and the train has ""
+ "" "foo" "foo" "foo" "bar", then the first train part will be ""
+ "" "foo".
+
+ Example : Train has current FCs "" "" "foo" "bar" "foo"
+ Result: first train: "" "" "foo"; second train: "bar" "foo"
+ The command returns "foo" in this case
+split_off_locomotive(command, len)
+ Splits off the locomotives at the front of the train, which are
+ identified by an empty FC. command specifies the command to be
+ executed by the rear half of the train.
+
+ The optional argument len specifies the maximum length for the
+ first part of the train. Say, we have len=3, and the train has ""
+ "" "foo" "foo" "foo" "bar", then the first train part will be ""
+ "" "foo".
+step_fc()
+ Steps the FCs of all train cars forward. FCs are composed of codes
+ separated by exclamation marks (!), for instance
+ "foo!bar!baz". Each wagon has a current FC, indicating its next
+ destination. Stepping the freight code forward, selects the next
+ code after the !. If the end of the string is reached, then the
+ first code is selected, except if the string ends with a question
+ mark, then the order is reversed.
+
+train_length()
+ returns the number of cars the train is composed of
+set_autocouple()
+ Sets the train into autocouple mode
+unset_autocouple()
+ Unsets autocouple mode
+
+set_shunt(), unset_shunt()
+ deprecated aliases for set_autocouple() and unset_autocouple(), will be removed from a later release.
+
+
+# Operator panel
+This simple node executes its actions when punched. It can be used to change a switch and update the corresponding signals or similar applications.
+
+The event fired is {type="punch", punch=true} by default. In case of an interrupt or a digiline message, the events are similar to the ones of the ATC rail.
+
+### Passive components
+
+All passive components can be interfaced with the setstate and getstate functions(see above).
+Below, each apperance is mapped to the "state" of that node.
+
+## Signals
+The light signals are interfaceable, the analog signals are not.
+"green" - Signal shows green light
+"red" - Signal shows red light
+
+## Switches
+All default rail switches are interfaceable, independent of orientation.
+"cr" - The switch is set in the direction that is not straight.
+"st" - The switch is set in the direction that is straight.
+
+## Mesecon Switch
+The Mesecon switch can be switched using LuaAutomation. Note that this is not possible on levers, only the full-node 'Switch' block.
+"on" - the switch is switched on
+"off" - the switch is switched off
+
+##Andrew's Cross
+"on" - it blinks
+"off" - it does not blink
+
+### Passive component naming
+You can assign names to passive components using the Passive Component Naming tool.
+Once you set a name for any component, you can reference it by that name in the getstate() and setstate() functions, like this:
+(Imagine a signal that you have named "Stn_P1_out" at position (1,2,3) )
+setstate("Stn_P1_out", "green") instead of setstate(POS(1,2,3), "green")
+This way, you don't need to memorize positions.
+
+PC-Naming can also be used to name interlocking signals for route setting via the set_route() functions. IMPORTANT: The "Signal Name" set in the
+signalling formspec is completely independent and can NOT be used to look up the position, you need to explicitly use the PCNaming tool.
+
+--TODO: Ein paar mehr Codebeispiele wären schön, insbesondere mit os.date und so...
diff --git a/advtrains/advtrains_luaautomation/active_common.lua b/advtrains/advtrains_luaautomation/active_common.lua
new file mode 100644
index 0000000..dac81b3
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/active_common.lua
@@ -0,0 +1,175 @@
+
+
+local ac = {nodes={}}
+
+function ac.load(data)
+ if data then
+ ac.nodes=data.nodes
+ end
+end
+function ac.save()
+ return {nodes = ac.nodes}
+end
+
+function ac.after_place_node(pos, player)
+ local meta=minetest.get_meta(pos)
+ meta:set_string("formspec", ac.getform(pos, meta))
+ meta:set_string("infotext", "LuaAutomation component, unconfigured.")
+ local ph=minetest.pos_to_string(pos)
+ --just get first available key!
+ for en,_ in pairs(atlatc.envs) do
+ ac.nodes[ph]={env=en}
+ return
+ end
+end
+function ac.getform(pos, meta_p)
+ local meta = meta_p or minetest.get_meta(pos)
+ local envs_asvalues={}
+
+ local ph=minetest.pos_to_string(pos)
+ local nodetbl = ac.nodes[ph]
+ local env, code, err = nil, "", ""
+ if nodetbl then
+ code=nodetbl.code or ""
+ err=nodetbl.err or ""
+ env=nodetbl.env or ""
+ end
+ local sel = 1
+ for n,_ in pairs(atlatc.envs) do
+ envs_asvalues[#envs_asvalues+1]=minetest.formspec_escape(n)
+ if n==env then
+ sel=#envs_asvalues
+ end
+ end
+ local form = "size[10,10]dropdown[0,0;3;env;"..table.concat(envs_asvalues, ",")..";"..sel.."]"
+ .."button[4,0;2,1;save;Save]button[7,0;2,1;cle;Clear local env] textarea[0.2,1;10,10;code;Code;"..minetest.formspec_escape(code).."]"
+ .."label[0,9.8;"..err.."]"
+ return form
+end
+
+function ac.after_dig_node(pos, node, player)
+ advtrains.invalidate_all_paths(pos)
+ advtrains.ndb.clear(pos)
+ local ph=minetest.pos_to_string(pos)
+ ac.nodes[ph]=nil
+end
+
+function ac.on_receive_fields(pos, formname, fields, player)
+ if not minetest.check_player_privs(player:get_player_name(), {atlatc=true}) then
+ minetest.chat_send_player(player:get_player_name(), "Missing privilege: atlatc - Operation cancelled!")
+ return
+ end
+
+ local meta=minetest.get_meta(pos)
+ local ph=minetest.pos_to_string(pos)
+ local nodetbl = ac.nodes[ph] or {}
+ --if fields.quit then return end
+ if fields.env then
+ nodetbl.env=fields.env
+ end
+ if fields.code then
+ nodetbl.code=fields.code
+ end
+ if fields.save then
+ -- reset certain things
+ nodetbl.err=nil
+ if advtrains.lines and advtrains.lines.sched then
+ -- discard all schedules for this node
+ advtrains.lines.sched.discard_all(advtrains.encode_pos(pos))
+ end
+ end
+ if fields.cle then
+ nodetbl.data={}
+ end
+
+ ac.nodes[ph]=nodetbl
+
+ meta:set_string("formspec", ac.getform(pos, meta))
+ if nodetbl.env then
+ meta:set_string("infotext", "LuaAutomation component, assigned to environment '"..nodetbl.env.."'")
+ else
+ meta:set_string("infotext", "LuaAutomation component, invalid enviroment set!")
+ end
+end
+
+function ac.run_in_env(pos, evtdata, customfct_p)
+ local ph=minetest.pos_to_string(pos)
+ local nodetbl = ac.nodes[ph]
+ if not nodetbl then
+ atwarn("LuaAutomation component at",ph,": Data not in memory! Please visit component and click 'Save'!")
+ return
+ end
+
+ local meta
+ if minetest.get_node_or_nil(pos) then
+ meta=minetest.get_meta(pos)
+ end
+
+ if not nodetbl.env or not atlatc.envs[nodetbl.env] then
+ atwarn("LuaAutomation component at",ph,": Not an existing environment: "..(nodetbl.env or "<nil>"))
+ return false
+ end
+ if not nodetbl.code or nodetbl.code=="" then
+ atwarn("LuaAutomation component at",ph,": No code to run! (insert -- to suppress warning)")
+ return false
+ end
+
+ local customfct=customfct_p or {}
+ -- add interrupt function
+ customfct.interrupt=function(t, imesg)
+ assertt(t, "number")
+ assert(t >= 0)
+ atlatc.interrupt.add(t, pos, {type="int", int=true, message=imesg, msg=imesg}) --Compatiblity "message" field.
+ end
+ -- add digiline_send function, if digiline is loaded
+ if minetest.global_exists("digiline") then
+ customfct.digiline_send=function(channel, msg)
+ assertt(channel, "string")
+ digiline:receptor_send(pos, digiline.rules.default, channel, msg)
+ end
+ end
+ -- add lines scheduler if enabled
+ if advtrains.lines and advtrains.lines.sched then
+ customfct.schedule = function(rwtime, msg)
+ return advtrains.lines.sched.enqueue(rwtime, "atlatc_env", {pos=pos, msg=msg}, advtrains.encode_pos(pos), 1)
+ end
+ customfct.schedule_in = function(rwtime, msg)
+ return advtrains.lines.sched.enqueue_in(rwtime, "atlatc_env", {pos=pos, msg=msg}, advtrains.encode_pos(pos), 1)
+ end
+ end
+
+ local datain=nodetbl.data or {}
+ local succ, dataout = atlatc.envs[nodetbl.env]:execute_code(datain, nodetbl.code, evtdata, customfct)
+ if succ then
+ atlatc.active.nodes[ph].data=atlatc.remove_invalid_data(dataout)
+ else
+ atlatc.active.nodes[ph].err=dataout
+ atwarn("LuaAutomation ATC interface rail at",ph,": LUA Error:",dataout)
+ if meta then
+ meta:set_string("infotext", "LuaAutomation ATC interface rail, ERROR:"..dataout)
+ end
+ end
+ if meta then
+ meta:set_string("formspec", ac.getform(pos, meta))
+ end
+end
+
+function ac.on_digiline_receive(pos, node, channel, msg)
+ atlatc.interrupt.add(0, pos, {type="digiline", digiline=true, channel = channel, msg = msg})
+end
+
+if advtrains.lines and advtrains.lines.sched then
+ advtrains.lines.sched.register_callback("atlatc_env", function(data)
+ -- This adds another interrupt to the atlatc queue... there might be a better way
+ atlatc.interrupt.add(0, data.pos, {type="schedule",schedule=true, msg=data.msg})
+ end)
+end
+
+ac.trackdef_advtrains_defs = {
+ on_train_enter = function(pos, train_id)
+ --do async. Event is fired in train steps
+ atlatc.interrupt.add(0, pos, {type="train", train=true, id=train_id})
+ end,
+}
+
+atlatc.active=ac
diff --git a/advtrains/advtrains_luaautomation/atc_rail.lua b/advtrains/advtrains_luaautomation/atc_rail.lua
new file mode 100644
index 0000000..6083dfc
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/atc_rail.lua
@@ -0,0 +1,194 @@
+-- atc_rail.lua
+-- registers and handles the ATC rail. Active component.
+-- This is the only component that can interface with trains, so train interface goes here too.
+
+--Using subtable
+local r={}
+
+function r.fire_event(pos, evtdata)
+
+ local ph=minetest.pos_to_string(pos)
+ local railtbl = atlatc.active.nodes[ph]
+
+ if not railtbl then
+ atwarn("LuaAutomation ATC interface rail at",ph,": Data not in memory! Please visit position and click 'Save'!")
+ return
+ end
+
+
+ local arrowconn = railtbl.arrowconn
+ if not arrowconn then
+ atwarn("LuaAutomation ATC interface rail at",ph,": Incomplete Data! Please visit position and click 'Save'!")
+ return
+ end
+
+ --prepare ingame API for ATC. Regenerate each time since pos needs to be known
+ --If no train, then return false.
+ local train_id=advtrains.get_train_at_pos(pos)
+ local train, atc_arrow, tvel
+ if train_id then train=advtrains.trains[train_id] end
+ if train then
+ if not train.path then
+ --we happened to get in between an invalidation step
+ --delay
+ atlatc.interrupt.add(0,pos,evtdata)
+ return
+ end
+ local index = advtrains.path_lookup(train, pos)
+
+ local iconnid = 1
+ if index then
+ iconnid = train.path_cn[index]
+ else
+ atwarn("ATC rail at", pos, ": Rail not on train's path! Can't determine arrow direction. Assuming +!")
+ end
+ atc_arrow = iconnid == 1
+
+ tvel=train.velocity
+ end
+ local customfct={
+ atc_send = function(cmd)
+ if not train_id then return false end
+ assertt(cmd, "string")
+ advtrains.atc.train_set_command(train, cmd, atc_arrow)
+ return true
+ end,
+ split_at_index = function(index, cmd)
+ if not train_id then return false end
+ assertt(cmd, "string")
+ if type(index) ~= "number" then
+ return false
+ end
+ local new_id = advtrains.split_train_at_index(train, index)
+ if new_id then
+ minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
+ return true
+ end
+ return false
+ end,
+ split_at_fc = function(cmd, len)
+ assertt(cmd, "string")
+ if not train_id then return false end
+ local new_id, fc = advtrains.split_train_at_fc(train, false, len)
+ if new_id then
+ minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
+ end
+ return fc or ""
+ end,
+ split_off_locomotive = function(cmd, len)
+ assertt(cmd, "string")
+ if not train_id then return false end
+ local new_id, fc = advtrains.split_train_at_fc(train, true, len)
+ if new_id then
+ minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
+ end
+ end,
+ train_length = function ()
+ if not train_id then return false end
+ return #train.trainparts
+ end,
+ step_fc = function()
+ if not train_id then return false end
+ advtrains.train_step_fc(train)
+ end,
+ set_shunt = function()
+ if not train_id then return false end
+ train.autocouple = true
+ end,
+ unset_shunt = function()
+ if not train_id then return false end
+ train.autocouple = nil
+ end,
+ set_autocouple = function ()
+ if not train_id then return false end
+ train.autocouple = true
+ end,
+ unset_autocouple = function ()
+ if not train_id then return false end
+ train.autocouple = nil
+ end,
+ set_line = function(line)
+ if type(line)~="string" and type(line)~="number" then
+ return false
+ end
+ train.line = line .. ""
+ minetest.after(0, advtrains.invalidate_path, train_id)
+ return true
+ end,
+ get_line = function()
+ return train.line
+ end,
+ set_rc = function(rc)
+ if type(rc)~="string"then
+ return false
+ end
+ train.routingcode = rc
+ minetest.after(0, advtrains.invalidate_path, train_id)
+ return true
+ end,
+ get_rc = function()
+ return train.routingcode
+ end,
+ atc_reset = function(cmd)
+ if not train_id then return false end
+ assertt(cmd, "string")
+ advtrains.atc.train_reset_command(train)
+ return true
+ end,
+ atc_arrow = atc_arrow,
+ atc_id = train_id,
+ atc_speed = tvel,
+ atc_set_text_outside = function(text)
+ if not train_id then return false end
+ if text then assertt(text, "string") end
+ advtrains.trains[train_id].text_outside=text
+ return true
+ end,
+ atc_set_text_inside = function(text)
+ if not train_id then return false end
+ if text then assertt(text, "string") end
+ advtrains.trains[train_id].text_inside=text
+ return true
+ end,
+ }
+
+ atlatc.active.run_in_env(pos, evtdata, customfct)
+
+end
+
+if minetest.get_modpath("advtrains_train_track") ~= nil then
+ advtrains.register_tracks("default", {
+ nodename_prefix="advtrains_luaautomation:dtrack",
+ texture_prefix="advtrains_dtrack_atc",
+ models_prefix="advtrains_dtrack",
+ models_suffix=".b3d",
+ shared_texture="advtrains_dtrack_shared_atc.png",
+ description=atltrans("LuaAutomation ATC Rail"),
+ formats={},
+ get_additional_definiton = function(def, preset, suffix, rotation)
+ return {
+ after_place_node = atlatc.active.after_place_node,
+ after_dig_node = atlatc.active.after_dig_node,
+ on_receive_fields = function(pos, ...)
+ atlatc.active.on_receive_fields(pos, ...)
+ --set arrowconn (for ATC)
+ local ph=minetest.pos_to_string(pos)
+ local _, conns=advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
+ atlatc.active.nodes[ph].arrowconn=conns[1].c
+ end,
+ advtrains = atlatc.active.trackdef_advtrains_defs,
+ luaautomation = {
+ fire_event=r.fire_event
+ },
+ digiline = {
+ receptor = {},
+ effector = {
+ action = atlatc.active.on_digiline_receive
+ },
+ },
+ }
+ end,
+ }, advtrains.trackpresets.t_30deg_straightonly)
+end
+
+atlatc.rail = r
diff --git a/advtrains/advtrains_luaautomation/chatcmds.lua b/advtrains/advtrains_luaautomation/chatcmds.lua
new file mode 100644
index 0000000..2d0c69d
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/chatcmds.lua
@@ -0,0 +1,84 @@
+--chatcmds.lua
+--Registers commands to modify the init and step code for LuaAutomation
+
+--position helper.
+--punching a node will result in that position being saved and inserted into a text field on the top of init form.
+local punchpos={}
+
+minetest.register_on_punchnode(function(pos, node, player, pointed_thing)
+ local pname=player:get_player_name()
+ punchpos[pname]=pos
+end)
+
+local function get_init_form(env, pname)
+ local err = env.init_err or ""
+ local code = env.init_code or ""
+ local ppos=punchpos[pname]
+ local pp=""
+ if ppos then
+ pp="POS"..minetest.pos_to_string(ppos)
+ end
+ local form = "size[10,10]button[0,0;2,1;run;Run InitCode]button[2,0;2,1;cls;Clear S]"
+ .."button[4,0;2,1;save;Save] button[6,0;2,1;del;Delete Env.] field[8.1,0.5;2,1;punchpos;Last punched position;"..pp.."]"
+ .."textarea[0.2,1;10,10;code;Environment initialization code;"..minetest.formspec_escape(code).."]"
+ .."label[0,9.8;"..err.."]"
+ return form
+end
+
+core.register_chatcommand("env_setup", {
+ params = "<environment name>",
+ description = "Set up and modify AdvTrains LuaAutomation environment",
+ privs = {atlatc=true},
+ func = function(name, param)
+ local env=atlatc.envs[param]
+ if not env then return false,"Invalid environment name!" end
+ minetest.show_formspec(name, "atlatc_envsetup_"..param, get_init_form(env, name))
+ return true
+ end,
+})
+
+core.register_chatcommand("env_create", {
+ params = "<environment name>",
+ description = "Create an AdvTrains LuaAutomation environment",
+ privs = {atlatc=true},
+ func = function(name, param)
+ if not param or param=="" then return false, "Name required!" end
+ if atlatc.envs[param] then return false, "Environment already exists!" end
+ atlatc.envs[param] = atlatc.env_new(param)
+ return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!"
+ end,
+})
+
+
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+
+ local pname=player:get_player_name()
+ if not minetest.check_player_privs(pname, {atlatc=true}) then return end
+
+ local envname=string.match(formname, "^atlatc_delconfirm_(.+)$")
+ if envname and fields.sure=="YES" then
+ atlatc.envs[envname]=nil
+ minetest.chat_send_player(pname, "Environment deleted!")
+ return
+ end
+
+ envname=string.match(formname, "^atlatc_envsetup_(.+)$")
+ if not envname then return end
+
+ local env=atlatc.envs[envname]
+ if not env then return end
+
+ if fields.del then
+ minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;"..minetest.formspec_escape("SURE TO DELETE ENVIRONMENT "..envname.."? Type YES (all uppercase) to continue or just quit form to cancel.")..";]")
+ return
+ end
+
+ env.init_err=nil
+ if fields.code then
+ env.init_code=fields.code
+ end
+ if fields.run then
+ env:run_initcode()
+ minetest.show_formspec(pname, formname, get_init_form(env, pname))
+ end
+end)
diff --git a/advtrains/advtrains_luaautomation/depends.txt b/advtrains/advtrains_luaautomation/depends.txt
new file mode 100644
index 0000000..d5523e1
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/depends.txt
@@ -0,0 +1,4 @@
+advtrains
+advtrains_interlocking?
+advtrains_line_automation?
+mesecons_switch? \ No newline at end of file
diff --git a/advtrains/advtrains_luaautomation/environment.lua b/advtrains/advtrains_luaautomation/environment.lua
new file mode 100644
index 0000000..3e7787b
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/environment.lua
@@ -0,0 +1,362 @@
+-------------
+-- lua sandboxed environment
+
+-- function to cross out functions and userdata.
+-- modified from dump()
+function atlatc.remove_invalid_data(o, nested)
+ if o==nil then return nil end
+ local valid_dt={["nil"]=true, boolean=true, number=true, string=true}
+ if type(o) ~= "table" then
+ --check valid data type
+ if not valid_dt[type(o)] then
+ return nil
+ end
+ return o
+ end
+ -- Contains table -> true/nil of currently nested tables
+ nested = nested or {}
+ if nested[o] then
+ return nil
+ end
+ nested[o] = true
+ for k, v in pairs(o) do
+ v = atlatc.remove_invalid_data(v, nested)
+ end
+ nested[o] = nil
+ return o
+end
+
+
+local env_proto={
+ load = function(self, envname, data)
+ self.name=envname
+ self.sdata=data.sdata and atlatc.remove_invalid_data(data.sdata) or {}
+ self.fdata={}
+ self.init_code=data.init_code or ""
+ self.step_code=data.step_code or ""
+ end,
+ save = function(self)
+ -- throw any function values out of the sdata table
+ self.sdata = atlatc.remove_invalid_data(self.sdata)
+ return {sdata = self.sdata, init_code=self.init_code, step_code=self.step_code}
+ end,
+}
+
+--Environment
+--Code modified from mesecons_luacontroller (credit goes to Jeija and mesecons contributors)
+
+local safe_globals = {
+ "assert", "error", "ipairs", "next", "pairs", "select",
+ "tonumber", "tostring", "type", "unpack", "_VERSION"
+}
+
+--print is actually minetest.chat_send_all()
+--using advtrains.print_concat_table because it's cool
+local function safe_print(t, ...)
+ local str=advtrains.print_concat_table({t, ...})
+ minetest.log("action", "[atlatc] "..str)
+ minetest.chat_send_all(str)
+end
+
+local function safe_date(f, t)
+ if not f then
+ -- fall back to old behavior
+ return(os.date("*t",os.time()))
+ else
+ --pass parameters
+ return os.date(f,t)
+ end
+end
+
+-- string.rep(str, n) with a high value for n can be used to DoS
+-- the server. Therefore, limit max. length of generated string.
+local function safe_string_rep(str, n)
+ if #str * n > 2000 then
+ debug.sethook() -- Clear hook
+ error("string.rep: string length overflow", 2)
+ end
+
+ return string.rep(str, n)
+end
+
+-- string.find with a pattern can be used to DoS the server.
+-- Therefore, limit string.find to patternless matching.
+-- Note: Disabled security since there are enough security leaks and this would be unneccessary anyway to DoS the server
+local function safe_string_find(...)
+ --if (select(4, ...)) ~= true then
+ -- debug.sethook() -- Clear hook
+ -- error("string.find: 'plain' (fourth parameter) must always be true for security reasons.")
+ --end
+
+ return string.find(...)
+end
+
+local mp=minetest.get_modpath("advtrains_luaautomation")
+
+local static_env = {
+ --core LUA functions
+ print = safe_print,
+ string = {
+ byte = string.byte,
+ char = string.char,
+ format = string.format,
+ len = string.len,
+ lower = string.lower,
+ upper = string.upper,
+ rep = safe_string_rep,
+ reverse = string.reverse,
+ sub = string.sub,
+ find = safe_string_find,
+ },
+ math = {
+ abs = math.abs,
+ acos = math.acos,
+ asin = math.asin,
+ atan = math.atan,
+ atan2 = math.atan2,
+ ceil = math.ceil,
+ cos = math.cos,
+ cosh = math.cosh,
+ deg = math.deg,
+ exp = math.exp,
+ floor = math.floor,
+ fmod = math.fmod,
+ frexp = math.frexp,
+ huge = math.huge,
+ ldexp = math.ldexp,
+ log = math.log,
+ log10 = math.log10,
+ max = math.max,
+ min = math.min,
+ modf = math.modf,
+ pi = math.pi,
+ pow = math.pow,
+ rad = math.rad,
+ random = math.random,
+ sin = math.sin,
+ sinh = math.sinh,
+ sqrt = math.sqrt,
+ tan = math.tan,
+ tanh = math.tanh,
+ },
+ table = {
+ concat = table.concat,
+ insert = table.insert,
+ maxn = table.maxn,
+ remove = table.remove,
+ sort = table.sort,
+ },
+ os = {
+ clock = os.clock,
+ difftime = os.difftime,
+ time = os.time,
+ date = safe_date,
+ },
+ POS = function(x,y,z) return {x=x, y=y, z=z} end,
+ getstate = advtrains.getstate,
+ setstate = advtrains.setstate,
+ is_passive = advtrains.is_passive,
+ --interrupts are handled per node, position unknown. (same goes for digilines)
+ --however external interrupts can be set here.
+ interrupt_pos = function(parpos, imesg)
+ local pos=atlatc.pcnaming.resolve_pos(parpos)
+ atlatc.interrupt.add(0, pos, {type="ext_int", ext_int=true, message=imesg})
+ end,
+}
+
+-- If interlocking is present, enable route setting functions
+if advtrains.interlocking then
+ local function gen_checks(signal, route_name, noroutesearch)
+ assertt(route_name, "string")
+ local pos = atlatc.pcnaming.resolve_pos(signal)
+ local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos)
+ if not sigd then
+ error("There's no signal at "..minetest.pos_to_string(pos))
+ end
+ local tcbs = advtrains.interlocking.db.get_tcbs(sigd)
+ if not tcbs then
+ error("Inconsistent configuration, no tcbs for signal at "..minetest.pos_to_string(pos))
+ end
+
+ local routeid, route
+ if not noroutesearch then
+ for routeidt, routet in ipairs(tcbs.routes) do
+ if routet.name == route_name then
+ routeid = routeidt
+ route = routet
+ break
+ end
+ end
+ if not route then
+ error("No route called "..route_name.." at "..minetest.pos_to_string(pos))
+ end
+ end
+ return pos, sigd, tcbs, routeid, route
+ end
+
+
+ static_env.can_set_route = function(signal, route_name)
+ local pos, sigd, tcbs, routeid, route = gen_checks(signal, route_name)
+ -- if route is already set on signal, return whether it's committed
+ if tcbs.routeset == routeid then
+ return tcbs.route_committed
+ end
+ -- actually try setting route (parameter 'true' designates try-run
+ local ok = advtrains.interlocking.route.set_route(sigd, route, true)
+ return ok
+ end
+ static_env.set_route = function(signal, route_name)
+ local pos, sigd, tcbs, routeid, route = gen_checks(signal, route_name)
+ return advtrains.interlocking.route.update_route(sigd, tcbs, routeid)
+ end
+ static_env.cancel_route = function(signal)
+ local pos, sigd, tcbs, routeid, route = gen_checks(signal, "", true)
+ return advtrains.interlocking.route.update_route(sigd, tcbs, nil, true)
+ end
+ static_env.get_aspect = function(signal)
+ local pos = atlatc.pcnaming.resolve_pos(signal)
+ return advtrains.interlocking.signal_get_aspect(pos)
+ end
+ static_env.set_aspect = function(signal, asp)
+ local pos = atlatc.pcnaming.resolve_pos(signal)
+ return advtrains.interlocking.signal_set_aspect(pos)
+ end
+end
+
+-- Lines-specific:
+if advtrains.lines then
+ local atlrwt = advtrains.lines.rwt
+ static_env.rwt = {
+ now = atlrwt.now,
+ new = atlrwt.new,
+ copy = atlrwt.copy,
+ to_table = atlrwt.to_table,
+ to_secs = atlrwt.to_secs,
+ to_string = atlrwt.to_string,
+ add = atlrwt.add,
+ diff = atlrwt.diff,
+ sub = atlrwt.sub,
+ adj_diff = atlrwt.adj_diff,
+ adjust_cycle = atlrwt.adjust_cycle,
+ adjust = atlrwt.adjust,
+ to_string = atlrwt.to_string,
+ get_time_until = atlrwt.get_time_until,
+ next_rpt = atlrwt.next_rpt,
+ last_rpt = atlrwt.last_rpt,
+ time_from_last_rpt = atlrwt.time_from_last_rpt,
+ time_to_next_rpt = atlrwt.time_to_next_rpt,
+ }
+end
+
+for _, name in pairs(safe_globals) do
+ static_env[name] = _G[name]
+end
+
+
+--The environment all code calls get is a table that has set static_env as metatable.
+--In general, every variable is local to a single code chunk, but kept persistent over code re-runs. Data is also saved, but functions and userdata and circular references are removed
+--Init code and step code's environments are not saved
+-- S - Table that can contain any save data global to the environment. Will be saved statically. Can't contain functions or userdata or circular references.
+-- F - Table global to the environment, can contain volatile data that is deleted when server quits.
+-- The init code should populate this table with functions and other definitions.
+
+local proxy_env={}
+--proxy_env gets a new metatable in every run, but is the shared environment of all functions ever defined.
+
+-- returns: true, fenv if successful; nil, error if error
+function env_proto:execute_code(localenv, code, evtdata, customfct)
+ local metatbl ={
+ __index = function(t, i)
+ if i=="S" then
+ return self.sdata
+ elseif i=="F" then
+ return self.fdata
+ elseif i=="event" then
+ return evtdata
+ elseif customfct and customfct[i] then
+ return customfct[i]
+ elseif localenv and localenv[i] then
+ return localenv[i]
+ end
+ return static_env[i]
+ end,
+ __newindex = function(t, i, v)
+ if i=="S" or i=="F" or i=="event" or (customfct and customfct[i]) or static_env[i] then
+ debug.sethook()
+ error("Trying to overwrite environment contents")
+ end
+ localenv[i]=v
+ end,
+ }
+ setmetatable(proxy_env, metatbl)
+ local fun, err=loadstring(code)
+ if not fun then
+ return false, err
+ end
+
+ setfenv(fun, proxy_env)
+ local succ, data = pcall(fun)
+ if succ then
+ data=localenv
+ end
+ return succ, data
+end
+
+function env_proto:run_initcode()
+ if self.init_code and self.init_code~="" then
+ local old_fdata=self.fdata
+ self.fdata = {}
+ atprint("[atlatc]Running initialization code for environment '"..self.name.."'")
+ local succ, err = self:execute_code({}, self.init_code, {type="init", init=true})
+ if not succ then
+ atwarn("[atlatc]Executing InitCode for '"..self.name.."' failed:"..err)
+ self.init_err=err
+ if old_fdata then
+ self.fdata=old_fdata
+ atwarn("[atlatc]The 'F' table has been restored to the previous state.")
+ end
+ end
+ end
+end
+function env_proto:run_stepcode()
+ if self.step_code and self.step_code~="" then
+ local succ, err = self:execute_code({}, self.step_code, nil, {})
+ if not succ then
+ --TODO
+ end
+ end
+end
+
+--- class interface
+
+function atlatc.env_new(name)
+ local newenv={
+ name=name,
+ init_code="",
+ step_code="",
+ sdata={}
+ }
+ setmetatable(newenv, {__index=env_proto})
+ return newenv
+end
+function atlatc.env_load(name, data)
+ local newenv={}
+ setmetatable(newenv, {__index=env_proto})
+ newenv:load(name, data)
+ return newenv
+end
+
+function atlatc.run_initcode()
+ for envname, env in pairs(atlatc.envs) do
+ env:run_initcode()
+ end
+end
+function atlatc.run_stepcode()
+ for envname, env in pairs(atlatc.envs) do
+ env:run_stepcode()
+ end
+end
+
+
+
+
diff --git a/advtrains/advtrains_luaautomation/init.lua b/advtrains/advtrains_luaautomation/init.lua
new file mode 100644
index 0000000..eca5633
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/init.lua
@@ -0,0 +1,109 @@
+-- advtrains_luaautomation/init.lua
+-- Lua automation features for advtrains
+-- Uses global table 'atlatc' (AdvTrains_LuaATC)
+
+-- Boilerplate to support localized strings if intllib mod is installed.
+if intllib then
+ atltrans = intllib.Getter()
+else
+ atltrans = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
+end
+
+--Privilege
+--Only trusted players should be enabled to build stuff which can break the server.
+
+atlatc = { envs = {}}
+
+minetest.register_privilege("atlatc", { description = "Player can place and modify LUA ATC components. Grant with care! Allows to execute bad LUA code.", give_to_singleplayer = false, default= false })
+
+--assertt helper. error if a variable is not of a type
+function assertt(var, typ)
+ if type(var)~=typ then
+ error("Assertion failed, variable has to be of type "..typ)
+ end
+end
+
+local mp=minetest.get_modpath("advtrains_luaautomation")
+if not mp then
+ error("Mod name error: Mod folder is not named 'advtrains_luaautomation'!")
+end
+dofile(mp.."/environment.lua")
+dofile(mp.."/interrupt.lua")
+dofile(mp.."/active_common.lua")
+dofile(mp.."/atc_rail.lua")
+dofile(mp.."/operation_panel.lua")
+dofile(mp.."/pcnaming.lua")
+
+dofile(mp.."/chatcmds.lua")
+
+
+local filename=minetest.get_worldpath().."/advtrains_luaautomation"
+
+function atlatc.load()
+ local file, err = io.open(filename, "r")
+ if not file then
+ minetest.log("warning", " Failed to read advtrains_luaautomation save data from file "..filename..": "..(err or "Unknown Error"))
+ minetest.log("warning", " (this is normal when first enabling advtrains on this world)")
+ else
+ atprint("luaautomation reading file:",filename)
+ local tbl = minetest.deserialize(file:read("*a"))
+ if type(tbl) == "table" then
+ if tbl.version==1 then
+ for envname, data in pairs(tbl.envs) do
+ atlatc.envs[envname]=atlatc.env_load(envname, data)
+ end
+ atlatc.active.load(tbl.active)
+ atlatc.interrupt.load(tbl.interrupt)
+ atlatc.pcnaming.load(tbl.pcnaming)
+ end
+ else
+ minetest.log("error", " Failed to read advtrains_luaautomation save data from file "..filename..": Not a table!")
+ end
+ file:close()
+ end
+ -- run init code of all environments
+ atlatc.run_initcode()
+end
+
+
+atlatc.save = function()
+ --versions:
+ -- 1 - Initial save format.
+
+ local envdata={}
+ for envname, env in pairs(atlatc.envs) do
+ envdata[envname]=env:save()
+ end
+ local save_tbl={
+ version = 1,
+ envs=envdata,
+ active = atlatc.active.save(),
+ interrupt = atlatc.interrupt.save(),
+ pcnaming = atlatc.pcnaming.save(),
+ }
+
+ local datastr = minetest.serialize(save_tbl)
+ if not datastr then
+ minetest.log("error", " Failed to save advtrains_luaautomation save data to file "..filename..": Can't serialize!")
+ return
+ end
+ local file, err = io.open(filename, "w")
+ if err then
+ minetest.log("error", " Failed to save advtrains_luaautomation save data to file "..filename..": "..(err or "Unknown Error"))
+ return
+ end
+ file:write(datastr)
+ file:close()
+end
+
+
+-- globalstep for step code
+local timer, step_int=0, 2
+
+function atlatc.mainloop_stepcode(dtime)
+ timer=timer+dtime
+ if timer>step_int then
+ timer=0
+ atlatc.run_stepcode()
+ end
+end
diff --git a/advtrains/advtrains_luaautomation/interrupt.lua b/advtrains/advtrains_luaautomation/interrupt.lua
new file mode 100644
index 0000000..525c3b4
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/interrupt.lua
@@ -0,0 +1,48 @@
+-- interrupt.lua
+-- implements interrupt queue
+
+--to be saved: pos and evtdata
+local iq={}
+local queue={}
+local timer=0
+local run=false
+
+function iq.load(data)
+ local d=data or {}
+ queue = d.queue or {}
+ timer = d.timer or 0
+end
+function iq.save()
+ return {queue = queue, timer=timer}
+end
+
+function iq.add(t, pos, evtdata)
+ queue[#queue+1]={t=t+timer, p=pos, e=evtdata}
+ run=true
+end
+
+function iq.mainloop(dtime)
+ timer=timer + math.min(dtime, 0.2)
+ for i=1,#queue do
+ local qe=queue[i]
+ if not qe then
+ table.remove(queue, i)
+ i=i-1
+ elseif timer>qe.t then
+ local pos, evtdata=queue[i].p, queue[i].e
+ local node=advtrains.ndb.get_node(pos)
+ local ndef=minetest.registered_nodes[node.name]
+ if ndef and ndef.luaautomation and ndef.luaautomation.fire_event then
+ ndef.luaautomation.fire_event(pos, evtdata)
+ else
+ atwarn("[atlatc][interrupt] Couldn't run event",evtdata.type,"on",pos,", something wrong with the node",node)
+ end
+ table.remove(queue, i)
+ i=i-1
+ end
+ end
+end
+
+
+
+atlatc.interrupt=iq
diff --git a/advtrains/advtrains_luaautomation/operation_panel.lua b/advtrains/advtrains_luaautomation/operation_panel.lua
new file mode 100644
index 0000000..f8b93b5
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/operation_panel.lua
@@ -0,0 +1,28 @@
+
+local function on_punch(pos, player)
+ atlatc.interrupt.add(0, pos, {type="punch", punch=true})
+end
+
+
+minetest.register_node("advtrains_luaautomation:oppanel", {
+ drawtype = "normal",
+ tiles={"atlatc_oppanel.png"},
+ description = "LuaAutomation operation panel",
+ groups = {
+ cracky = 1,
+ save_in_at_nodedb=1,
+ },
+ after_place_node = atlatc.active.after_place_node,
+ after_dig_node = atlatc.active.after_dig_node,
+ on_receive_fields = atlatc.active.on_receive_fields,
+ on_punch = on_punch,
+ luaautomation = {
+ fire_event=atlatc.active.run_in_env
+ },
+ digiline = {
+ receptor = {},
+ effector = {
+ action = atlatc.active.on_digiline_receive
+ },
+ },
+})
diff --git a/advtrains/advtrains_luaautomation/p_display.lua b/advtrains/advtrains_luaautomation/p_display.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/p_display.lua
diff --git a/advtrains/advtrains_luaautomation/passive_api.txt b/advtrains/advtrains_luaautomation/passive_api.txt
new file mode 100644
index 0000000..9852e94
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/passive_api.txt
@@ -0,0 +1,24 @@
+Lua Automation - Passive Component API
+
+Passive components are nodes that do not have code running in them. However, active components can query these and request actions from them. Examples:
+Switches
+Signals
+Displays
+Mesecon Transmitter
+Those passive components can also be used inside interlocking systems.
+
+All passive components have a table called 'advtrains' in their node definition and have the group 'save_in_nodedb' set, so they work in unloaded chunks.
+Example for a switch:
+advtrains = {
+ getstate = function(pos, node)
+ return "st"
+ end,
+ -- OR
+ getstate = "st",
+
+ setstate = function(pos, node, newstate)
+ if newstate=="cr" then
+ advtrains.ndb.swap_node(pos, <corresponding switch alt>)
+ end
+ end
+} \ No newline at end of file
diff --git a/advtrains/advtrains_luaautomation/pcnaming.lua b/advtrains/advtrains_luaautomation/pcnaming.lua
new file mode 100644
index 0000000..ebb769f
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/pcnaming.lua
@@ -0,0 +1,76 @@
+--pcnaming.lua
+--a.k.a Passive component naming
+--Allows to assign names to passive components, so they can be called like:
+--setstate("iamasignal", "green")
+atlatc.pcnaming={name_map={}}
+function atlatc.pcnaming.load(stuff)
+ if type(stuff)=="table" then
+ atlatc.pcnaming.name_map=stuff
+ end
+end
+function atlatc.pcnaming.save()
+ return atlatc.pcnaming.name_map
+end
+
+function atlatc.pcnaming.resolve_pos(pos, func_name)
+ if type(pos)=="string" then
+ local e = atlatc.pcnaming.name_map[pos]
+ if e then return e end
+ elseif type(pos)=="table" and pos.x and pos.y and pos.z then
+ return pos
+ end
+ error("Invalid position supplied to " .. (func_name or "???")..": " .. dump(pos))
+end
+
+minetest.register_craftitem("advtrains_luaautomation:pcnaming",{
+ description = attrans("Passive Component Naming Tool\n\nRight-click to name a passive component."),
+ groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
+ inventory_image = "atlatc_pcnaming.png",
+ wield_image = "atlatc_pcnaming.png",
+ stack_max = 1,
+ on_place = function(itemstack, placer, pointed_thing)
+ local pname = placer:get_player_name()
+ if not pname then
+ return
+ end
+ if not minetest.check_player_privs(pname, {atlatc=true}) then
+ minetest.chat_send_player(pname, "Missing privilege: atlatc")
+ return
+ end
+ if pointed_thing.type=="node" then
+ local pos=pointed_thing.under
+ if advtrains.is_protected(pos, pname) then
+ minetest.record_protection_violation(pos, pname)
+ return
+ end
+ local node = advtrains.ndb.get_node(pos)
+ if node.name and (minetest.get_item_group(node.name, "advtrains_signal")>0 or advtrains.is_passive(pos)) then
+ --look if this one already has a name
+ local pn=""
+ for name, npos in pairs(atlatc.pcnaming.name_map) do
+ if vector.equals(npos, pos) then
+ pn=name
+ end
+ end
+ minetest.show_formspec(pname, "atlatc_naming_"..minetest.pos_to_string(pos), "field[pn;Set name of component (empty to clear);"..minetest.formspec_escape(pn).."]")
+ end
+ end
+ end,
+})
+minetest.register_on_player_receive_fields(function(player, formname, fields)
+ local pts=string.match(formname, "^atlatc_naming_(.+)")
+ if pts then
+ local pos=minetest.string_to_pos(pts)
+ if fields.pn then
+ --first remove all occurences
+ for name, npos in pairs(atlatc.pcnaming.name_map) do
+ if vector.equals(npos, pos) then
+ atlatc.pcnaming.name_map[name]=nil
+ end
+ end
+ if fields.pn~="" then
+ atlatc.pcnaming.name_map[fields.pn]=pos
+ end
+ end
+ end
+end)
diff --git a/advtrains/advtrains_luaautomation/textures/atlatc_oppanel.png b/advtrains/advtrains_luaautomation/textures/atlatc_oppanel.png
new file mode 100644
index 0000000..96eb30e
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/textures/atlatc_oppanel.png
Binary files differ
diff --git a/advtrains/advtrains_luaautomation/textures/atlatc_pcnaming.png b/advtrains/advtrains_luaautomation/textures/atlatc_pcnaming.png
new file mode 100644
index 0000000..3fccdfc
--- /dev/null
+++ b/advtrains/advtrains_luaautomation/textures/atlatc_pcnaming.png
Binary files differ
diff --git a/advtrains/advtrains_signals_ks/depends.txt b/advtrains/advtrains_signals_ks/depends.txt
new file mode 100644
index 0000000..9ddc3eb
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/depends.txt
@@ -0,0 +1,2 @@
+advtrains
+advtrains_interlocking \ No newline at end of file
diff --git a/advtrains/advtrains_signals_ks/init.lua b/advtrains/advtrains_signals_ks/init.lua
new file mode 100644
index 0000000..c65d5f8
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/init.lua
@@ -0,0 +1,255 @@
+-- Ks signals
+-- Can display main aspects (no Zs) + Sht
+
+-- Note that the group value of advtrains_signal is 2, which means "step 2 of signal capabilities"
+-- advtrains_signal=1 is meant for signals that do not implement set_aspect.
+
+local setaspectf = function(rot)
+ return function(pos, node, asp)
+ if not asp.main.free then
+ if asp.shunt.free then
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2})
+ else
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_danger_"..rot, param2 = node.param2})
+ end
+ else
+ if asp.dst.free and asp.main.speed == -1 then
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_free_"..rot, param2 = node.param2})
+ else
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_slow_"..rot, param2 = node.param2})
+ end
+ end
+ end
+end
+
+local suppasp = {
+ main = {
+ free = nil,
+ speed = {6, -1},
+ },
+ dst = {
+ free = nil,
+ speed = nil,
+ },
+ shunt = {
+ free = nil,
+ proceed_as_main = true,
+ },
+ info = {
+ call_on = false,
+ dead_end = false,
+ w_speed = nil,
+ }
+}
+
+--Rangiersignal
+local setaspectf_ra = function(rot)
+ return function(pos, node, asp)
+ if asp.shunt.free then
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:ra_shuntd_"..rot, param2 = node.param2})
+ else
+ advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:ra_danger_"..rot, param2 = node.param2})
+ end
+ local meta = minetest.get_meta(pos)
+ if meta then
+ meta:set_string("infotext", minetest.serialize(asp))
+ end
+ end
+end
+
+local suppasp_ra = {
+ main = {
+ free = true,
+ },
+ dst = {
+ free = nil,
+ speed = nil,
+ },
+ shunt = {
+ free = nil,
+ proceed_as_main = false,
+ },
+ info = {
+ call_on = false,
+ dead_end = false,
+ w_speed = nil,
+ }
+}
+
+advtrains.trackplacer.register_tracktype("advtrains_signals_ks:hs")
+advtrains.trackplacer.register_tracktype("advtrains_signals_ks:ra")
+advtrains.trackplacer.register_tracktype("advtrains_signals_ks:sign")
+advtrains.trackplacer.register_tracktype("advtrains_signals_ks:mast")
+
+for _, rtab in ipairs({
+ {rot = "0", sbox = {-1/8, -1/2, -1/2, 1/8, 1/2, -1/4}, ici=true},
+ {rot = "30", sbox = {-3/8, -1/2, -1/2, -1/8, 1/2, -1/4},},
+ {rot = "45", sbox = {-1/2, -1/2, -1/2, -1/4, 1/2, -1/4},},
+ {rot = "60", sbox = {-1/2, -1/2, -3/8, -1/4, 1/2, -1/8},},
+ }) do
+ local rot = rtab.rot
+ for typ, prts in pairs({
+ danger = {asp = advtrains.interlocking.DANGER, n = "slow", ici=true},
+ slow = {asp = { main = { free = true, speed = 6 }, shunt = {proceed_as_main = true}} , n = "free"},
+ free = {asp = { main = { free = true, speed = -1 }, shunt = {proceed_as_main = true}} , n = "shunt"},
+ shunt = {asp = { main = {free = false}, shunt = {free = true} } , n = "danger"},
+ }) do
+ minetest.register_node("advtrains_signals_ks:hs_"..typ.."_"..rot, {
+ description = "Ks Main Signal",
+ drawtype = "mesh",
+ mesh = "advtrains_signals_ks_main_smr"..rot..".obj",
+ tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_ltm_"..typ..".png"},
+
+ paramtype="light",
+ sunlight_propagates=true,
+ light_source = 4,
+
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = {rtab.sbox, {-1/4, -1/2, -1/4, 1/4, -7/16, 1/4}}
+ },
+ groups = {
+ cracky = 2,
+ advtrains_signal = 2,
+ not_blocking_trains = 1,
+ save_in_at_nodedb = 1,
+ not_in_creative_inventory = (rtab.ici and prts.ici) and 0 or 1,
+ },
+ drop = "advtrains_signals_ks:hs_danger_0",
+ inventory_image = "advtrains_signals_ks_hs_inv.png",
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ set_aspect = setaspectf(rot),
+ supported_aspects = suppasp,
+ get_aspect = function(pos, node)
+ return prts.asp
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+ })
+ -- rotatable by trackworker
+ advtrains.trackplacer.add_worked("advtrains_signals_ks:hs", typ, "_"..rot, prts.n)
+ end
+
+
+ --Rangiersignale:
+ for typ, prts in pairs({
+ danger = {asp = { main = {free = true}, shunt = {free = false} }, n = "shuntd", ici=true},
+ shuntd = {asp = { main = {free = true}, shunt = {free = true} } , n = "danger"},
+ }) do
+ minetest.register_node("advtrains_signals_ks:ra_"..typ.."_"..rot, {
+ description = "Ks Shunting Signal",
+ drawtype = "mesh",
+ mesh = "advtrains_signals_ks_sht_smr"..rot..".obj",
+ tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_ltm_"..typ..".png"},
+
+ paramtype="light",
+ sunlight_propagates=true,
+ light_source = 4,
+
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 0, 1/4}
+ },
+ groups = {
+ cracky = 2,
+ advtrains_signal = 2,
+ not_blocking_trains = 1,
+ save_in_at_nodedb = 1,
+ not_in_creative_inventory = (rtab.ici and prts.ici) and 0 or 1,
+ },
+ drop = "advtrains_signals_ks:ra_danger_0",
+ inventory_image = "advtrains_signals_ks_ra_inv.png",
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ set_aspect = setaspectf_ra(rot),
+ supported_aspects = suppasp_ra,
+ get_aspect = function(pos, node)
+ return prts.asp
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+ })
+ -- rotatable by trackworker
+ advtrains.trackplacer.add_worked("advtrains_signals_ks:ra", typ, "_"..rot, prts.n)
+ end
+
+ --Schilder:
+ for typ, prts in pairs({
+ -- Speed restrictions:
+ ["8"] = {asp = { main = {free = true, speed = 8}, shunt = {free = true} }, n = "12", ici=true},
+ ["12"] = {asp = { main = {free = true, speed = 12}, shunt = {free = true} }, n = "16"},
+ ["16"] = {asp = { main = {free = true, speed = 16}, shunt = {free = true} }, n = "e"},
+ -- Speed restriction lifted
+ ["e"] = {asp = { main = {free = true, speed = -1}, shunt = {free = true} }, n = "hfs"},
+ -- Halt for shunt moves:
+ ["hfs"] = {asp = { main = {free = true}, shunt = {free = false} }, n = "8"},
+ }) do
+ minetest.register_node("advtrains_signals_ks:sign_"..typ.."_"..rot, {
+ description = "Signal Sign",
+ drawtype = "mesh",
+ mesh = "advtrains_signals_ks_sign_smr"..rot..".obj",
+ tiles = {"advtrains_signals_ks_signpost.png", "advtrains_signals_ks_sign_"..typ..".png"},
+
+ paramtype="light",
+ sunlight_propagates=true,
+ light_source = 4,
+
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = {rtab.sbox, {-1/4, -1/2, -1/4, 1/4, -7/16, 1/4}}
+ },
+ groups = {
+ cracky = 2,
+ advtrains_signal = 2,
+ not_blocking_trains = 1,
+ save_in_at_nodedb = 1,
+ not_in_creative_inventory = (rtab.ici and prts.ici) and 0 or 1,
+ },
+ drop = "advtrains_signals_ks:sign_e_0",
+ inventory_image = "advtrains_signals_ks_sign_8.png",
+ sounds = default.node_sound_stone_defaults(),
+ advtrains = {
+ -- This is a static signal! No set_aspect
+ get_aspect = function(pos, node)
+ return prts.asp
+ end,
+ },
+ on_rightclick = advtrains.interlocking.signal_rc_handler,
+ can_dig = advtrains.interlocking.signal_can_dig,
+ })
+ -- rotatable by trackworker
+ advtrains.trackplacer.add_worked("advtrains_signals_ks:sign", typ, "_"..rot, prts.n)
+ end
+
+ minetest.register_node("advtrains_signals_ks:mast_mast_"..rot, {
+ description = "Ks Mast",
+ drawtype = "mesh",
+ mesh = "advtrains_signals_ks_mast_smr"..rot..".obj",
+ tiles = {"advtrains_signals_ks_mast.png"},
+
+ paramtype="light",
+ sunlight_propagates=true,
+ --light_source = 4,
+
+ paramtype2 = "facedir",
+ selection_box = {
+ type = "fixed",
+ fixed = {rtab.sbox, {-1/4, -1/2, -1/4, 1/4, -7/16, 1/4}}
+ },
+ groups = {
+ cracky = 2,
+ not_blocking_trains = 1,
+ not_in_creative_inventory = (rtab.ici) and 0 or 1,
+ },
+ drop = "advtrains_signals_ks:mast_mast_0",
+ sounds = default.node_sound_stone_defaults(),
+ })
+ advtrains.trackplacer.add_worked("advtrains_signals_ks:mast","mast", "_"..rot)
+end
+
diff --git a/advtrains/advtrains_signals_ks/init_degrotate_nodes.lua b/advtrains/advtrains_signals_ks/init_degrotate_nodes.lua
new file mode 100644
index 0000000..a4380d2
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/init_degrotate_nodes.lua
@@ -0,0 +1,94 @@
+-- Ks Signals for advtrains
+-- will implement the advtrains signal API (which does not exist yet)
+
+local function place_degrotate(pos, placer, itemstack, pointed_thing)
+ local yaw = placer:get_look_horizontal()
+ local param = math.floor(yaw * 90 / math.pi + 0.5)
+ local n = minetest.get_node(pos)
+ n.param2 = param
+ minetest.set_node(pos, n)
+end
+
+minetest.register_node("advtrains_signals_ks:mast", {
+ drawtype = "mesh",
+ paramtype="light",
+ paramtype2="degrotate",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ mesh = "advtrains_signals_ks_mast.obj",
+ tiles = {"advtrains_signals_ks_mast.png"},
+ description="Ks Signal Mast",
+ sunlight_propagates=true,
+ groups = {
+ cracky=3,
+ not_blocking_trains=1,
+ --save_in_at_nodedb=2,
+ },
+ after_place_node = place_degrotate,
+})
+
+minetest.register_node("advtrains_signals_ks:head_main", {
+ drawtype = "mesh",
+ paramtype="light",
+ paramtype2="degrotate",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ mesh = "advtrains_signals_ks_head_main.obj",
+ tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
+ description="Ks Main Signal Screen",
+ sunlight_propagates=true,
+ groups = {
+ cracky=3,
+ not_blocking_trains=1,
+ --save_in_at_nodedb=2,
+ },
+ after_place_node = place_degrotate,
+})
+
+minetest.register_node("advtrains_signals_ks:zs_top", {
+ drawtype = "mesh",
+ paramtype="light",
+ paramtype2="degrotate",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ mesh = "advtrains_signals_ks_zs_top.obj",
+ tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
+ description="Ks Speed Restriction Signal (top)",
+ sunlight_propagates=true,
+ groups = {
+ cracky=3,
+ not_blocking_trains=1,
+ --save_in_at_nodedb=2,
+ },
+ after_place_node = place_degrotate,
+})
+
+minetest.register_node("advtrains_signals_ks:zs_bottom", {
+ drawtype = "mesh",
+ paramtype="light",
+ paramtype2="degrotate",
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
+ },
+ mesh = "advtrains_signals_ks_zs_bottom.obj",
+ tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
+ description="Ks Speed Restriction Signal (bottom)",
+ sunlight_propagates=true,
+ groups = {
+ cracky=3,
+ not_blocking_trains=1,
+ --save_in_at_nodedb=2,
+ },
+ after_place_node = place_degrotate,
+})
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_dist.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_dist.obj
new file mode 100644
index 0000000..28399e1
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_dist.obj
@@ -0,0 +1,270 @@
+# Blender v2.76 (sub 0) OBJ File: 'signal_ks_export.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_head_dist.mtl
+o VSSignalschirm_Cube.003
+v 0.028581 -0.498051 0.268412
+v -0.028581 -0.498051 0.268412
+v -0.028581 -0.498051 0.496774
+v 0.028581 -0.498051 0.496774
+v 0.028581 -0.498051 0.325575
+v 0.028581 -0.498051 0.439611
+v -0.028581 -0.498051 0.325575
+v -0.028581 -0.498051 0.439611
+v -0.028581 -0.292188 0.439611
+v -0.028581 -0.164298 0.439611
+v 0.028581 -0.164298 0.439611
+v 0.028581 -0.292188 0.439611
+v 0.028581 -0.292188 0.496774
+v 0.028581 -0.164298 0.496774
+v -0.028581 -0.164298 0.496774
+v -0.028581 -0.292188 0.496774
+v -0.028581 -0.292188 0.325575
+v -0.028581 -0.164298 0.325575
+v -0.028581 -0.164298 0.268412
+v -0.028581 -0.292188 0.268412
+v 0.028581 -0.292188 0.268412
+v 0.028581 -0.164298 0.268412
+v 0.028581 -0.164298 0.325575
+v 0.028581 -0.292188 0.325575
+v -0.028581 -0.163378 0.439611
+v 0.028581 -0.163378 0.439611
+v 0.028581 -0.163378 0.496774
+v -0.028581 -0.163378 0.496774
+v -0.028581 -0.163378 0.325575
+v -0.028581 -0.163378 0.268412
+v 0.028581 -0.163378 0.268412
+v 0.028581 -0.163378 0.325575
+v 0.028581 -0.163378 0.268412
+v -0.028581 -0.163378 0.268412
+v -0.028581 -0.163378 0.496774
+v 0.028581 -0.163378 0.496774
+v 0.028581 -0.163378 0.325575
+v 0.028581 -0.163378 0.439611
+v -0.028581 -0.163378 0.325575
+v -0.028581 -0.163378 0.439611
+v -0.028581 0.040885 0.439611
+v -0.028581 0.167782 0.439611
+v 0.028581 0.167782 0.439611
+v 0.028581 0.040885 0.439611
+v 0.028581 0.040885 0.496774
+v 0.028581 0.167782 0.496774
+v -0.028581 0.167782 0.496774
+v -0.028581 0.040885 0.496774
+v -0.028581 0.040885 0.325575
+v -0.028581 0.167782 0.325575
+v -0.028581 0.167782 0.268412
+v -0.028581 0.040885 0.268412
+v 0.028581 0.040885 0.268412
+v 0.028581 0.167782 0.268412
+v 0.028581 0.167782 0.325575
+v 0.028581 0.040885 0.325575
+v -0.269369 -0.249462 0.548486
+v 0.230631 -0.249462 0.548486
+v -0.269369 0.273111 0.548486
+v 0.230631 0.273111 0.548486
+v -0.269369 0.273111 0.501067
+v -0.269369 -0.249462 0.501068
+v 0.230631 -0.249462 0.501068
+v 0.230631 0.273111 0.501067
+vt 0.538102 0.501950
+vt 0.538102 0.192341
+vt 0.615085 0.192341
+vt 0.538102 0.000000
+vt 0.615085 0.000000
+vt 0.000000 0.501950
+vt 0.000000 0.192341
+vt 0.076983 0.192341
+vt 0.000000 0.000000
+vt 0.076983 0.000000
+vt 0.615085 0.501950
+vt 0.692068 0.192341
+vt 0.692068 0.000000
+vt 0.692068 0.501950
+vt 0.769051 0.192341
+vt 0.769051 0.000000
+vt 0.769051 0.501950
+vt 0.846034 0.192341
+vt 0.846034 0.000000
+vt 0.846034 0.996502
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.307543 0.501950
+vt 0.307542 0.192341
+vt 0.384525 0.192341
+vt 0.307542 0.000000
+vt 0.384525 0.000000
+vt 0.230559 0.501950
+vt 0.230559 0.192341
+vt 0.230559 0.000000
+vt 0.923017 0.478709
+vt 1.000000 0.478709
+vt 1.000000 0.650215
+vt 0.846034 0.600923
+vt 0.846034 0.429417
+vt 0.923017 0.429417
+vt 0.923017 0.600923
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.538102 1.000000
+vt 0.538102 0.692796
+vt 0.615085 0.692796
+vt 0.000000 1.000000
+vt 0.000000 0.692797
+vt 0.076983 0.692797
+vt 0.076983 0.501950
+vt 0.692068 1.000000
+vt 0.692068 0.692796
+vt 0.769051 0.692796
+vt 0.692068 0.809153
+vt 0.615085 0.809153
+vt 0.615085 1.000000
+vt 0.769051 1.000000
+vt 0.846034 0.692796
+vt 0.846034 0.501950
+vt 0.923017 0.307203
+vt 0.923017 0.000000
+vt 1.000000 0.000000
+vt 0.307543 1.000000
+vt 0.307542 0.692797
+vt 0.384525 0.692797
+vt 0.384525 0.501950
+vt 0.230559 1.000000
+vt 0.230559 0.692797
+vt 1.000000 0.307203
+vt 0.846034 0.257476
+vt 0.846034 0.085970
+vt 0.923017 0.085970
+vt 0.923017 0.257476
+vt 0.923017 0.996502
+vt 0.923017 0.650215
+vt 0.076983 1.000000
+vt 0.846034 1.000000
+vt 0.384526 1.000000
+vt 0.500000 0.500000
+vt 0.500000 0.000000
+vt 0.047418 1.000000
+vt 0.047418 0.500000
+vt 0.094836 0.500000
+vt 0.142255 0.500000
+vt 0.142255 0.978402
+vt 0.094836 0.978402
+vt 0.189673 0.500000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vt 0.094836 1.000000
+vt 0.189673 0.978402
+vn 1.000000 0.000000 0.000000
+vn -1.000000 0.000000 -0.000000
+vn 0.000000 0.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 0.000000
+vn 0.000000 1.000000 0.000000
+g VSSignalschirm_Cube.003_Mast
+usemtl Mast
+s off
+f 6/1/1 12/2/1 13/3/1
+f 12/2/1 11/4/1 14/5/1
+f 3/6/2 16/7/2 9/8/2
+f 16/7/2 15/9/2 10/10/2
+f 4/11/3 13/3/3 16/12/3
+f 13/3/3 14/5/3 15/13/3
+f 8/14/4 9/12/4 12/15/4
+f 9/12/4 10/13/4 11/16/4
+f 2/17/4 20/15/4 21/18/4
+f 20/15/4 19/16/4 22/19/4
+f 5/20/3 24/21/3 17/22/3
+f 1/23/1 21/24/1 24/25/1
+f 21/24/1 22/26/1 23/27/1
+f 7/28/2 17/29/2 20/24/2
+f 17/29/2 18/30/2 19/26/2
+f 23/27/1 11/4/1 12/2/1
+f 17/31/5 24/32/5 12/33/5
+f 17/29/2 9/8/2 10/10/2
+f 18/34/6 10/35/6 11/36/6
+f 18/34/6 23/37/6 22/22/6
+f 10/35/6 15/38/6 14/39/6
+f 29/9/6 25/9/6 26/9/6
+f 38/40/1 44/41/1 45/42/1
+f 44/41/1 43/1/1 46/11/1
+f 35/43/2 48/44/2 41/45/2
+f 48/44/2 47/6/2 42/46/2
+f 36/47/3 45/48/3 48/49/3
+f 45/48/3 46/14/3 47/17/3
+f 40/14/4 41/50/4 44/51/4
+f 41/50/4 42/47/4 43/52/4
+f 34/53/4 52/49/4 53/54/4
+f 52/49/4 51/17/4 54/55/4
+f 37/56/3 56/57/3 49/58/3
+f 33/59/1 53/60/1 56/61/1
+f 53/60/1 54/23/1 55/62/1
+f 39/63/2 49/64/2 52/60/2
+f 49/64/2 50/28/2 51/23/2
+f 55/62/1 43/1/1 44/41/1
+f 49/56/5 56/65/5 44/32/5
+f 49/64/2 41/45/2 42/46/2
+f 50/66/6 42/67/6 43/68/6
+f 50/66/6 55/69/6 54/39/6
+f 42/67/6 47/19/6 46/57/6
+f 4/11/1 6/1/1 13/3/1
+f 13/3/1 12/2/1 14/5/1
+f 8/46/2 3/6/2 9/8/2
+f 9/8/2 16/7/2 10/10/2
+f 3/14/3 4/11/3 16/12/3
+f 16/12/3 13/3/3 15/13/3
+f 6/17/4 8/14/4 12/15/4
+f 12/15/4 9/12/4 11/16/4
+f 1/55/4 2/17/4 21/18/4
+f 21/18/4 20/15/4 22/19/4
+f 7/70/3 5/20/3 17/22/3
+f 5/62/1 1/23/1 24/25/1
+f 24/25/1 21/24/1 23/27/1
+f 2/23/2 7/28/2 20/24/2
+f 20/24/2 17/29/2 19/26/2
+f 24/25/1 23/27/1 12/2/1
+f 9/71/5 17/31/5 12/33/5
+f 18/30/2 17/29/2 10/10/2
+f 23/37/6 18/34/6 11/36/6
+f 19/21/6 18/34/6 22/22/6
+f 11/36/6 10/35/6 14/39/6
+f 32/9/6 29/9/6 26/9/6
+f 36/52/1 38/40/1 45/42/1
+f 45/42/1 44/41/1 46/11/1
+f 40/72/2 35/43/2 41/45/2
+f 41/45/2 48/44/2 42/46/2
+f 35/53/3 36/47/3 48/49/3
+f 48/49/3 45/48/3 47/17/3
+f 38/11/4 40/14/4 44/51/4
+f 44/51/4 41/50/4 43/52/4
+f 33/73/4 34/53/4 53/54/4
+f 53/54/4 52/49/4 54/55/4
+f 39/65/3 37/56/3 49/58/3
+f 37/74/1 33/59/1 56/61/1
+f 56/61/1 53/60/1 55/62/1
+f 34/59/2 39/63/2 52/60/2
+f 52/60/2 49/64/2 51/23/2
+f 56/61/1 55/62/1 44/41/1
+f 41/31/5 49/56/5 44/32/5
+f 50/28/2 49/64/2 42/46/2
+f 55/69/6 50/66/6 43/68/6
+f 51/38/6 50/66/6 54/39/6
+f 43/68/6 42/67/6 46/57/6
+g VSSignalschirm_Cube.003_Schirm
+usemtl Schirm
+f 58/75/3 60/76/3 59/58/3
+f 61/9/4 64/76/4 63/75/4
+f 61/77/2 62/78/2 57/79/2
+f 64/80/6 61/81/6 59/82/6
+f 62/81/5 63/80/5 58/83/5
+f 63/78/1 64/77/1 60/43/1
+f 57/84/3 58/75/3 59/58/3
+f 62/85/4 61/9/4 63/75/4
+f 59/86/2 61/77/2 57/79/2
+f 60/79/6 64/80/6 59/82/6
+f 57/87/5 62/81/5 58/83/5
+f 58/85/1 63/78/1 60/43/1
+l 26 27
+l 28 25
+l 27 28
+l 30 31
+l 31 32
+l 29 30
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_main.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_main.obj
new file mode 100644
index 0000000..283ef46
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_head_main.obj
@@ -0,0 +1,286 @@
+# Blender v2.76 (sub 0) OBJ File: 'signal_ks_export.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_head_main.mtl
+o HSSignalschirm_Cube.002
+v -0.028581 -0.498051 0.439611
+v 0.028581 -0.498051 0.439611
+v 0.028581 -0.498051 0.496774
+v -0.028581 -0.498051 0.496774
+v -0.028581 -0.498051 0.325575
+v -0.028581 -0.498051 0.268412
+v 0.028581 -0.498051 0.268412
+v 0.028581 -0.498051 0.325575
+v 0.028581 -0.498051 0.268412
+v -0.028581 -0.498051 0.268412
+v -0.028581 -0.498051 0.496774
+v 0.028581 -0.498051 0.496774
+v 0.028581 -0.498051 0.325575
+v 0.028581 -0.498051 0.439611
+v -0.028581 -0.498051 0.325575
+v -0.028581 -0.498051 0.439611
+v -0.028581 -0.292188 0.439611
+v -0.028581 -0.164298 0.439611
+v 0.028581 -0.164298 0.439611
+v 0.028581 -0.292188 0.439611
+v 0.028581 -0.292188 0.496774
+v 0.028581 -0.164298 0.496774
+v -0.028581 -0.164298 0.496774
+v -0.028581 -0.292188 0.496774
+v -0.028581 -0.292188 0.325575
+v -0.028581 -0.164298 0.325575
+v -0.028581 -0.164298 0.268412
+v -0.028581 -0.292188 0.268412
+v 0.028581 -0.292188 0.268412
+v 0.028581 -0.164298 0.268412
+v 0.028581 -0.164298 0.325575
+v 0.028581 -0.292188 0.325575
+v -0.028581 -0.163378 0.439611
+v 0.028581 -0.163378 0.439611
+v 0.028581 -0.163378 0.496774
+v -0.028581 -0.163378 0.496774
+v -0.028581 -0.163378 0.325575
+v -0.028581 -0.163378 0.268412
+v 0.028581 -0.163378 0.268412
+v 0.028581 -0.163378 0.325575
+v 0.028581 -0.163378 0.268412
+v -0.028581 -0.163378 0.268412
+v -0.028581 -0.163378 0.496774
+v 0.028581 -0.163378 0.496774
+v 0.028581 -0.163378 0.325575
+v 0.028581 -0.163378 0.439611
+v -0.028581 -0.163378 0.325575
+v -0.028581 -0.163378 0.439611
+v -0.028581 0.040885 0.439611
+v -0.028581 0.167782 0.439611
+v 0.028581 0.167782 0.439611
+v 0.028581 0.040885 0.439611
+v 0.028581 0.040885 0.496774
+v 0.028581 0.167782 0.496774
+v -0.028581 0.167782 0.496774
+v -0.028581 0.040885 0.496774
+v -0.028581 0.040885 0.325575
+v -0.028581 0.167782 0.325575
+v -0.028581 0.167782 0.268412
+v -0.028581 0.040885 0.268412
+v 0.028581 0.040885 0.268412
+v 0.028581 0.167782 0.268412
+v 0.028581 0.167782 0.325575
+v 0.028581 0.040885 0.325575
+v -0.269369 -0.475166 0.548486
+v 0.230631 -0.475166 0.548486
+v -0.269369 0.273749 0.548486
+v 0.230631 0.273749 0.548486
+v -0.269369 0.273749 0.501067
+v -0.269369 -0.475166 0.501068
+v 0.230631 -0.475166 0.501068
+v 0.230631 0.273749 0.501067
+vt 0.000000 0.000000
+vt 0.538102 0.501950
+vt 0.538102 0.192341
+vt 0.615085 0.192341
+vt 0.538102 0.000000
+vt 0.615085 0.000000
+vt 0.000000 0.501950
+vt 0.000000 0.192341
+vt 0.076983 0.192341
+vt 0.076983 0.000000
+vt 0.615085 0.501950
+vt 0.692068 0.192341
+vt 0.692068 0.000000
+vt 0.692068 0.501950
+vt 0.769051 0.192341
+vt 0.769051 0.000000
+vt 0.769051 0.501950
+vt 0.846034 0.192341
+vt 0.846034 0.000000
+vt 0.846034 0.996502
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.307543 0.501950
+vt 0.307542 0.192341
+vt 0.384525 0.192341
+vt 0.307542 0.000000
+vt 0.384525 0.000000
+vt 0.230559 0.501950
+vt 0.230559 0.192341
+vt 0.230559 0.000000
+vt 0.923017 0.478709
+vt 1.000000 0.478709
+vt 1.000000 0.650215
+vt 0.846034 0.600923
+vt 0.846034 0.429417
+vt 0.923017 0.429417
+vt 0.923017 0.600923
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.538102 1.000000
+vt 0.538102 0.692796
+vt 0.615085 0.692796
+vt 0.000000 1.000000
+vt 0.000000 0.692797
+vt 0.076983 0.692797
+vt 0.076983 0.501950
+vt 0.692068 1.000000
+vt 0.692068 0.692796
+vt 0.769051 0.692796
+vt 0.692068 0.809153
+vt 0.615085 0.809153
+vt 0.615085 1.000000
+vt 0.769051 1.000000
+vt 0.846034 0.692796
+vt 0.846034 0.501950
+vt 0.923017 0.307203
+vt 0.923017 0.000000
+vt 1.000000 0.000000
+vt 0.307543 1.000000
+vt 0.307542 0.692797
+vt 0.384525 0.692797
+vt 0.384525 0.501950
+vt 0.230559 1.000000
+vt 0.230559 0.692797
+vt 1.000000 0.307203
+vt 0.846034 0.257476
+vt 0.846034 0.085970
+vt 0.923017 0.085970
+vt 0.923017 0.257476
+vt 0.923017 0.996502
+vt 0.923017 0.650215
+vt 0.076983 1.000000
+vt 0.846034 1.000000
+vt 0.384526 1.000000
+vt 0.437731 0.748915
+vt 0.437731 0.000000
+vt 0.875462 0.000000
+vt 0.000000 0.748915
+vt 0.916975 0.748915
+vt 0.916975 0.000000
+vt 0.958487 0.000000
+vt 1.000000 0.500000
+vt 0.958487 0.500000
+vt 0.958487 1.000000
+vt 0.875462 0.748915
+vt 0.958487 0.748915
+vt 1.000000 1.000000
+vn 0.000000 1.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn -1.000000 0.000000 -0.000000
+vn 0.000000 0.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 0.000000
+g HSSignalschirm_Cube.002_Mast
+usemtl Mast
+s off
+f 5/1/1 1/1/1 2/1/1
+f 14/2/2 20/3/2 21/4/2
+f 20/3/2 19/5/2 22/6/2
+f 11/7/3 24/8/3 17/9/3
+f 24/8/3 23/1/3 18/10/3
+f 12/11/4 21/4/4 24/12/4
+f 21/4/4 22/6/4 23/13/4
+f 16/14/5 17/12/5 20/15/5
+f 17/12/5 18/13/5 19/16/5
+f 10/17/5 28/15/5 29/18/5
+f 28/15/5 27/16/5 30/19/5
+f 13/20/4 32/21/4 25/22/4
+f 9/23/2 29/24/2 32/25/2
+f 29/24/2 30/26/2 31/27/2
+f 15/28/3 25/29/3 28/24/3
+f 25/29/3 26/30/3 27/26/3
+f 31/27/2 19/5/2 20/3/2
+f 25/31/6 32/32/6 20/33/6
+f 25/29/3 17/9/3 18/10/3
+f 26/34/1 18/35/1 19/36/1
+f 26/34/1 31/37/1 30/22/1
+f 18/35/1 23/38/1 22/39/1
+f 37/1/1 33/1/1 34/1/1
+f 46/40/2 52/41/2 53/42/2
+f 52/41/2 51/2/2 54/11/2
+f 43/43/3 56/44/3 49/45/3
+f 56/44/3 55/7/3 50/46/3
+f 44/47/4 53/48/4 56/49/4
+f 53/48/4 54/14/4 55/17/4
+f 48/14/5 49/50/5 52/51/5
+f 49/50/5 50/47/5 51/52/5
+f 42/53/5 60/49/5 61/54/5
+f 60/49/5 59/17/5 62/55/5
+f 45/56/4 64/57/4 57/58/4
+f 41/59/2 61/60/2 64/61/2
+f 61/60/2 62/23/2 63/62/2
+f 47/63/3 57/64/3 60/60/3
+f 57/64/3 58/28/3 59/23/3
+f 63/62/2 51/2/2 52/41/2
+f 57/56/6 64/65/6 52/32/6
+f 57/64/3 49/45/3 50/46/3
+f 58/66/1 50/67/1 51/68/1
+f 58/66/1 63/69/1 62/39/1
+f 50/67/1 55/19/1 54/57/1
+f 8/1/1 5/1/1 2/1/1
+f 12/11/2 14/2/2 21/4/2
+f 21/4/2 20/3/2 22/6/2
+f 16/46/3 11/7/3 17/9/3
+f 17/9/3 24/8/3 18/10/3
+f 11/14/4 12/11/4 24/12/4
+f 24/12/4 21/4/4 23/13/4
+f 14/17/5 16/14/5 20/15/5
+f 20/15/5 17/12/5 19/16/5
+f 9/55/5 10/17/5 29/18/5
+f 29/18/5 28/15/5 30/19/5
+f 15/70/4 13/20/4 25/22/4
+f 13/62/2 9/23/2 32/25/2
+f 32/25/2 29/24/2 31/27/2
+f 10/23/3 15/28/3 28/24/3
+f 28/24/3 25/29/3 27/26/3
+f 32/25/2 31/27/2 20/3/2
+f 17/71/6 25/31/6 20/33/6
+f 26/30/3 25/29/3 18/10/3
+f 31/37/1 26/34/1 19/36/1
+f 27/21/1 26/34/1 30/22/1
+f 19/36/1 18/35/1 22/39/1
+f 40/1/1 37/1/1 34/1/1
+f 44/52/2 46/40/2 53/42/2
+f 53/42/2 52/41/2 54/11/2
+f 48/72/3 43/43/3 49/45/3
+f 49/45/3 56/44/3 50/46/3
+f 43/53/4 44/47/4 56/49/4
+f 56/49/4 53/48/4 55/17/4
+f 46/11/5 48/14/5 52/51/5
+f 52/51/5 49/50/5 51/52/5
+f 41/73/5 42/53/5 61/54/5
+f 61/54/5 60/49/5 62/55/5
+f 47/65/4 45/56/4 57/58/4
+f 45/74/2 41/59/2 64/61/2
+f 64/61/2 61/60/2 63/62/2
+f 42/59/3 47/63/3 60/60/3
+f 60/60/3 57/64/3 59/23/3
+f 64/61/2 63/62/2 52/41/2
+f 49/31/6 57/56/6 52/32/6
+f 58/28/3 57/64/3 50/46/3
+f 63/69/1 58/66/1 51/68/1
+f 59/38/1 58/66/1 62/39/1
+f 51/68/1 50/67/1 54/57/1
+g HSSignalschirm_Cube.002_Schirm
+usemtl Schirm
+f 66/75/4 68/76/4 67/77/4
+f 69/75/5 72/78/5 71/1/5
+f 69/79/3 70/80/3 65/81/3
+f 72/58/1 69/82/1 67/83/1
+f 70/84/6 71/83/6 66/82/6
+f 71/80/2 72/79/2 68/85/2
+f 65/85/4 66/75/4 67/77/4
+f 70/76/5 69/75/5 71/1/5
+f 67/86/3 69/79/3 65/81/3
+f 68/81/1 72/58/1 67/83/1
+f 65/87/6 70/84/6 66/82/6
+f 66/77/2 71/80/2 68/85/2
+l 2 3
+l 4 1
+l 3 4
+l 6 7
+l 7 8
+l 5 6
+l 34 35
+l 36 33
+l 35 36
+l 38 39
+l 39 40
+l 37 38
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_dist.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_dist.obj
new file mode 100644
index 0000000..c4f8a61
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_dist.obj
@@ -0,0 +1,1989 @@
+# Blender v2.76 (sub 0) OBJ File: 'signal_ks_export.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_lamps_dist.mtl
+o VSLampen_Cube.004
+v 1.356099 0.195342 5.864285
+v 1.356098 0.189842 5.594683
+v 1.324589 0.300536 6.389298
+v 1.324588 0.295033 5.594215
+v 1.273160 0.397563 6.388865
+v 1.273160 0.392062 5.593781
+v 1.203793 0.482692 6.388486
+v 1.203794 0.477191 5.593402
+v 1.119149 0.552651 6.388174
+v 1.119148 0.547151 5.593091
+v 1.022483 0.604755 6.387940
+v 1.022485 0.599256 5.592857
+v 0.917511 0.636999 6.387797
+v 0.917511 0.631500 5.592714
+v 0.808263 0.648141 6.387748
+v 0.808264 0.642644 5.592665
+v 0.698939 0.637761 6.387794
+v 0.698940 0.632259 5.592710
+v 0.593745 0.606253 6.387936
+v 0.593744 0.600751 5.592852
+v 0.496716 0.554824 6.388164
+v 0.496716 0.549324 5.593081
+v 0.411588 0.485459 6.388473
+v 0.411586 0.479957 5.593389
+v 0.341628 0.400816 6.388850
+v 0.341625 0.395314 5.593767
+v 0.289521 0.304149 6.389282
+v 0.289522 0.298649 5.594199
+v 0.257278 0.199179 5.864267
+v 0.257278 0.193676 5.594666
+v 0.245926 0.085112 5.864237
+v 0.246134 0.084478 5.595152
+v 0.256836 -0.021166 5.862653
+v 0.256504 -0.024828 5.595598
+v 0.288031 -0.124601 5.863041
+v 0.288019 -0.130073 5.596006
+v 0.339461 -0.221624 5.863426
+v 0.339445 -0.227102 5.596392
+v 0.408828 -0.306751 5.863764
+v 0.408815 -0.312234 5.596729
+v 0.493473 -0.376709 5.864041
+v 0.493457 -0.382198 5.597005
+v 0.590136 -0.428808 5.864248
+v 0.590124 -0.434302 5.597212
+v 0.695107 -0.461050 5.864375
+v 0.695100 -0.466548 5.597339
+v 0.804351 -0.472194 5.864418
+v 0.804351 -0.477695 5.597383
+v 0.913672 -0.461815 5.864378
+v 0.913679 -0.467312 5.597343
+v 1.018864 -0.430305 5.864253
+v 1.018874 -0.435800 5.597218
+v 1.115892 -0.378882 5.864049
+v 1.115906 -0.384370 5.597014
+v 1.201019 -0.309515 5.863774
+v 1.201035 -0.315001 5.596738
+v 1.270979 -0.224876 5.863439
+v 1.270996 -0.230353 5.596403
+v 1.323086 -0.128213 5.863057
+v 1.323098 -0.133684 5.596019
+v 1.355004 -0.024994 5.862668
+v 1.355350 -0.028662 5.595614
+v 1.366655 0.081200 5.864254
+v 1.366481 0.080568 5.595167
+v 1.380815 0.199851 5.864238
+v 1.380815 0.194667 5.229348
+v 1.347889 0.309774 6.389203
+v 1.347889 0.304590 5.228831
+v 1.294148 0.411161 6.388727
+v 1.294148 0.405980 5.228355
+v 1.221662 0.500120 6.388309
+v 1.221663 0.494936 5.227938
+v 1.133213 0.573224 6.387966
+v 1.133212 0.568041 5.227594
+v 1.032202 0.627670 6.387711
+v 1.032202 0.622487 5.227339
+v 0.922510 0.661364 6.387552
+v 0.922510 0.656181 5.227180
+v 0.808350 0.673008 6.387497
+v 0.808351 0.667827 5.227125
+v 0.694112 0.662162 6.387548
+v 0.694114 0.656978 5.227177
+v 0.584189 0.629235 6.387703
+v 0.584189 0.624051 5.227331
+v 0.482798 0.575494 6.387955
+v 0.482799 0.570312 5.227584
+v 0.393842 0.503009 6.388296
+v 0.393842 0.497827 5.227924
+v 0.320737 0.414561 6.388711
+v 0.320736 0.409379 5.228340
+v 0.266289 0.313551 6.389186
+v 0.266290 0.308367 5.228814
+v 0.232596 0.203858 5.864219
+v 0.232596 0.198676 5.229330
+v 0.220950 0.089702 5.864219
+v 0.220951 0.084519 5.229865
+v 0.231799 -0.024533 5.862726
+v 0.231799 -0.029716 5.230402
+v 0.264725 -0.134459 5.863242
+v 0.264724 -0.139641 5.230918
+v 0.318466 -0.235846 5.863719
+v 0.318465 -0.241029 5.231395
+v 0.390952 -0.324803 5.864136
+v 0.390953 -0.329985 5.231813
+v 0.479402 -0.397909 5.864480
+v 0.479401 -0.403091 5.232156
+v 0.580414 -0.452354 5.864735
+v 0.580413 -0.457536 5.232411
+v 0.690105 -0.486047 5.864894
+v 0.690106 -0.491229 5.232570
+v 0.804264 -0.497692 5.864949
+v 0.804263 -0.502876 5.232625
+v 0.918500 -0.486845 5.864897
+v 0.918501 -0.492027 5.232574
+v 1.028426 -0.453917 5.864743
+v 1.028425 -0.459100 5.232419
+v 1.129816 -0.400180 5.864491
+v 1.129816 -0.405360 5.232167
+v 1.218773 -0.327692 5.864150
+v 1.218772 -0.332875 5.231826
+v 1.291878 -0.239244 5.863734
+v 1.291878 -0.244427 5.231411
+v 1.346324 -0.138234 5.863259
+v 1.346325 -0.143416 5.230936
+v 1.380017 -0.028543 5.862744
+v 1.380018 -0.033725 5.230421
+v 1.391665 0.085615 5.864237
+v 1.391664 0.080432 5.229884
+v -0.966289 1.760967 5.864285
+v -0.966289 1.758691 5.594683
+v -0.979322 1.804477 6.389298
+v -0.979322 1.802200 5.594215
+v -1.000594 1.844609 6.388865
+v -1.000594 1.842333 5.593781
+v -1.029285 1.879819 6.388486
+v -1.029285 1.877545 5.593402
+v -1.064296 1.908756 6.388174
+v -1.064296 1.906481 5.593091
+v -1.104278 1.930307 6.387940
+v -1.104278 1.928033 5.592857
+v -1.147697 1.943644 6.387797
+v -1.147697 1.941369 5.592714
+v -1.192884 1.948253 6.387748
+v -1.192883 1.945979 5.592665
+v -1.238102 1.943959 6.387794
+v -1.238102 1.941683 5.592710
+v -1.281613 1.930927 6.387936
+v -1.281613 1.928651 5.592852
+v -1.321745 1.909655 6.388164
+v -1.321746 1.907380 5.593081
+v -1.356956 1.880964 6.388473
+v -1.356957 1.878689 5.593389
+v -1.385893 1.845954 6.388850
+v -1.385894 1.843678 5.593767
+v -1.407445 1.805971 6.389282
+v -1.407444 1.803696 5.594199
+v -1.420781 1.762553 5.864267
+v -1.420781 1.760277 5.594666
+v -1.425477 1.715373 5.864237
+v -1.425391 1.715111 5.595152
+v -1.420964 1.671415 5.862653
+v -1.421102 1.669900 5.595598
+v -1.408062 1.628632 5.863041
+v -1.408066 1.626369 5.596006
+v -1.386789 1.588502 5.863426
+v -1.386796 1.586236 5.596392
+v -1.358097 1.553291 5.863764
+v -1.358103 1.551024 5.596729
+v -1.323087 1.524355 5.864041
+v -1.323093 1.522085 5.597005
+v -1.283105 1.502807 5.864248
+v -1.283110 1.500534 5.597212
+v -1.239687 1.489471 5.864375
+v -1.239690 1.487197 5.597339
+v -1.194502 1.484861 5.864418
+v -1.194502 1.482586 5.597383
+v -1.149285 1.489154 5.864378
+v -1.149282 1.486880 5.597343
+v -1.105775 1.502187 5.864253
+v -1.105771 1.499915 5.597218
+v -1.065643 1.523457 5.864049
+v -1.065637 1.521187 5.597014
+v -1.030433 1.552148 5.863774
+v -1.030426 1.549879 5.596738
+v -1.001496 1.587157 5.863439
+v -1.001489 1.584891 5.596403
+v -0.979944 1.627138 5.863057
+v -0.979939 1.624875 5.596019
+v -0.966742 1.669832 5.862668
+v -0.966598 1.668314 5.595614
+v -0.961923 1.713755 5.864254
+v -0.961995 1.713493 5.595167
+v -0.956066 1.762831 5.864238
+v -0.956066 1.760688 5.229348
+v -0.969685 1.808297 6.389203
+v -0.969685 1.806154 5.228831
+v -0.991913 1.850233 6.388727
+v -0.991913 1.848090 5.228355
+v -1.021894 1.887028 6.388309
+v -1.021894 1.884884 5.227938
+v -1.058478 1.917265 6.387966
+v -1.058479 1.915121 5.227594
+v -1.100258 1.939785 6.387711
+v -1.100258 1.937642 5.227339
+v -1.145629 1.953721 6.387552
+v -1.145629 1.951578 5.227180
+v -1.192848 1.958538 6.387497
+v -1.192847 1.956395 5.227125
+v -1.240099 1.954051 6.387548
+v -1.240098 1.951908 5.227177
+v -1.285565 1.940433 6.387703
+v -1.285565 1.938288 5.227331
+v -1.327502 1.918204 6.387955
+v -1.327502 1.916061 5.227584
+v -1.364296 1.888223 6.388296
+v -1.364296 1.886080 5.227924
+v -1.394534 1.851640 6.388711
+v -1.394534 1.849496 5.228340
+v -1.417054 1.809860 6.389186
+v -1.417054 1.807716 5.228814
+v -1.430991 1.764489 5.864219
+v -1.430990 1.762345 5.229330
+v -1.435807 1.717272 5.864219
+v -1.435807 1.715128 5.229865
+v -1.431320 1.670022 5.862726
+v -1.431320 1.667878 5.230402
+v -1.417701 1.624554 5.863242
+v -1.417701 1.622411 5.230918
+v -1.395473 1.582619 5.863719
+v -1.395473 1.580475 5.231395
+v -1.365491 1.545825 5.864136
+v -1.365491 1.543681 5.231813
+v -1.328907 1.515587 5.864480
+v -1.328907 1.513443 5.232156
+v -1.287126 1.493068 5.864735
+v -1.287127 1.490924 5.232411
+v -1.241756 1.479131 5.864894
+v -1.241756 1.476988 5.232570
+v -1.194538 1.474315 5.864949
+v -1.194538 1.472170 5.232625
+v -1.147288 1.478801 5.864897
+v -1.147287 1.476658 5.232574
+v -1.101820 1.492421 5.864743
+v -1.101821 1.490277 5.232419
+v -1.059884 1.514648 5.864491
+v -1.059884 1.512505 5.232167
+v -1.023089 1.544630 5.864150
+v -1.023090 1.542486 5.231826
+v -0.992852 1.581213 5.863734
+v -0.992852 1.579070 5.231411
+v -0.970332 1.622993 5.863259
+v -0.970331 1.620850 5.230936
+v -0.956396 1.668364 5.862744
+v -0.956395 1.666220 5.230421
+v -0.951578 1.715581 5.864237
+v -0.951578 1.713438 5.229884
+v -0.643901 0.195342 5.864285
+v -0.643902 0.189842 5.594683
+v -0.675411 0.300537 6.389298
+v -0.675412 0.295033 5.594215
+v -0.726840 0.397562 6.388865
+v -0.726840 0.392062 5.593781
+v -0.796207 0.482692 6.388486
+v -0.796206 0.477191 5.593402
+v -0.880851 0.552651 6.388174
+v -0.880852 0.547151 5.593091
+v -0.977517 0.604755 6.387940
+v -0.977515 0.599256 5.592857
+v -1.082489 0.636999 6.387797
+v -1.082489 0.631500 5.592714
+v -1.191737 0.648142 6.387748
+v -1.191736 0.642644 5.592665
+v -1.301062 0.637761 6.387794
+v -1.301060 0.632259 5.592710
+v -1.406255 0.606253 6.387936
+v -1.406256 0.600751 5.592852
+v -1.503284 0.554824 6.388164
+v -1.503284 0.549324 5.593081
+v -1.588412 0.485460 6.388473
+v -1.588414 0.479957 5.593389
+v -1.658372 0.400816 6.388850
+v -1.658375 0.395314 5.593767
+v -1.710479 0.304149 6.389282
+v -1.710478 0.298648 5.594199
+v -1.742722 0.199179 5.864267
+v -1.742722 0.193676 5.594666
+v -1.754074 0.085112 5.864237
+v -1.753866 0.084478 5.595152
+v -1.743164 -0.021166 5.862653
+v -1.743496 -0.024828 5.595598
+v -1.711969 -0.124601 5.863041
+v -1.711981 -0.130073 5.596006
+v -1.660540 -0.221624 5.863426
+v -1.660555 -0.227101 5.596392
+v -1.591172 -0.306751 5.863764
+v -1.591185 -0.312234 5.596729
+v -1.506527 -0.376709 5.864041
+v -1.506543 -0.382199 5.597005
+v -1.409864 -0.428808 5.864248
+v -1.409876 -0.434301 5.597212
+v -1.304893 -0.461050 5.864375
+v -1.304900 -0.466548 5.597339
+v -1.195649 -0.472194 5.864418
+v -1.195649 -0.477695 5.597383
+v -1.086329 -0.461815 5.864378
+v -1.086321 -0.467312 5.597343
+v -0.981136 -0.430305 5.864253
+v -0.981126 -0.435800 5.597218
+v -0.884108 -0.378882 5.864049
+v -0.884094 -0.384369 5.597014
+v -0.798981 -0.309516 5.863774
+v -0.798965 -0.315000 5.596738
+v -0.729021 -0.224876 5.863439
+v -0.729004 -0.230353 5.596403
+v -0.676914 -0.128213 5.863057
+v -0.676902 -0.133684 5.596019
+v -0.644996 -0.024994 5.862668
+v -0.644650 -0.028661 5.595614
+v -0.633345 0.081199 5.864254
+v -0.633519 0.080568 5.595167
+v -0.619185 0.199851 5.864238
+v -0.619185 0.194668 5.229348
+v -0.652111 0.309774 6.389203
+v -0.652111 0.304590 5.228831
+v -0.705852 0.411161 6.388727
+v -0.705852 0.405980 5.228355
+v -0.778338 0.500120 6.388309
+v -0.778337 0.494936 5.227938
+v -0.866787 0.573224 6.387966
+v -0.866788 0.568041 5.227594
+v -0.967798 0.627670 6.387711
+v -0.967798 0.622487 5.227339
+v -1.077490 0.661364 6.387552
+v -1.077490 0.656180 5.227180
+v -1.191650 0.673008 6.387497
+v -1.191649 0.667827 5.227125
+v -1.305888 0.662162 6.387548
+v -1.305886 0.656978 5.227177
+v -1.415811 0.629236 6.387703
+v -1.415811 0.624051 5.227331
+v -1.517202 0.575494 6.387955
+v -1.517201 0.570312 5.227584
+v -1.606158 0.503009 6.388296
+v -1.606158 0.497827 5.227924
+v -1.679263 0.414561 6.388711
+v -1.679264 0.409379 5.228340
+v -1.733711 0.313551 6.389186
+v -1.733710 0.308368 5.228814
+v -1.767405 0.203858 5.864219
+v -1.767404 0.198676 5.229330
+v -1.779050 0.089702 5.864219
+v -1.779049 0.084519 5.229865
+v -1.768201 -0.024533 5.862726
+v -1.768202 -0.029716 5.230402
+v -1.735275 -0.134459 5.863242
+v -1.735276 -0.139641 5.230918
+v -1.681534 -0.235847 5.863719
+v -1.681535 -0.241029 5.231395
+v -1.609048 -0.324803 5.864136
+v -1.609047 -0.329986 5.231813
+v -1.520598 -0.397909 5.864480
+v -1.520599 -0.403091 5.232156
+v -1.419586 -0.452353 5.864735
+v -1.419587 -0.457536 5.232411
+v -1.309895 -0.486047 5.864894
+v -1.309894 -0.491229 5.232570
+v -1.195736 -0.497692 5.864949
+v -1.195737 -0.502877 5.232625
+v -1.081500 -0.486845 5.864897
+v -1.081499 -0.492027 5.232574
+v -0.971574 -0.453917 5.864743
+v -0.971575 -0.459100 5.232419
+v -0.870184 -0.400180 5.864491
+v -0.870184 -0.405360 5.232167
+v -0.781227 -0.327693 5.864150
+v -0.781228 -0.332875 5.231826
+v -0.708122 -0.239244 5.863734
+v -0.708122 -0.244427 5.231411
+v -0.653676 -0.138234 5.863259
+v -0.653675 -0.143416 5.230936
+v -0.619983 -0.028543 5.862744
+v -0.619982 -0.033725 5.230421
+v -0.608335 0.085615 5.864237
+v -0.608336 0.080432 5.229884
+v -0.951578 -1.572011 5.229884
+v -0.951578 -1.569868 5.864237
+v -0.956395 -1.619229 5.230421
+v -0.956396 -1.617086 5.862744
+v -0.970331 -1.664599 5.230936
+v -0.970332 -1.662456 5.863259
+v -0.992852 -1.706379 5.231411
+v -0.992852 -1.704236 5.863734
+v -1.023090 -1.742963 5.231826
+v -1.023089 -1.740819 5.864150
+v -1.059884 -1.772945 5.232167
+v -1.059884 -1.770802 5.864491
+v -1.101821 -1.795172 5.232419
+v -1.101820 -1.793028 5.864743
+v -1.147287 -1.808791 5.232574
+v -1.147288 -1.806648 5.864897
+v -1.194538 -1.813279 5.232625
+v -1.194538 -1.811135 5.864949
+v -1.241756 -1.808461 5.232570
+v -1.241756 -1.806318 5.864894
+v -1.287127 -1.794525 5.232411
+v -1.287126 -1.792382 5.864735
+v -1.328907 -1.772006 5.232156
+v -1.328907 -1.769862 5.864480
+v -1.365491 -1.741768 5.231813
+v -1.365491 -1.739625 5.864136
+v -1.395473 -1.704974 5.231395
+v -1.395473 -1.702831 5.863719
+v -1.417701 -1.663038 5.230918
+v -1.417701 -1.660895 5.863242
+v -1.431320 -1.617571 5.230402
+v -1.431320 -1.615427 5.862726
+v -1.435807 -1.570321 5.229865
+v -1.435807 -1.568178 5.864219
+v -1.430990 -1.523104 5.229330
+v -1.430991 -1.520960 5.864219
+v -1.417054 -1.477733 5.228814
+v -1.417054 -1.475590 6.389186
+v -1.394534 -1.435953 5.228340
+v -1.394534 -1.433810 6.388711
+v -1.364296 -1.399369 5.227924
+v -1.364296 -1.397226 6.388296
+v -1.327502 -1.369388 5.227584
+v -1.327502 -1.367245 6.387955
+v -1.285565 -1.347161 5.227331
+v -1.285565 -1.345016 6.387703
+v -1.240098 -1.333542 5.227177
+v -1.240099 -1.331398 6.387548
+v -1.192847 -1.329054 5.227125
+v -1.192848 -1.326911 6.387497
+v -1.145629 -1.333871 5.227180
+v -1.145629 -1.331728 6.387552
+v -1.100258 -1.347808 5.227339
+v -1.100258 -1.345664 6.387711
+v -1.058479 -1.370328 5.227594
+v -1.058478 -1.368184 6.387966
+v -1.021894 -1.400565 5.227938
+v -1.021894 -1.398421 6.388309
+v -0.991913 -1.437359 5.228355
+v -0.991913 -1.435216 6.388727
+v -0.969685 -1.479295 5.228831
+v -0.969685 -1.477152 6.389203
+v -0.956066 -1.524762 5.229348
+v -0.956066 -1.522618 5.864238
+v -0.961995 -1.571956 5.595167
+v -0.961923 -1.571694 5.864254
+v -0.966598 -1.617135 5.595614
+v -0.966742 -1.615618 5.862668
+v -0.979939 -1.660574 5.596019
+v -0.979944 -1.658311 5.863057
+v -1.001489 -1.700558 5.596403
+v -1.001496 -1.698292 5.863439
+v -1.030426 -1.735570 5.596738
+v -1.030433 -1.733301 5.863774
+v -1.065637 -1.764262 5.597014
+v -1.065643 -1.761992 5.864049
+v -1.105771 -1.785535 5.597218
+v -1.105775 -1.783262 5.864253
+v -1.149282 -1.798569 5.597343
+v -1.149285 -1.796295 5.864378
+v -1.194502 -1.802863 5.597383
+v -1.194502 -1.800588 5.864418
+v -1.239690 -1.798252 5.597339
+v -1.239687 -1.795979 5.864375
+v -1.283110 -1.784915 5.597212
+v -1.283105 -1.782643 5.864248
+v -1.323093 -1.763364 5.597005
+v -1.323087 -1.761094 5.864041
+v -1.358103 -1.734425 5.596729
+v -1.358097 -1.732158 5.863764
+v -1.386796 -1.699213 5.596392
+v -1.386789 -1.696948 5.863426
+v -1.408066 -1.659081 5.596006
+v -1.408062 -1.656817 5.863041
+v -1.421102 -1.615549 5.595598
+v -1.420964 -1.614034 5.862653
+v -1.425391 -1.570338 5.595152
+v -1.425477 -1.570076 5.864237
+v -1.420781 -1.525172 5.594666
+v -1.420781 -1.522896 5.864267
+v -1.407444 -1.481753 5.594199
+v -1.407445 -1.479478 6.389282
+v -1.385894 -1.441771 5.593767
+v -1.385893 -1.439495 6.388850
+v -1.356957 -1.406760 5.593389
+v -1.356956 -1.404485 6.388473
+v -1.321746 -1.378070 5.593081
+v -1.321745 -1.375794 6.388164
+v -1.281613 -1.356798 5.592852
+v -1.281613 -1.354522 6.387936
+v -1.238102 -1.343766 5.592710
+v -1.238102 -1.341490 6.387794
+v -1.192883 -1.339470 5.592665
+v -1.192884 -1.337197 6.387748
+v -1.147697 -1.344080 5.592714
+v -1.147697 -1.341805 6.387797
+v -1.104278 -1.357417 5.592857
+v -1.104278 -1.355142 6.387940
+v -1.064296 -1.378968 5.593091
+v -1.064296 -1.376693 6.388174
+v -1.029285 -1.407905 5.593402
+v -1.029285 -1.405630 6.388486
+v -1.000594 -1.443116 5.593781
+v -1.000594 -1.440841 6.388865
+v -0.979322 -1.483249 5.594215
+v -0.979322 -1.480973 6.389298
+v -0.966289 -1.526758 5.594683
+v -0.966289 -1.524483 5.864285
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.797953 0.896311
+vt 0.741726 0.913364
+vt 0.594127 0.834472
+vt 0.577066 0.778233
+vt 0.655948 0.630639
+vt 0.770682 0.619333
+vt 0.859798 0.692466
+vt 0.876858 0.748707
+vt 0.683240 0.907605
+vt 0.655960 0.896305
+vt 0.582826 0.719746
+vt 0.610530 0.667916
+vt 0.683222 0.619339
+vt 0.822512 0.647036
+vt 0.843392 0.667915
+vt 0.871097 0.807194
+vt 0.843391 0.859025
+vt 0.770685 0.907604
+vt 0.712199 0.913364
+vt 0.631409 0.879901
+vt 0.610530 0.859023
+vt 0.582827 0.807192
+vt 0.577066 0.748705
+vt 0.594126 0.692467
+vt 0.631409 0.647037
+vt 0.712194 0.613573
+vt 0.741722 0.613573
+vt 0.797962 0.630631
+vt 0.871098 0.719747
+vt 0.876858 0.778235
+vt 0.859797 0.834474
+vt 0.822501 0.879912
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vn 0.094500 -0.995500 0.006900
+vn -0.000000 0.004400 1.000000
+vn 0.000000 0.004500 1.000000
+vn 0.000000 0.004000 1.000000
+vn 0.000300 0.004100 1.000000
+vn -0.000200 0.004400 1.000000
+vn 0.000100 0.004500 1.000000
+vn -0.000000 0.004600 1.000000
+vn -0.000100 0.004400 1.000000
+vn -0.000300 0.003800 1.000000
+vn 0.000100 0.004000 1.000000
+vn -0.000100 0.003900 1.000000
+vn -0.000000 0.004100 1.000000
+vn -0.000200 0.004000 1.000000
+vn -0.001200 0.004200 1.000000
+vn -0.995500 -0.094600 0.001900
+vn 0.994800 -0.101500 0.002100
+vn 0.995500 0.094400 -0.002500
+vn -0.994800 0.101400 -0.002700
+vn 0.995500 0.094500 -0.000800
+vn -0.994800 0.101500 -0.000800
+vn -0.995500 -0.094500 0.000800
+vn 0.994800 -0.101500 0.000800
+vn -0.770700 0.637000 -0.013100
+vn -0.008000 0.009000 0.999900
+vn -0.002300 0.006600 1.000000
+vn -0.000500 0.010000 1.000000
+vn 0.002400 0.009000 1.000000
+vn -0.001400 0.009500 1.000000
+vn -0.002300 0.005400 1.000000
+vn 0.003000 0.008100 1.000000
+vn 0.000600 0.010100 0.999900
+vn -0.002400 0.007600 1.000000
+vn 0.001500 0.009400 1.000000
+vn -0.002100 0.008700 1.000000
+vn 0.003100 0.007000 1.000000
+vn 0.002800 0.005900 1.000000
+vn -0.001800 0.005700 1.000000
+vn 0.001800 0.000200 1.000000
+vn 0.003100 -0.013400 0.999900
+vn 0.004900 -0.014400 0.999900
+vn -0.182400 -0.960000 0.212300
+vn -0.008800 0.012000 0.999900
+vn 0.008800 0.011900 0.999900
+vn -0.008500 0.015200 0.999800
+vn -0.007000 0.017900 0.999800
+vn -0.004600 0.019900 0.999800
+vn 0.001600 0.020800 0.999800
+vn 0.004600 0.019800 0.999800
+vn 0.007100 0.017800 0.999800
+vn 0.008500 0.015000 0.999900
+vn 0.361500 -0.909800 0.204000
+vn 0.007900 0.008900 0.999900
+vn 0.006200 0.005600 1.000000
+vn -0.000100 0.004300 1.000000
+vn -0.995800 -0.092100 0.000900
+vn 0.637100 0.770800 -0.003400
+vn -0.631700 0.775200 -0.003500
+vn 0.770800 -0.637100 0.004400
+vn -0.468300 0.883500 -0.003900
+vn 0.287000 -0.957900 0.007900
+vn 0.286900 -0.957900 0.006600
+vn -0.094500 0.995500 -0.004400
+vn -0.101500 -0.994800 0.006900
+vn -0.286900 0.957900 -0.004300
+vn -0.474500 -0.880200 0.006100
+vn -0.637100 -0.770800 0.005300
+vn 0.880300 -0.474500 0.003300
+vn -0.883600 -0.468300 0.003200
+vn -0.955100 -0.296300 0.002100
+vn 0.995100 -0.099000 0.001000
+vn 0.994800 0.102100 0.000500
+vn -0.880200 0.474500 -0.009800
+vn -0.001500 0.020800 0.999800
+vn -0.955400 0.295400 -0.005300
+vn -0.000800 -0.000200 1.000000
+vn -0.631600 0.775100 -0.016000
+vn -0.468200 0.883400 -0.018200
+vn -0.770800 0.637100 -0.002800
+vn 0.468300 -0.883500 0.007200
+vn 0.293600 0.955700 -0.019700
+vn 0.474400 0.880100 -0.018100
+vn 0.637000 0.770700 -0.015900
+vn 0.775200 0.631600 -0.013000
+vn 0.883500 0.468300 -0.009600
+vn 0.957400 0.288700 -0.005200
+vn -0.994000 0.109100 0.000400
+vn 0.770800 -0.637100 0.005200
+vn 0.631700 -0.775200 0.006400
+vn -0.880300 0.474500 -0.002100
+vn -0.094500 0.995300 -0.020500
+vn -0.775200 -0.631700 0.004400
+vn 0.468300 -0.883500 0.006100
+vn 0.094500 -0.995500 0.008200
+vn 0.101500 0.994800 -0.004400
+vn 0.293600 0.955900 -0.004300
+vn 0.474500 0.880300 -0.003900
+vn 0.952900 -0.303200 0.002100
+vn 0.775200 0.631700 -0.002800
+vn 0.883600 0.468300 -0.002100
+vn 0.956200 0.292700 -0.001300
+vn -0.995500 -0.094600 0.000800
+vn -0.286900 0.957800 -0.019700
+vn 0.955900 -0.293600 0.002400
+vn 0.880300 -0.474500 0.003900
+vn -0.955900 0.293600 -0.002400
+vn 0.101500 0.994600 -0.020500
+vn 0.631700 -0.775200 0.005400
+vn -0.293600 -0.955900 0.006600
+vn -0.101500 -0.994800 0.008200
+vn -0.293600 -0.955900 0.007800
+vn -0.474500 -0.880200 0.007200
+vn -0.637100 -0.770800 0.006300
+vn -0.775200 -0.631700 0.005200
+vn -0.883600 -0.468300 0.003800
+vn -0.958000 -0.286900 0.002400
+vn 0.094600 -0.995500 0.006900
+vn -0.770800 0.637000 -0.013100
+vn -0.005700 0.007000 1.000000
+vn -0.003100 0.007000 1.000000
+vn -0.000500 0.010100 0.999900
+vn 0.002100 0.008600 1.000000
+vn -0.001600 0.009800 1.000000
+vn -0.006300 0.005700 1.000000
+vn 0.002400 0.007600 1.000000
+vn 0.000500 0.010000 1.000000
+vn -0.003000 0.008100 1.000000
+vn 0.001600 0.009700 1.000000
+vn -0.002500 0.009100 1.000000
+vn 0.002300 0.006600 1.000000
+vn 0.001800 0.005700 1.000000
+vn -0.002800 0.006000 1.000000
+vn 0.000700 -0.000200 1.000000
+vn -0.005100 -0.014400 0.999900
+vn -0.003200 -0.013400 0.999900
+vn -0.368000 -0.907200 0.204000
+vn -0.007300 0.010000 0.999900
+vn 0.007200 0.009900 0.999900
+vn -0.007600 0.013300 0.999900
+vn -0.006600 0.016400 0.999800
+vn -0.004500 0.018900 0.999800
+vn 0.001700 0.020400 0.999800
+vn 0.004600 0.018800 0.999800
+vn 0.006600 0.016300 0.999800
+vn 0.007600 0.013100 0.999900
+vn 0.175700 -0.961300 0.212300
+vn 0.005700 0.007000 1.000000
+vn 0.002200 0.005400 1.000000
+vn -0.468300 0.883600 -0.003900
+vn -0.957900 -0.286900 0.005900
+vn -0.880300 0.474400 -0.009800
+vn -0.001600 0.020400 0.999800
+vn -0.955900 0.293500 -0.006100
+vn -0.002000 0.000200 1.000000
+vn -0.468300 0.883400 -0.018200
+vn 0.637100 0.770600 -0.015900
+vn 0.883500 0.468200 -0.009700
+vn 0.958000 0.286800 -0.005900
+vn 0.955900 -0.293600 0.006000
+vn 0.957900 0.286900 -0.002300
+vn -0.286900 0.957700 -0.019700
+vn -0.954100 0.299500 -0.001300
+vn -0.002400 0.006600 1.000000
+vn -0.008900 0.012000 0.999900
+vn -0.003000 0.007000 1.000000
+vn 0.002500 0.007600 1.000000
+vn 0.006700 0.016300 0.999800
+vn -0.001900 0.000200 1.000000
+vn 0.000200 0.010900 0.999900
+vn -0.019300 0.021700 0.999600
+vn -0.000000 0.009600 1.000000
+vn -0.000600 0.009200 1.000000
+vn 0.880300 -0.474500 0.001600
+vn 0.000100 0.010700 0.999900
+vn -0.003000 0.010200 0.999900
+vn -0.955400 0.295400 -0.002200
+vn -0.995500 -0.094600 0.000300
+vn -0.880300 0.474500 -0.000900
+vn 0.631700 -0.775200 0.002600
+vn 0.000300 0.009700 1.000000
+vn 0.952900 -0.303200 0.000900
+vn 0.000100 0.009600 1.000000
+vn 0.293600 0.955900 -0.001800
+vn 0.637100 0.770800 -0.001400
+vn 0.020700 0.036300 0.999100
+vn -0.094500 0.995500 -0.001800
+vn -0.775200 -0.631700 0.001800
+vn 0.994800 -0.101500 0.000900
+vn -0.101500 -0.994800 0.002800
+vn -0.000000 0.010800 0.999900
+vn 0.000100 0.009700 1.000000
+vn -0.000100 0.009900 1.000000
+vn -0.994800 0.101400 -0.001100
+vn 0.883600 0.468300 -0.000900
+vn -0.995800 -0.092100 0.000400
+vn 0.005900 0.021700 0.999700
+vn -0.005100 0.021000 0.999800
+vn -0.011000 0.048000 0.998800
+vn 0.000000 0.010900 0.999900
+vn 0.004000 0.050300 0.998700
+vn 0.994800 0.102100 0.000200
+vn -0.637100 -0.770800 0.002200
+vn 0.094500 -0.995500 0.002800
+vn -0.005500 0.013100 0.999900
+vn 0.094500 -0.995500 0.003400
+vn 0.011600 -0.034800 0.999300
+vn -0.001200 0.024100 0.999700
+vn 0.775200 0.631700 -0.005400
+vn 0.995500 0.094500 -0.000300
+vn -0.775200 -0.631700 0.002100
+vn 0.995500 0.094400 -0.001000
+vn -0.468300 0.883500 -0.007500
+vn -0.005600 0.016000 0.999900
+vn 0.007300 0.019500 0.999800
+vn 0.468300 -0.883500 0.002500
+vn 0.631700 -0.775200 0.002200
+vn -0.003700 0.050300 0.998700
+vn 0.021300 0.028700 0.999400
+vn -0.293600 -0.955900 0.002700
+vn -0.101500 -0.994800 0.003400
+vn -0.004400 0.013800 0.999900
+vn -0.287000 0.957900 -0.008200
+vn 0.101500 0.994800 -0.008500
+vn -0.000100 0.010800 0.999900
+vn -0.880300 0.474500 -0.004000
+vn 0.883600 0.468300 -0.004000
+vn -0.003500 0.023000 0.999700
+vn 0.293600 0.955900 -0.008100
+vn 0.017100 0.042900 0.998900
+vn 0.994800 -0.101500 0.000300
+vn -0.286900 0.957900 -0.001800
+vn -0.995500 -0.094500 0.000300
+vn -0.883600 -0.468300 0.001600
+vn -0.020600 0.036600 0.999100
+vn -0.994000 0.109100 0.000200
+vn -0.000300 0.009700 1.000000
+vn -0.000000 0.011200 0.999900
+vn 0.004400 0.000400 1.000000
+vn 0.770800 -0.637100 0.001800
+vn 0.995100 -0.099000 0.000400
+vn -0.474500 -0.880300 0.002500
+vn -0.637100 -0.770800 0.002600
+vn 0.770800 -0.637100 0.002200
+vn -0.883600 -0.468300 0.001300
+vn 0.101500 0.994800 -0.001800
+vn -0.000100 0.009500 1.000000
+vn 0.000800 0.009900 1.000000
+vn -0.631700 0.775200 -0.006600
+vn 0.956200 0.292700 -0.000500
+vn -0.016900 0.043300 0.998900
+vn 0.637100 0.770800 -0.006600
+vn -0.955900 0.293600 -0.001000
+vn -0.000000 0.010700 0.999900
+vn 0.286900 -0.957900 0.002700
+vn 0.011200 0.047900 0.998800
+vn -0.000300 0.010700 0.999900
+vn 0.367900 -0.925900 0.085900
+vn -0.958000 -0.286900 0.001000
+vn -0.021400 0.029100 0.999300
+vn 0.007400 -0.032300 0.999400
+vn -0.631700 0.775200 -0.001400
+vn -0.293600 -0.955900 0.003200
+vn 0.775200 0.631700 -0.001200
+vn 0.955900 -0.293600 0.001000
+vn -0.994800 0.101500 -0.000300
+vn -0.005800 0.018500 0.999800
+vn 0.006900 0.014300 0.999900
+vn -0.770800 0.637100 -0.001200
+vn 0.474500 0.880300 -0.001600
+vn -0.474500 -0.880300 0.003000
+vn 0.015100 0.013600 0.999800
+vn 0.880300 -0.474500 0.001400
+vn -0.094500 0.995500 -0.008500
+vn -0.185900 -0.978500 0.089500
+vn 0.007600 0.016800 0.999800
+vn 0.003500 0.022800 0.999700
+vn 0.474500 0.880200 -0.007500
+vn -0.770800 0.637100 -0.005400
+vn 0.019100 0.021500 0.999600
+vn -0.000300 0.010400 0.999900
+vn 0.468300 -0.883600 0.003000
+vn 0.957400 0.288700 -0.002100
+vn -0.001800 -0.000500 1.000000
+vn -0.955100 -0.296300 0.000800
+vn 0.287000 -0.957900 0.003200
+vn -0.468300 0.883600 -0.001600
+vn 0.001400 0.024400 0.999700
+vn 0.094600 -0.995500 0.002800
+vn -0.770800 0.637000 -0.005400
+vn -0.013700 0.017000 0.999800
+vn -0.007300 0.016900 0.999800
+vn -0.001300 0.024400 0.999700
+vn 0.005100 0.020900 0.999800
+vn -0.003800 0.023600 0.999700
+vn -0.015100 0.013800 0.999800
+vn 0.005900 0.018500 0.999800
+vn 0.001300 0.024100 0.999700
+vn -0.007200 0.019600 0.999800
+vn 0.004000 0.023500 0.999700
+vn -0.006000 0.022000 0.999700
+vn 0.005500 0.015900 0.999900
+vn 0.004400 0.013700 0.999900
+vn -0.006700 0.014400 0.999900
+vn 0.001800 -0.000500 1.000000
+vn -0.012400 -0.034700 0.999300
+vn -0.007700 -0.032300 0.999400
+vn -0.374500 -0.923300 0.085900
+vn -0.017600 0.024100 0.999600
+vn 0.017500 0.023800 0.999600
+vn -0.018300 0.032100 0.999300
+vn -0.016000 0.039700 0.999100
+vn -0.010800 0.045700 0.998900
+vn 0.004100 0.049300 0.998800
+vn 0.011000 0.045400 0.998900
+vn 0.016000 0.039400 0.999100
+vn 0.018400 0.031700 0.999300
+vn 0.179100 -0.979700 0.089500
+vn 0.013700 0.016800 0.999800
+vn 0.005400 0.012900 0.999900
+vn -0.957900 -0.286900 0.002400
+vn -0.880300 0.474400 -0.004000
+vn -0.003800 0.049400 0.998800
+vn -0.955900 0.293500 -0.002500
+vn -0.004700 0.000500 1.000000
+vn 0.637100 0.770700 -0.006600
+vn 0.958000 0.286800 -0.002400
+vn 0.468300 -0.883600 0.002500
+vn 0.955900 -0.293600 0.002500
+vn 0.957900 0.286900 -0.001000
+vn -0.954100 0.299500 -0.000600
+vn -0.004500 0.013800 0.999900
+vn 0.007500 0.016800 0.999800
+vn -0.000200 0.010700 0.999900
+vn 0.000100 0.010900 0.999900
+vn 0.004300 0.000400 1.000000
+vn -0.006600 0.014400 0.999900
+vn 0.000000 0.009500 1.000000
+vn 0.005600 0.015900 0.999900
+vn -0.019200 0.021700 0.999600
+vn -0.000500 0.009200 1.000000
+vn 0.003900 0.050300 0.998700
+vn 0.016100 0.039400 0.999100
+vn 0.000200 0.009700 1.000000
+vn -0.015900 0.039700 0.999100
+vn -0.004600 0.000500 1.000000
+vn 0.003900 0.023500 0.999700
+vn 0.015000 0.013600 0.999800
+vn 0.020600 0.036300 0.999100
+g VSLampen_Cube.004_Yellow
+usemtl Yellow
+s off
+f 16/1/1 15/2/1 17/3/1
+f 64/4/2 4/5/2 16/6/2
+f 16/6/3 20/7/3 32/8/3
+f 64/4/4 40/9/4 48/10/4
+f 48/10/4 52/11/4 64/4/4
+f 16/6/3 4/5/3 8/12/3
+f 8/12/3 10/13/3 16/6/3
+f 32/8/3 20/7/3 24/14/3
+f 24/14/2 28/15/2 32/8/2
+f 32/8/5 34/16/5 40/9/5
+f 40/9/4 44/17/4 46/18/4
+f 64/4/4 52/11/4 56/19/4
+f 56/19/4 60/20/4 64/4/4
+f 64/4/6 2/21/6 4/5/6
+f 4/5/7 6/22/7 8/12/7
+f 16/6/3 10/13/3 12/23/3
+f 12/23/3 14/24/3 16/6/3
+f 16/6/8 18/25/8 20/7/8
+f 20/7/2 22/26/2 24/14/2
+f 24/14/9 26/27/9 28/15/9
+f 28/15/7 30/28/7 32/8/7
+f 40/9/10 34/16/10 36/29/10
+f 36/29/11 38/30/11 40/9/11
+f 40/9/12 42/31/12 44/17/12
+f 40/9/4 46/18/4 48/10/4
+f 48/10/13 50/32/13 52/11/13
+f 52/11/4 54/33/4 56/19/4
+f 56/19/14 58/34/14 60/20/14
+f 60/20/15 62/35/15 64/4/15
+f 2/36/16 64/37/16 1/38/16
+f 30/39/17 29/40/17 32/41/17
+f 34/42/18 32/41/18 33/43/18
+f 62/44/19 61/45/19 64/37/19
+f 66/46/20 65/47/20 128/48/20
+f 94/49/21 96/50/21 93/51/21
+f 98/52/22 97/53/22 96/50/22
+f 126/54/23 128/48/23 125/55/23
+f 55/56/24 57/57/24 58/58/24
+f 57/59/25 121/60/25 123/61/25
+f 87/62/26 89/63/26 25/64/26
+f 79/65/27 81/66/27 17/67/27
+f 75/68/28 11/69/28 9/70/28
+f 81/66/29 83/71/29 19/72/29
+f 123/61/30 125/73/30 61/74/30
+f 73/75/31 9/70/31 7/76/31
+f 79/65/32 15/77/32 13/78/32
+f 85/79/33 87/62/33 23/80/33
+f 11/69/34 75/68/34 77/81/34
+f 83/71/35 85/79/35 21/82/35
+f 71/83/36 7/76/36 5/84/36
+f 69/85/37 5/84/37 3/86/37
+f 89/63/38 91/87/38 27/88/38
+f 127/89/39 65/90/39 1/91/39
+f 125/73/40 127/89/40 63/92/40
+f 97/93/41 33/94/41 31/95/41
+f 91/87/42 93/96/42 29/97/42
+f 55/98/43 119/99/43 121/60/43
+f 101/100/44 103/101/44 39/102/44
+f 53/103/45 117/104/45 119/99/45
+f 51/105/46 115/106/46 117/104/46
+f 49/107/47 113/108/47 115/106/47
+f 109/109/48 111/110/48 47/111/48
+f 107/112/49 109/109/49 45/113/49
+f 105/114/50 107/112/50 43/115/50
+f 103/101/51 105/114/51 41/116/51
+f 67/117/52 3/86/52 1/91/52
+f 99/118/53 101/100/53 37/119/53
+f 99/118/54 35/120/54 33/94/54
+f 40/9/55 64/4/55 16/6/55
+f 64/37/56 63/121/56 1/38/56
+f 73/122/57 71/123/57 72/124/57
+f 88/125/58 87/126/58 85/127/58
+f 24/128/59 23/129/59 25/130/59
+f 86/131/60 85/127/60 83/132/60
+f 116/133/61 115/134/61 113/135/61
+f 18/136/62 17/3/62 19/137/62
+f 82/138/63 81/139/63 79/140/63
+f 13/141/64 15/2/64 16/1/64
+f 84/142/65 83/132/65 81/143/65
+f 9/144/66 11/145/66 12/146/66
+f 7/147/67 9/144/67 10/148/67
+f 26/149/68 25/130/68 27/150/68
+f 3/151/69 5/152/69 6/153/69
+f 1/38/70 3/151/70 4/154/70
+f 29/40/71 31/155/71 32/41/71
+f 32/41/72 31/155/72 33/43/72
+f 57/57/73 59/156/73 60/157/73
+f 47/111/74 111/110/74 113/108/74
+f 59/156/75 61/45/75 62/44/75
+f 95/158/76 31/95/76 29/97/76
+f 53/159/77 55/56/77 56/160/77
+f 51/161/78 53/159/78 54/162/78
+f 90/163/79 89/164/79 87/126/79
+f 118/165/80 117/166/80 115/134/80
+f 44/167/81 43/168/81 45/169/81
+f 42/170/82 41/171/82 43/168/82
+f 40/172/83 39/173/83 41/171/83
+f 38/174/84 37/175/84 39/173/84
+f 36/176/85 35/177/85 37/175/85
+f 34/42/86 33/43/86 35/177/86
+f 61/45/87 63/121/87 64/37/87
+f 65/47/20 127/178/20 128/48/20
+f 122/179/88 121/180/88 119/181/88
+f 120/182/89 119/181/89 117/166/89
+f 92/183/90 91/184/90 89/164/90
+f 47/185/91 49/186/91 50/187/91
+f 5/152/92 7/147/92 8/188/92
+f 20/189/93 19/137/93 21/190/93
+f 114/191/94 113/135/94 111/192/94
+f 79/140/95 77/193/95 78/194/95
+f 77/193/96 75/195/96 76/196/96
+f 75/195/97 73/122/97 74/197/97
+f 28/198/98 27/150/98 29/40/98
+f 71/123/99 69/199/99 70/200/99
+f 69/199/100 67/201/100 68/202/100
+f 68/202/101 67/201/101 65/47/101
+f 96/50/21 95/203/21 93/51/21
+f 97/53/102 95/203/102 96/50/102
+f 49/186/103 51/161/103 52/204/103
+f 126/54/104 125/55/104 123/205/104
+f 124/206/105 123/205/105 121/180/105
+f 92/183/106 94/49/106 93/51/106
+f 46/207/107 45/169/107 47/208/107
+f 22/209/108 21/190/108 23/129/108
+f 11/145/109 13/141/109 14/210/109
+f 111/192/110 109/211/110 110/212/110
+f 109/211/111 107/213/111 108/214/111
+f 107/213/112 105/215/112 106/216/112
+f 105/215/113 103/217/113 104/218/113
+f 103/217/114 101/219/114 102/220/114
+f 101/219/115 99/221/115 100/222/115
+f 99/221/116 97/53/116 98/52/116
+f 128/48/23 127/178/23 125/55/23
+f 18/136/117 16/1/117 17/3/117
+f 56/160/118 55/56/118 58/58/118
+f 59/223/119 57/59/119 123/61/119
+f 23/80/120 87/62/120 25/64/120
+f 15/77/121 79/65/121 17/67/121
+f 73/75/122 75/68/122 9/70/122
+f 17/67/123 81/66/123 19/72/123
+f 59/223/124 123/61/124 61/74/124
+f 71/83/125 73/75/125 7/76/125
+f 77/81/126 79/65/126 13/78/126
+f 21/82/127 85/79/127 23/80/127
+f 13/78/128 11/69/128 77/81/128
+f 19/72/129 83/71/129 21/82/129
+f 69/85/130 71/83/130 5/84/130
+f 67/117/131 69/85/131 3/86/131
+f 25/64/132 89/63/132 27/88/132
+f 63/92/133 127/89/133 1/91/133
+f 61/74/134 125/73/134 63/92/134
+f 95/158/135 97/93/135 31/95/135
+f 27/88/136 91/87/136 29/97/136
+f 57/59/137 55/98/137 121/60/137
+f 37/119/138 101/100/138 39/102/138
+f 55/98/139 53/103/139 119/99/139
+f 53/103/140 51/105/140 117/104/140
+f 51/105/141 49/107/141 115/106/141
+f 45/113/142 109/109/142 47/111/142
+f 43/115/143 107/112/143 45/113/143
+f 41/116/144 105/114/144 43/115/144
+f 39/102/145 103/101/145 41/116/145
+f 65/90/146 67/117/146 1/91/146
+f 35/120/147 99/118/147 37/119/147
+f 97/93/148 99/118/148 33/94/148
+f 32/8/5 40/9/5 16/6/5
+f 74/197/57 73/122/57 72/124/57
+f 86/131/58 88/125/58 85/127/58
+f 26/149/59 24/128/59 25/130/59
+f 84/142/149 86/131/149 83/132/149
+f 114/191/61 116/133/61 113/135/61
+f 20/189/62 18/136/62 19/137/62
+f 80/224/63 82/138/63 79/140/63
+f 14/210/64 13/141/64 16/1/64
+f 82/225/65 84/142/65 81/143/65
+f 10/148/66 9/144/66 12/146/66
+f 8/188/67 7/147/67 10/148/67
+f 28/198/68 26/149/68 27/150/68
+f 4/154/69 3/151/69 6/153/69
+f 2/36/150 1/38/150 4/154/150
+f 58/58/151 57/57/151 60/157/151
+f 49/107/152 47/111/152 113/108/152
+f 60/157/153 59/156/153 62/44/153
+f 93/96/154 95/158/154 29/97/154
+f 54/162/77 53/159/77 56/160/77
+f 52/204/155 51/161/155 54/162/155
+f 88/125/79 90/163/79 87/126/79
+f 116/133/80 118/165/80 115/134/80
+f 46/207/81 44/167/81 45/169/81
+f 44/167/82 42/170/82 43/168/82
+f 42/170/156 40/172/156 41/171/156
+f 40/172/84 38/174/84 39/173/84
+f 38/174/157 36/176/157 37/175/157
+f 36/176/158 34/42/158 35/177/158
+f 120/182/88 122/179/88 119/181/88
+f 118/165/89 120/182/89 117/166/89
+f 90/163/90 92/183/90 89/164/90
+f 48/226/91 47/185/91 50/187/91
+f 6/153/92 5/152/92 8/188/92
+f 22/209/93 20/189/93 21/190/93
+f 112/227/94 114/191/94 111/192/94
+f 80/224/95 79/140/95 78/194/95
+f 78/194/96 77/193/96 76/196/96
+f 76/196/97 75/195/97 74/197/97
+f 30/39/159 28/198/159 29/40/159
+f 72/124/99 71/123/99 70/200/99
+f 70/200/100 69/199/100 68/202/100
+f 66/46/160 68/202/160 65/47/160
+f 50/187/161 49/186/161 52/204/161
+f 124/206/104 126/54/104 123/205/104
+f 122/179/105 124/206/105 121/180/105
+f 91/184/162 92/183/162 93/51/162
+f 48/228/107 46/207/107 47/208/107
+f 24/128/108 22/209/108 23/129/108
+f 12/146/109 11/145/109 14/210/109
+f 112/227/110 111/192/110 110/212/110
+f 110/212/111 109/211/111 108/214/111
+f 108/214/112 107/213/112 106/216/112
+f 106/216/113 105/215/113 104/218/113
+f 104/218/114 103/217/114 102/220/114
+f 102/220/115 101/219/115 100/222/115
+f 100/222/116 99/221/116 98/52/116
+g VSLampen_Cube.004_Green
+usemtl Green
+f 272/1/1 271/2/1 273/3/1
+f 320/4/2 260/5/2 272/6/2
+f 272/6/3 276/7/3 288/8/3
+f 320/4/4 296/9/4 304/10/4
+f 304/10/4 308/11/4 320/4/4
+f 272/6/3 260/5/3 264/12/3
+f 264/12/3 266/13/3 272/6/3
+f 288/8/3 276/7/3 280/14/3
+f 280/14/2 284/15/2 288/8/2
+f 288/8/5 290/16/5 296/9/5
+f 296/9/4 300/17/4 302/18/4
+f 320/4/4 308/11/4 312/19/4
+f 312/19/4 316/20/4 320/4/4
+f 320/4/6 258/21/6 260/5/6
+f 260/5/7 262/22/7 264/12/7
+f 272/6/3 266/13/3 268/23/3
+f 268/23/3 270/24/3 272/6/3
+f 272/6/8 274/25/8 276/7/8
+f 276/7/2 278/26/2 280/14/2
+f 280/14/9 282/27/9 284/15/9
+f 284/15/3 286/28/3 288/8/3
+f 296/9/10 290/16/10 292/29/10
+f 292/29/11 294/30/11 296/9/11
+f 296/9/12 298/31/12 300/17/12
+f 296/9/4 302/18/4 304/10/4
+f 304/10/13 306/32/13 308/11/13
+f 308/11/4 310/33/4 312/19/4
+f 312/19/14 314/34/14 316/20/14
+f 316/20/15 318/35/15 320/4/15
+f 258/36/16 320/37/16 257/38/16
+f 286/39/17 285/40/17 288/41/17
+f 290/42/18 288/41/18 289/43/18
+f 318/44/19 317/45/19 320/37/19
+f 322/46/20 321/47/20 384/48/20
+f 350/49/21 352/50/21 349/51/21
+f 354/52/22 353/53/22 352/50/22
+f 382/54/23 384/48/23 381/55/23
+f 311/56/24 313/57/24 314/58/24
+f 313/59/25 377/60/25 379/61/25
+f 343/62/163 345/63/163 281/64/163
+f 335/65/27 337/66/27 273/67/27
+f 331/68/28 267/69/28 265/70/28
+f 337/66/29 339/71/29 275/72/29
+f 379/61/30 381/73/30 317/74/30
+f 329/75/31 265/70/31 263/76/31
+f 335/65/32 271/77/32 269/78/32
+f 341/79/33 343/62/33 279/80/33
+f 267/69/34 331/68/34 333/81/34
+f 339/71/35 341/79/35 277/82/35
+f 327/83/36 263/76/36 261/84/36
+f 325/85/37 261/84/37 259/86/37
+f 345/63/38 347/87/38 283/88/38
+f 383/89/39 321/90/39 257/91/39
+f 381/73/40 383/89/40 319/92/40
+f 353/93/41 289/94/41 287/95/41
+f 347/87/42 349/96/42 285/97/42
+f 311/98/164 375/99/164 377/60/164
+f 357/100/44 359/101/44 295/102/44
+f 309/103/45 373/104/45 375/99/45
+f 307/105/46 371/106/46 373/104/46
+f 305/107/47 369/108/47 371/106/47
+f 365/109/48 367/110/48 303/111/48
+f 363/112/49 365/109/49 301/113/49
+f 361/114/50 363/112/50 299/115/50
+f 359/101/51 361/114/51 297/116/51
+f 323/117/52 259/86/52 257/91/52
+f 355/118/53 357/100/53 293/119/53
+f 355/118/54 291/120/54 289/94/54
+f 296/9/55 320/4/55 272/6/55
+f 320/37/56 319/121/56 257/38/56
+f 329/122/57 327/123/57 328/124/57
+f 344/125/58 343/126/58 341/127/58
+f 280/128/59 279/129/59 281/130/59
+f 342/131/60 341/127/60 339/132/60
+f 372/133/61 371/134/61 369/135/61
+f 274/136/62 273/3/62 275/137/62
+f 338/138/63 337/139/63 335/140/63
+f 269/141/64 271/2/64 272/1/64
+f 340/142/65 339/132/65 337/143/65
+f 265/144/66 267/145/66 268/146/66
+f 263/147/67 265/144/67 266/148/67
+f 282/149/68 281/130/68 283/150/68
+f 259/151/69 261/152/69 262/153/69
+f 257/38/70 259/151/70 260/154/70
+f 285/40/71 287/155/71 288/41/71
+f 288/41/72 287/155/72 289/43/72
+f 313/57/73 315/156/73 316/157/73
+f 303/111/74 367/110/74 369/108/74
+f 315/156/75 317/45/75 318/44/75
+f 351/158/76 287/95/76 285/97/76
+f 309/159/77 311/56/77 312/160/77
+f 307/161/78 309/159/78 310/162/78
+f 346/163/79 345/164/79 343/126/79
+f 374/165/80 373/166/80 371/134/80
+f 300/167/81 299/168/81 301/169/81
+f 298/170/82 297/171/82 299/168/82
+f 296/172/83 295/173/83 297/171/83
+f 294/174/84 293/175/84 295/173/84
+f 292/176/85 291/177/85 293/175/85
+f 290/42/86 289/43/86 291/177/86
+f 317/45/87 319/121/87 320/37/87
+f 321/47/20 383/178/20 384/48/20
+f 378/179/88 377/180/88 375/181/88
+f 376/182/89 375/181/89 373/166/89
+f 348/183/90 347/184/90 345/164/90
+f 303/185/91 305/186/91 306/187/91
+f 261/152/92 263/147/92 264/188/92
+f 276/189/93 275/137/93 277/190/93
+f 370/191/94 369/135/94 367/192/94
+f 335/140/95 333/193/95 334/194/95
+f 333/193/96 331/195/96 332/196/96
+f 331/195/97 329/122/97 330/197/97
+f 284/198/98 283/150/98 285/40/98
+f 327/123/99 325/199/99 326/200/99
+f 325/199/100 323/201/100 324/202/100
+f 324/202/101 323/201/101 321/47/101
+f 352/50/21 351/203/21 349/51/21
+f 353/53/102 351/203/102 352/50/102
+f 305/186/103 307/161/103 308/204/103
+f 382/54/104 381/55/104 379/205/104
+f 380/206/105 379/205/105 377/180/105
+f 348/183/106 350/49/106 349/51/106
+f 302/207/107 301/169/107 303/208/107
+f 278/209/108 277/190/108 279/129/108
+f 267/145/109 269/141/109 270/210/109
+f 367/192/110 365/211/110 366/212/110
+f 365/211/111 363/213/111 364/214/111
+f 363/213/112 361/215/112 362/216/112
+f 361/215/113 359/217/113 360/218/113
+f 359/217/114 357/219/114 358/220/114
+f 357/219/115 355/221/115 356/222/115
+f 355/221/116 353/53/116 354/52/116
+f 384/48/23 383/178/23 381/55/23
+f 274/136/117 272/1/117 273/3/117
+f 312/160/118 311/56/118 314/58/118
+f 315/223/119 313/59/119 379/61/119
+f 279/80/165 343/62/165 281/64/165
+f 271/77/121 335/65/121 273/67/121
+f 329/75/122 331/68/122 265/70/122
+f 273/67/123 337/66/123 275/72/123
+f 315/223/124 379/61/124 317/74/124
+f 327/83/166 329/75/166 263/76/166
+f 333/81/126 335/65/126 269/78/126
+f 277/82/127 341/79/127 279/80/127
+f 269/78/128 267/69/128 333/81/128
+f 275/72/129 339/71/129 277/82/129
+f 325/85/130 327/83/130 261/84/130
+f 323/117/131 325/85/131 259/86/131
+f 281/64/132 345/63/132 283/88/132
+f 319/92/133 383/89/133 257/91/133
+f 317/74/134 381/73/134 319/92/134
+f 351/158/135 353/93/135 287/95/135
+f 283/88/136 347/87/136 285/97/136
+f 313/59/137 311/98/137 377/60/137
+f 293/119/138 357/100/138 295/102/138
+f 311/98/139 309/103/139 375/99/139
+f 309/103/140 307/105/140 373/104/140
+f 307/105/141 305/107/141 371/106/141
+f 301/113/142 365/109/142 303/111/142
+f 299/115/143 363/112/143 301/113/143
+f 297/116/167 361/114/167 299/115/167
+f 295/102/145 359/101/145 297/116/145
+f 321/90/146 323/117/146 257/91/146
+f 291/120/147 355/118/147 293/119/147
+f 353/93/148 355/118/148 289/94/148
+f 288/8/5 296/9/5 272/6/5
+f 330/197/57 329/122/57 328/124/57
+f 342/131/58 344/125/58 341/127/58
+f 282/149/59 280/128/59 281/130/59
+f 340/142/149 342/131/149 339/132/149
+f 370/191/61 372/133/61 369/135/61
+f 276/189/62 274/136/62 275/137/62
+f 336/224/63 338/138/63 335/140/63
+f 270/210/64 269/141/64 272/1/64
+f 338/225/65 340/142/65 337/143/65
+f 266/148/66 265/144/66 268/146/66
+f 264/188/67 263/147/67 266/148/67
+f 284/198/68 282/149/68 283/150/68
+f 260/154/69 259/151/69 262/153/69
+f 258/36/150 257/38/150 260/154/150
+f 314/58/151 313/57/151 316/157/151
+f 305/107/152 303/111/152 369/108/152
+f 316/157/153 315/156/153 318/44/153
+f 349/96/168 351/158/168 285/97/168
+f 310/162/77 309/159/77 312/160/77
+f 308/204/155 307/161/155 310/162/155
+f 344/125/79 346/163/79 343/126/79
+f 372/133/80 374/165/80 371/134/80
+f 302/207/81 300/167/81 301/169/81
+f 300/167/82 298/170/82 299/168/82
+f 298/170/156 296/172/156 297/171/156
+f 296/172/84 294/174/84 295/173/84
+f 294/174/157 292/176/157 293/175/157
+f 292/176/158 290/42/158 291/177/158
+f 376/182/88 378/179/88 375/181/88
+f 374/165/89 376/182/89 373/166/89
+f 346/163/90 348/183/90 345/164/90
+f 304/226/91 303/185/91 306/187/91
+f 262/153/92 261/152/92 264/188/92
+f 278/209/93 276/189/93 277/190/93
+f 368/227/94 370/191/94 367/192/94
+f 336/224/95 335/140/95 334/194/95
+f 334/194/96 333/193/96 332/196/96
+f 332/196/97 331/195/97 330/197/97
+f 286/39/159 284/198/159 285/40/159
+f 328/124/99 327/123/99 326/200/99
+f 326/200/100 325/199/100 324/202/100
+f 322/46/160 324/202/160 321/47/160
+f 306/187/161 305/186/161 308/204/161
+f 380/206/104 382/54/104 379/205/104
+f 378/179/105 380/206/105 377/180/105
+f 347/184/162 348/183/162 349/51/162
+f 304/228/107 302/207/107 303/208/107
+f 280/128/108 278/209/108 279/129/108
+f 268/146/109 267/145/109 270/210/109
+f 368/227/110 367/192/110 366/212/110
+f 366/212/111 365/211/111 364/214/111
+f 364/214/112 363/213/112 362/216/112
+f 362/216/113 361/215/113 360/218/113
+f 360/218/114 359/217/114 358/220/114
+f 358/220/115 357/219/115 356/222/115
+f 356/222/116 355/221/116 354/52/116
+g VSLampen_Cube.004_Distance
+usemtl Distance
+f 132/5/169 134/22/169 136/12/169
+f 185/59/170 249/60/170 251/61/170
+f 176/10/171 180/11/171 192/4/171
+f 168/9/172 162/16/172 164/29/172
+f 252/206/173 251/205/173 249/180/173
+f 152/14/174 156/15/174 160/8/174
+f 188/20/175 190/35/175 192/4/175
+f 187/156/176 189/45/176 190/44/176
+f 225/53/177 223/203/177 224/50/177
+f 220/183/178 219/184/178 217/164/178
+f 248/182/179 247/181/179 245/166/179
+f 164/29/180 166/30/180 168/9/180
+f 156/198/181 155/150/181 157/40/181
+f 168/9/182 172/17/182 174/18/182
+f 205/193/183 203/195/183 204/196/183
+f 201/122/184 199/123/184 200/124/184
+f 231/101/185 233/114/185 169/116/185
+f 210/138/186 209/139/186 207/140/186
+f 133/152/187 135/147/187 136/188/187
+f 158/39/188 157/40/188 160/41/188
+f 141/141/189 143/2/189 144/1/189
+f 160/8/190 148/7/190 152/14/190
+f 180/11/191 182/33/191 184/19/191
+f 176/10/192 178/32/192 180/11/192
+f 190/44/193 189/45/193 192/37/193
+f 197/199/194 195/201/194 196/202/194
+f 192/37/195 191/121/195 129/38/195
+f 203/68/196 139/69/196 137/70/196
+f 211/71/197 213/79/197 149/82/197
+f 192/4/171 168/9/171 176/10/171
+f 177/107/198 241/108/198 243/106/198
+f 144/6/199 138/13/199 140/23/199
+f 237/109/200 239/110/200 175/111/200
+f 160/41/201 159/155/201 161/43/201
+f 135/147/202 137/144/202 138/148/202
+f 140/23/190 142/24/190 144/6/190
+f 144/1/203 143/2/203 145/3/203
+f 251/61/204 253/73/204 189/74/204
+f 242/191/205 241/135/205 239/192/205
+f 225/93/206 161/94/206 159/95/206
+f 207/65/207 209/66/207 145/67/207
+f 166/174/208 165/175/208 167/173/208
+f 193/47/209 255/178/209 256/48/209
+f 136/12/190 138/13/190 144/6/190
+f 231/217/210 229/219/210 230/220/210
+f 162/42/211 160/41/211 161/43/211
+f 179/161/212 181/159/212 182/162/212
+f 215/62/213 217/63/213 153/64/213
+f 201/75/214 137/70/214 135/76/214
+f 148/189/215 147/137/215 149/190/215
+f 150/209/216 149/190/216 151/129/216
+f 175/111/217 239/110/217 241/108/217
+f 229/100/218 231/101/218 167/102/218
+f 139/145/219 141/141/219 142/210/219
+f 239/192/220 237/211/220 238/212/220
+f 217/63/221 219/87/221 155/88/221
+f 177/186/222 179/161/222 180/204/222
+f 174/207/223 173/169/223 175/208/223
+f 152/14/224 154/27/224 156/15/224
+f 185/57/225 187/156/225 188/157/225
+f 164/176/226 163/177/226 165/175/226
+f 209/66/227 211/71/227 147/72/227
+f 172/167/228 171/168/228 173/169/228
+f 233/114/229 235/112/229 171/115/229
+f 254/54/230 256/48/230 253/55/230
+f 212/142/231 211/132/231 209/143/231
+f 226/52/232 225/53/232 224/50/232
+f 229/219/233 227/221/233 228/222/233
+f 181/103/234 245/104/234 247/99/234
+f 189/45/235 191/121/235 192/37/235
+f 184/19/236 186/34/236 188/20/236
+f 130/36/102 192/37/102 129/38/102
+f 194/46/209 193/47/209 256/48/209
+f 144/6/237 146/25/237 148/7/237
+f 144/6/190 148/7/190 160/8/190
+f 144/6/190 132/5/190 136/12/190
+f 156/15/190 158/28/190 160/8/190
+f 255/89/238 193/90/238 129/91/238
+f 152/128/239 151/129/239 153/130/239
+f 184/19/171 188/20/171 192/4/171
+f 192/4/171 180/11/171 184/19/171
+f 157/40/240 159/155/240 160/41/240
+f 137/144/241 139/145/241 140/146/241
+f 256/48/230 255/178/230 253/55/230
+f 233/215/242 231/217/242 232/218/242
+f 250/179/243 249/180/243 247/181/243
+f 131/151/244 133/152/244 134/153/244
+f 207/140/245 205/193/245 206/194/245
+f 168/9/246 170/31/246 172/17/246
+f 160/8/247 162/16/247 168/9/247
+f 181/159/248 183/56/248 184/160/248
+f 168/9/171 174/18/171 176/10/171
+f 196/202/249 195/201/249 193/47/249
+f 179/105/250 243/106/250 245/104/250
+f 168/172/251 167/173/251 169/171/251
+f 220/183/252 222/49/252 221/51/252
+f 192/4/253 132/5/253 144/6/253
+f 146/136/254 145/3/254 147/137/254
+f 235/112/255 237/109/255 173/113/255
+f 192/4/256 130/21/256 132/5/256
+f 195/117/257 131/86/257 129/91/257
+f 227/221/258 225/53/258 226/52/258
+f 183/98/259 247/99/259 249/60/259
+f 253/73/260 255/89/260 191/92/260
+f 216/125/261 215/126/261 213/127/261
+f 237/211/262 235/213/262 236/214/262
+f 199/123/263 197/199/263 198/200/263
+f 254/54/264 253/55/264 251/205/264
+f 224/50/265 223/203/265 221/51/265
+f 213/79/266 215/62/266 151/80/266
+f 148/7/253 150/26/253 152/14/253
+f 222/49/265 224/50/265 221/51/265
+f 197/85/267 133/84/267 131/86/267
+f 218/163/268 217/164/268 215/126/268
+f 203/195/269 201/122/269 202/197/269
+f 235/213/270 233/215/270 234/216/270
+f 227/118/271 163/120/271 161/94/271
+f 154/149/272 153/130/272 155/150/272
+f 175/185/273 177/186/273 178/187/273
+f 219/87/274 221/96/274 157/97/274
+f 199/83/275 135/76/275 133/84/275
+f 139/69/276 203/68/276 205/81/276
+f 170/170/277 169/171/277 171/168/277
+f 183/56/278 185/57/278 186/58/278
+f 227/118/279 229/100/279 165/119/279
+f 168/9/280 192/4/280 144/6/280
+f 246/165/281 245/166/281 243/134/281
+f 162/42/282 161/43/282 163/177/282
+f 223/158/283 159/95/283 157/97/283
+f 129/38/284 131/151/284 132/154/284
+f 244/133/285 243/134/285 241/135/285
+f 214/131/286 213/127/286 211/132/286
+f 207/65/287 143/77/287 141/78/287
+f 146/136/288 144/1/288 145/3/288
+f 184/160/289 183/56/289 186/58/289
+f 187/223/290 185/59/290 251/61/290
+f 151/80/291 215/62/291 153/64/291
+f 143/77/292 207/65/292 145/67/292
+f 201/75/293 203/68/293 137/70/293
+f 145/67/294 209/66/294 147/72/294
+f 187/223/295 251/61/295 189/74/295
+f 199/83/296 201/75/296 135/76/296
+f 205/81/297 207/65/297 141/78/297
+f 149/82/298 213/79/298 151/80/298
+f 141/78/299 139/69/299 205/81/299
+f 147/72/300 211/71/300 149/82/300
+f 197/85/301 199/83/301 133/84/301
+f 195/117/302 197/85/302 131/86/302
+f 153/64/303 217/63/303 155/88/303
+f 191/92/304 255/89/304 129/91/304
+f 189/74/305 253/73/305 191/92/305
+f 223/158/306 225/93/306 159/95/306
+f 155/88/307 219/87/307 157/97/307
+f 185/59/308 183/98/308 249/60/308
+f 165/119/309 229/100/309 167/102/309
+f 183/98/310 181/103/310 247/99/310
+f 181/103/311 179/105/311 245/104/311
+f 179/105/312 177/107/312 243/106/312
+f 173/113/313 237/109/313 175/111/313
+f 171/115/314 235/112/314 173/113/314
+f 169/116/315 233/114/315 171/115/315
+f 167/102/316 231/101/316 169/116/316
+f 193/90/317 195/117/317 129/91/317
+f 163/120/318 227/118/318 165/119/318
+f 225/93/319 227/118/319 161/94/319
+f 160/8/247 168/9/247 144/6/247
+f 202/197/184 201/122/184 200/124/184
+f 214/131/261 216/125/261 213/127/261
+f 154/149/239 152/128/239 153/130/239
+f 212/142/286 214/131/286 211/132/286
+f 242/191/285 244/133/285 241/135/285
+f 148/189/254 146/136/254 147/137/254
+f 208/224/186 210/138/186 207/140/186
+f 142/210/189 141/141/189 144/1/189
+f 210/225/231 212/142/231 209/143/231
+f 138/148/241 137/144/241 140/146/241
+f 136/188/202 135/147/202 138/148/202
+f 156/198/272 154/149/272 155/150/272
+f 132/154/244 131/151/244 134/153/244
+f 130/36/320 129/38/320 132/154/320
+f 186/58/321 185/57/321 188/157/321
+f 177/107/322 175/111/322 241/108/322
+f 188/157/323 187/156/323 190/44/323
+f 221/96/324 223/158/324 157/97/324
+f 182/162/248 181/159/248 184/160/248
+f 180/204/212 179/161/212 182/162/212
+f 216/125/268 218/163/268 215/126/268
+f 244/133/281 246/165/281 243/134/281
+f 174/207/228 172/167/228 173/169/228
+f 172/167/277 170/170/277 171/168/277
+f 170/170/325 168/172/325 169/171/325
+f 168/172/208 166/174/208 167/173/208
+f 166/174/226 164/176/226 165/175/226
+f 164/176/326 162/42/326 163/177/326
+f 248/182/243 250/179/243 247/181/243
+f 246/165/179 248/182/179 245/166/179
+f 218/163/178 220/183/178 217/164/178
+f 176/226/273 175/185/273 178/187/273
+f 134/153/187 133/152/187 136/188/187
+f 150/209/327 148/189/327 149/190/327
+f 240/227/205 242/191/205 239/192/205
+f 208/224/245 207/140/245 206/194/245
+f 206/194/183 205/193/183 204/196/183
+f 204/196/269 203/195/269 202/197/269
+f 158/39/328 156/198/328 157/40/328
+f 200/124/263 199/123/263 198/200/263
+f 198/200/194 197/199/194 196/202/194
+f 194/46/329 196/202/329 193/47/329
+f 178/187/222 177/186/222 180/204/222
+f 252/206/264 254/54/264 251/205/264
+f 250/179/173 252/206/173 249/180/173
+f 219/184/330 220/183/330 221/51/330
+f 176/228/223 174/207/223 175/208/223
+f 152/128/216 150/209/216 151/129/216
+f 140/146/219 139/145/219 142/210/219
+f 240/227/220 239/192/220 238/212/220
+f 238/212/262 237/211/262 236/214/262
+f 236/214/270 235/213/270 234/216/270
+f 234/216/242 233/215/242 232/218/242
+f 232/218/210 231/217/210 230/220/210
+f 230/220/233 229/219/233 228/222/233
+f 228/222/258 227/221/258 226/52/258
+g VSLampen_Cube.004_Repeater
+usemtl Repeater
+f 447/46/329 445/202/329 448/47/329
+f 485/15/190 483/28/190 481/8/190
+f 495/136/254 496/3/254 494/137/254
+f 495/136/288 497/1/288 496/3/288
+f 389/206/173 390/205/173 392/180/173
+f 462/105/312 464/107/312 398/106/312
+f 452/45/235 450/121/235 449/37/235
+f 511/36/102 449/37/102 512/38/102
+f 497/6/199 503/13/199 501/23/199
+f 497/1/203 498/2/203 496/3/203
+f 416/53/177 418/203/177 417/50/177
+f 418/158/283 482/95/283 484/97/283
+f 452/74/305 388/73/305 450/92/305
+f 466/185/273 464/186/273 463/187/273
+f 466/111/217 402/110/217 400/108/217
+f 424/63/331 422/87/331 486/88/331
+f 438/195/269 440/122/269 439/197/269
+f 462/161/212 460/159/212 459/162/212
+f 437/196/269 438/195/269 439/197/269
+f 494/72/300 430/71/300 492/82/300
+f 459/162/248 460/159/248 457/160/248
+f 487/149/239 489/128/239 488/130/239
+f 434/140/245 436/193/245 435/194/245
+f 406/112/255 404/109/255 468/113/255
+f 412/219/233 414/221/233 413/222/233
+f 456/57/225 454/156/225 453/157/225
+f 411/220/233 412/219/233 413/222/233
+f 393/182/243 391/179/243 394/181/243
+f 416/93/319 414/118/319 480/94/319
+f 442/83/332 506/76/332 508/84/332
+f 449/4/253 509/5/253 497/6/253
+f 475/174/226 477/176/226 476/175/226
+f 458/98/259 394/99/259 392/60/259
+f 496/67/294 432/66/294 494/72/294
+f 507/153/187 508/152/187 505/188/187
+f 397/133/281 395/165/281 398/134/281
+f 464/107/322 466/111/322 400/108/322
+f 429/142/231 430/132/231 432/143/231
+f 436/193/183 438/195/183 437/196/183
+f 454/223/295 390/61/295 452/74/295
+f 499/210/189 500/141/189 497/1/189
+f 479/42/282 480/43/282 478/177/282
+f 432/66/227 430/71/227 494/72/227
+f 465/226/273 466/185/273 463/187/273
+f 444/199/194 446/201/194 445/202/194
+f 440/75/293 438/68/293 504/70/293
+f 460/159/248 458/56/248 457/160/248
+f 456/59/308 458/98/308 392/60/308
+f 491/209/327 493/189/327 492/190/327
+f 429/142/286 427/131/286 430/132/286
+f 478/120/318 414/118/318 476/119/318
+f 388/73/260 386/89/260 450/92/260
+f 471/170/277 472/171/277 470/168/277
+f 467/207/228 469/167/228 468/169/228
+f 431/138/186 432/139/186 434/140/186
+f 450/92/304 386/89/304 512/91/304
+f 473/172/251 474/173/251 472/171/251
+f 387/54/264 388/55/264 390/205/264
+f 468/113/313 404/109/313 466/111/313
+f 497/6/237 495/25/237 493/7/237
+f 427/131/286 428/127/286 430/132/286
+f 399/191/285 397/133/285 400/135/285
+f 428/79/266 426/62/266 490/80/266
+f 493/7/333 491/26/333 489/14/333
+f 509/5/334 507/22/334 505/12/334
+f 410/217/210 412/219/210 411/220/210
+f 464/107/198 400/108/198 398/106/198
+f 438/68/196 502/69/196 504/70/196
+f 385/48/230 386/178/230 388/55/230
+f 460/103/234 396/104/234 394/99/234
+f 386/89/335 448/90/335 512/91/335
+f 409/218/210 410/217/210 411/220/210
+f 469/167/228 470/168/228 468/169/228
+f 509/154/244 510/151/244 507/153/244
+f 511/36/320 512/38/320 509/154/320
+f 443/200/194 444/199/194 445/202/194
+f 488/64/336 424/63/336 486/88/336
+f 405/214/270 406/213/270 407/216/270
+f 470/115/314 406/112/314 468/113/314
+f 489/128/239 490/129/239 488/130/239
+f 473/9/337 471/31/337 469/17/337
+f 444/85/338 442/83/338 508/84/338
+f 395/165/179 393/182/179 396/166/179
+f 456/59/339 392/60/339 390/61/339
+f 465/10/192 463/32/192 461/11/192
+f 453/20/175 451/35/175 449/4/175
+f 389/206/264 387/54/264 390/205/264
+f 493/189/215 494/137/215 492/190/215
+f 422/87/274 420/96/274 484/97/274
+f 498/77/292 434/65/292 496/67/292
+f 408/215/242 410/217/242 409/218/242
+f 487/149/272 488/130/272 486/150/272
+f 408/114/229 406/112/229 470/115/229
+f 445/202/249 446/201/249 448/47/249
+f 502/69/276 438/68/276 436/81/276
+f 506/147/202 504/144/202 503/148/202
+f 463/187/222 464/186/222 461/204/222
+f 503/148/241 504/144/241 501/146/241
+f 404/211/262 406/213/262 405/214/262
+f 489/128/216 491/209/216 490/129/216
+f 501/146/219 502/145/219 499/210/219
+f 449/4/171 473/9/171 465/10/171
+f 504/144/241 502/145/241 501/146/241
+f 387/54/230 385/48/230 388/55/230
+f 434/65/207 432/66/207 496/67/207
+f 483/39/188 484/40/188 481/41/188
+f 467/207/223 468/169/223 466/208/223
+f 473/9/340 479/16/340 477/29/340
+f 404/109/341 402/110/341 466/111/341
+f 472/116/342 408/114/342 470/115/342
+f 439/197/184 440/122/184 441/124/184
+f 481/41/201 482/155/201 480/43/201
+f 391/179/173 389/206/173 392/180/173
+f 399/191/205 400/135/205 402/192/205
+f 502/145/219 500/141/219 499/210/219
+f 481/8/190 493/7/190 489/14/190
+f 457/160/289 458/56/289 455/58/289
+f 476/119/309 412/100/309 474/102/309
+f 449/4/256 511/21/256 509/5/256
+f 492/82/298 428/79/298 490/80/298
+f 483/39/328 485/198/328 484/40/328
+f 473/172/208 475/174/208 474/173/208
+f 423/163/268 424/164/268 426/126/268
+f 457/19/171 453/20/171 449/4/171
+f 473/9/280 449/4/280 497/6/280
+f 505/188/202 506/147/202 503/148/202
+f 477/29/343 475/30/343 473/9/343
+f 454/223/290 456/59/290 390/61/290
+f 436/81/297 434/65/297 500/78/297
+f 401/227/220 402/192/220 403/212/220
+f 473/9/171 469/17/171 467/18/171
+f 448/47/209 386/178/209 385/48/209
+f 461/204/212 462/161/212 459/162/212
+f 485/198/272 487/149/272 486/150/272
+f 484/40/240 482/155/240 481/41/240
+f 497/6/190 493/7/190 481/8/190
+f 474/102/316 410/101/316 472/116/316
+f 453/157/323 454/156/323 451/44/323
+f 477/176/326 479/42/326 478/177/326
+f 431/225/231 429/142/231 432/143/231
+f 447/46/209 448/47/209 385/48/209
+f 433/224/245 434/140/245 435/194/245
+f 425/125/268 423/163/268 426/126/268
+f 481/8/247 473/9/247 497/6/247
+f 469/167/277 471/170/277 470/168/277
+f 493/189/254 495/136/254 494/137/254
+f 441/124/263 442/123/263 443/200/263
+f 465/228/223 467/207/223 466/208/223
+f 458/98/310 460/103/310 394/99/310
+f 413/222/258 414/221/258 415/52/258
+f 415/52/232 416/53/232 417/50/232
+f 442/83/296 440/75/296 506/76/296
+f 418/158/306 416/93/306 482/95/306
+f 449/4/171 461/11/171 457/19/171
+f 395/165/281 396/166/281 398/134/281
+f 391/179/243 392/180/243 394/181/243
+f 473/9/171 467/18/171 465/10/171
+f 421/183/252 419/49/252 420/51/252
+f 442/123/263 444/199/263 443/200/263
+f 419/49/265 417/50/265 420/51/265
+f 406/213/270 408/215/270 407/216/270
+f 458/56/278 456/57/278 455/58/278
+f 407/216/242 408/215/242 409/218/242
+f 397/133/285 398/134/285 400/135/285
+f 490/80/291 426/62/291 488/64/291
+f 455/58/321 456/57/321 453/157/321
+f 402/192/220 404/211/220 403/212/220
+f 475/174/208 476/175/208 474/173/208
+f 460/103/344 462/105/344 396/104/344
+f 505/12/190 503/13/190 497/6/190
+f 485/198/181 486/150/181 484/40/181
+f 433/224/186 431/138/186 434/140/186
+f 426/62/213 424/63/213 488/64/213
+f 420/96/345 418/158/345 484/97/345
+f 479/42/211 481/41/211 480/43/211
+f 423/163/178 421/183/178 424/164/178
+f 401/227/205 399/191/205 402/192/205
+f 486/88/307 422/87/307 484/97/307
+f 422/184/330 421/183/330 420/51/330
+f 403/212/262 404/211/262 405/214/262
+f 497/6/190 509/5/190 505/12/190
+f 446/117/257 510/86/257 512/91/257
+f 457/19/236 455/34/236 453/20/236
+f 500/78/346 502/69/346 436/81/346
+f 510/151/244 508/152/244 507/153/244
+f 481/8/247 479/16/247 473/9/247
+f 416/93/206 480/94/206 482/95/206
+f 393/182/179 394/181/179 396/166/179
+f 417/50/265 418/203/265 420/51/265
+f 444/85/267 508/84/267 510/86/267
+f 414/118/347 478/120/347 480/94/347
+f 414/118/279 412/100/279 476/119/279
+f 512/38/284 510/151/284 509/154/284
+f 434/65/287 498/77/287 500/78/287
+f 454/156/176 452/45/176 451/44/176
+f 421/183/178 422/184/178 424/164/178
+f 390/61/204 388/73/204 452/74/204
+f 414/221/258 416/53/258 415/52/258
+f 435/194/183 436/193/183 437/196/183
+f 427/131/261 425/125/261 428/127/261
+f 440/122/184 442/123/184 441/124/184
+f 440/75/214 504/70/214 506/76/214
+f 491/209/216 492/190/216 490/129/216
+f 412/100/218 410/101/218 474/102/218
+f 446/117/302 444/85/302 510/86/302
+f 464/186/222 462/161/222 461/204/222
+f 489/14/224 487/27/224 485/15/224
+f 477/176/226 478/177/226 476/175/226
+f 462/105/250 398/106/250 396/104/250
+f 465/10/171 461/11/171 449/4/171
+f 489/14/174 485/15/174 481/8/174
+f 501/23/190 499/24/190 497/6/190
+f 425/125/261 426/126/261 428/127/261
+f 448/90/317 446/117/317 512/91/317
+f 471/170/325 473/172/325 472/171/325
+f 410/101/348 408/114/348 472/116/348
+f 508/152/187 506/147/187 505/188/187
+f 500/141/189 498/2/189 497/1/189
+f 461/11/191 459/33/191 457/19/191
+f 451/44/193 452/45/193 449/37/193
+f 449/37/195 450/121/195 512/38/195
+f 430/71/197 428/79/197 492/82/197
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_main.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_main.obj
new file mode 100644
index 0000000..4949466
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_lamps_main.obj
@@ -0,0 +1,2719 @@
+# Blender v2.76 (sub 0) OBJ File: 'signal_ks_export.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_lamps_main.mtl
+o HSLampen_Cube.000
+v 1.356099 -0.866613 5.864285
+v 1.356098 -0.872114 5.594683
+v 1.324589 -0.761419 6.389298
+v 1.324588 -0.766923 5.594215
+v 1.273160 -0.664393 6.388865
+v 1.273160 -0.669894 5.593781
+v 1.203793 -0.579264 6.388486
+v 1.203794 -0.584764 5.593402
+v 1.119149 -0.509304 6.388174
+v 1.119148 -0.514805 5.593091
+v 1.022483 -0.457200 6.387940
+v 1.022485 -0.462700 5.592857
+v 0.917511 -0.424956 6.387797
+v 0.917511 -0.430456 5.592714
+v 0.808263 -0.413814 6.387748
+v 0.808264 -0.419312 5.592665
+v 0.698939 -0.424194 6.387794
+v 0.698940 -0.429696 5.592710
+v 0.593745 -0.455702 6.387936
+v 0.593744 -0.461204 5.592852
+v 0.496716 -0.507132 6.388164
+v 0.496716 -0.512632 5.593081
+v 0.411588 -0.576496 6.388473
+v 0.411586 -0.581998 5.593389
+v 0.341628 -0.661139 6.388850
+v 0.341625 -0.666642 5.593767
+v 0.289521 -0.757806 6.389282
+v 0.289522 -0.763307 5.594199
+v 0.257278 -0.862776 5.864267
+v 0.257278 -0.868280 5.594666
+v 0.245926 -0.976844 5.864237
+v 0.246134 -0.977477 5.595152
+v 0.256836 -1.083121 5.862653
+v 0.256504 -1.086783 5.595598
+v 0.288031 -1.186557 5.863041
+v 0.288019 -1.192029 5.596006
+v 0.339461 -1.283579 5.863426
+v 0.339445 -1.289057 5.596392
+v 0.408828 -1.368706 5.863764
+v 0.408815 -1.374189 5.596729
+v 0.493473 -1.438664 5.864041
+v 0.493457 -1.444154 5.597005
+v 0.590136 -1.490763 5.864248
+v 0.590124 -1.496257 5.597212
+v 0.695107 -1.523005 5.864375
+v 0.695100 -1.528503 5.597339
+v 0.804351 -1.534149 5.864418
+v 0.804351 -1.539651 5.597383
+v 0.913672 -1.523771 5.864378
+v 0.913679 -1.529268 5.597343
+v 1.018864 -1.492260 5.864253
+v 1.018874 -1.497755 5.597218
+v 1.115892 -1.440837 5.864049
+v 1.115906 -1.446325 5.597014
+v 1.201019 -1.371471 5.863774
+v 1.201035 -1.376956 5.596738
+v 1.270979 -1.286831 5.863439
+v 1.270996 -1.292309 5.596403
+v 1.323086 -1.190168 5.863057
+v 1.323098 -1.195639 5.596019
+v 1.355004 -1.086950 5.862668
+v 1.355350 -1.090617 5.595614
+v 1.366655 -0.980756 5.864254
+v 1.366481 -0.981388 5.595167
+v 1.380815 -0.862105 5.864238
+v 1.380815 -0.867288 5.229348
+v 1.347889 -0.752182 6.389203
+v 1.347889 -0.757365 5.228831
+v 1.294148 -0.650795 6.388727
+v 1.294148 -0.655976 5.228355
+v 1.221662 -0.561836 6.388309
+v 1.221663 -0.567019 5.227938
+v 1.133213 -0.488731 6.387966
+v 1.133212 -0.493915 5.227594
+v 1.032202 -0.434285 6.387711
+v 1.032202 -0.439468 5.227339
+v 0.922510 -0.400592 6.387552
+v 0.922510 -0.405775 5.227180
+v 0.808350 -0.388948 6.387497
+v 0.808351 -0.394128 5.227125
+v 0.694112 -0.399794 6.387548
+v 0.694114 -0.404978 5.227177
+v 0.584189 -0.432720 6.387703
+v 0.584189 -0.437905 5.227331
+v 0.482798 -0.486462 6.387955
+v 0.482799 -0.491644 5.227584
+v 0.393842 -0.558946 6.388296
+v 0.393842 -0.564128 5.227924
+v 0.320737 -0.647394 6.388711
+v 0.320736 -0.652577 5.228340
+v 0.266289 -0.748405 6.389186
+v 0.266290 -0.753588 5.228814
+v 0.232596 -0.858097 5.864219
+v 0.232596 -0.863279 5.229330
+v 0.220950 -0.972254 5.864219
+v 0.220951 -0.977436 5.229865
+v 0.231799 -1.086489 5.862726
+v 0.231799 -1.091671 5.230402
+v 0.264725 -1.196414 5.863242
+v 0.264724 -1.201597 5.230918
+v 0.318466 -1.297802 5.863719
+v 0.318465 -1.302985 5.231395
+v 0.390952 -1.386758 5.864136
+v 0.390953 -1.391941 5.231813
+v 0.479402 -1.459865 5.864480
+v 0.479401 -1.465047 5.232156
+v 0.580414 -1.514309 5.864735
+v 0.580413 -1.519492 5.232411
+v 0.690105 -1.548002 5.864894
+v 0.690106 -1.553185 5.232570
+v 0.804264 -1.559648 5.864949
+v 0.804263 -1.564832 5.232625
+v 0.918500 -1.548801 5.864897
+v 0.918501 -1.553983 5.232574
+v 1.028426 -1.515873 5.864743
+v 1.028425 -1.521055 5.232419
+v 1.129816 -1.462135 5.864491
+v 1.129816 -1.467316 5.232167
+v 1.218773 -1.389648 5.864150
+v 1.218772 -1.394831 5.231826
+v 1.291878 -1.301200 5.863734
+v 1.291878 -1.306382 5.231411
+v 1.346324 -1.200189 5.863259
+v 1.346325 -1.205372 5.230936
+v 1.380017 -1.090498 5.862744
+v 1.380018 -1.095680 5.230421
+v 1.391665 -0.976340 5.864237
+v 1.391664 -0.981523 5.229884
+v -0.966289 1.760967 5.864285
+v -0.966289 1.758691 5.594683
+v -0.979322 1.804477 6.389298
+v -0.979322 1.802200 5.594215
+v -1.000594 1.844609 6.388865
+v -1.000594 1.842333 5.593781
+v -1.029285 1.879819 6.388486
+v -1.029285 1.877545 5.593402
+v -1.064296 1.908756 6.388174
+v -1.064296 1.906481 5.593091
+v -1.104278 1.930307 6.387940
+v -1.104278 1.928033 5.592857
+v -1.147697 1.943644 6.387797
+v -1.147697 1.941369 5.592714
+v -1.192884 1.948253 6.387748
+v -1.192883 1.945979 5.592665
+v -1.238102 1.943959 6.387794
+v -1.238102 1.941683 5.592710
+v -1.281613 1.930927 6.387936
+v -1.281613 1.928651 5.592852
+v -1.321745 1.909655 6.388164
+v -1.321746 1.907380 5.593081
+v -1.356956 1.880964 6.388473
+v -1.356957 1.878689 5.593389
+v -1.385893 1.845954 6.388850
+v -1.385894 1.843678 5.593767
+v -1.407445 1.805971 6.389282
+v -1.407444 1.803696 5.594199
+v -1.420781 1.762553 5.864267
+v -1.420781 1.760277 5.594666
+v -1.425477 1.715373 5.864237
+v -1.425391 1.715111 5.595152
+v -1.420964 1.671415 5.862653
+v -1.421102 1.669900 5.595598
+v -1.408062 1.628632 5.863041
+v -1.408066 1.626369 5.596006
+v -1.386789 1.588502 5.863426
+v -1.386796 1.586236 5.596392
+v -1.358097 1.553291 5.863764
+v -1.358103 1.551024 5.596729
+v -1.323087 1.524355 5.864041
+v -1.323093 1.522085 5.597005
+v -1.283105 1.502807 5.864248
+v -1.283110 1.500534 5.597212
+v -1.239687 1.489471 5.864375
+v -1.239690 1.487197 5.597339
+v -1.194502 1.484861 5.864418
+v -1.194502 1.482586 5.597383
+v -1.149285 1.489154 5.864378
+v -1.149282 1.486880 5.597343
+v -1.105775 1.502187 5.864253
+v -1.105771 1.499915 5.597218
+v -1.065643 1.523457 5.864049
+v -1.065637 1.521187 5.597014
+v -1.030433 1.552148 5.863774
+v -1.030426 1.549879 5.596738
+v -1.001496 1.587157 5.863439
+v -1.001489 1.584891 5.596403
+v -0.979944 1.627138 5.863057
+v -0.979939 1.624875 5.596019
+v -0.966742 1.669832 5.862668
+v -0.966598 1.668314 5.595614
+v -0.961923 1.713755 5.864254
+v -0.961995 1.713493 5.595167
+v -0.956066 1.762831 5.864238
+v -0.956066 1.760688 5.229348
+v -0.969685 1.808297 6.389203
+v -0.969685 1.806154 5.228831
+v -0.991913 1.850233 6.388727
+v -0.991913 1.848090 5.228355
+v -1.021894 1.887028 6.388309
+v -1.021894 1.884884 5.227938
+v -1.058478 1.917265 6.387966
+v -1.058479 1.915121 5.227594
+v -1.100258 1.939785 6.387711
+v -1.100258 1.937642 5.227339
+v -1.145629 1.953721 6.387552
+v -1.145629 1.951578 5.227180
+v -1.192848 1.958538 6.387497
+v -1.192847 1.956395 5.227125
+v -1.240099 1.954051 6.387548
+v -1.240098 1.951908 5.227177
+v -1.285565 1.940433 6.387703
+v -1.285565 1.938288 5.227331
+v -1.327502 1.918204 6.387955
+v -1.327502 1.916061 5.227584
+v -1.364296 1.888223 6.388296
+v -1.364296 1.886080 5.227924
+v -1.394534 1.851640 6.388711
+v -1.394534 1.849496 5.228340
+v -1.417054 1.809860 6.389186
+v -1.417054 1.807716 5.228814
+v -1.430991 1.764489 5.864219
+v -1.430990 1.762345 5.229330
+v -1.435807 1.717272 5.864219
+v -1.435807 1.715128 5.229865
+v -1.431320 1.670022 5.862726
+v -1.431320 1.667878 5.230402
+v -1.417701 1.624554 5.863242
+v -1.417701 1.622411 5.230918
+v -1.395473 1.582619 5.863719
+v -1.395473 1.580475 5.231395
+v -1.365491 1.545825 5.864136
+v -1.365491 1.543681 5.231813
+v -1.328907 1.515587 5.864480
+v -1.328907 1.513443 5.232156
+v -1.287126 1.493068 5.864735
+v -1.287127 1.490924 5.232411
+v -1.241756 1.479131 5.864894
+v -1.241756 1.476988 5.232570
+v -1.194538 1.474315 5.864949
+v -1.194538 1.472170 5.232625
+v -1.147288 1.478801 5.864897
+v -1.147287 1.476658 5.232574
+v -1.101820 1.492421 5.864743
+v -1.101821 1.490277 5.232419
+v -1.059884 1.514648 5.864491
+v -1.059884 1.512505 5.232167
+v -1.023089 1.544630 5.864150
+v -1.023090 1.542486 5.231826
+v -0.992852 1.581213 5.863734
+v -0.992852 1.579070 5.231411
+v -0.970332 1.622993 5.863259
+v -0.970331 1.620850 5.230936
+v -0.956396 1.668364 5.862744
+v -0.956395 1.666220 5.230421
+v -0.951578 1.715581 5.864237
+v -0.951578 1.713438 5.229884
+v -0.643901 -0.866613 5.864285
+v -0.643902 -0.872114 5.594683
+v -0.675411 -0.761419 6.389298
+v -0.675412 -0.766923 5.594215
+v -0.726840 -0.664393 6.388865
+v -0.726840 -0.669894 5.593781
+v -0.796207 -0.579264 6.388486
+v -0.796206 -0.584764 5.593402
+v -0.880851 -0.509304 6.388174
+v -0.880852 -0.514805 5.593091
+v -0.977517 -0.457200 6.387940
+v -0.977515 -0.462699 5.592857
+v -1.082489 -0.424957 6.387797
+v -1.082489 -0.430456 5.592714
+v -1.191737 -0.413814 6.387748
+v -1.191736 -0.419312 5.592665
+v -1.301062 -0.424194 6.387794
+v -1.301060 -0.429696 5.592710
+v -1.406255 -0.455702 6.387936
+v -1.406256 -0.461204 5.592852
+v -1.503284 -0.507132 6.388164
+v -1.503284 -0.512632 5.593081
+v -1.588412 -0.576496 6.388473
+v -1.588414 -0.581998 5.593389
+v -1.658372 -0.661139 6.388850
+v -1.658375 -0.666641 5.593767
+v -1.710479 -0.757806 6.389282
+v -1.710478 -0.763307 5.594199
+v -1.742722 -0.862777 5.864267
+v -1.742722 -0.868280 5.594666
+v -1.754074 -0.976844 5.864237
+v -1.753866 -0.977477 5.595152
+v -1.743164 -1.083121 5.862653
+v -1.743496 -1.086783 5.595598
+v -1.711969 -1.186557 5.863041
+v -1.711981 -1.192029 5.596006
+v -1.660540 -1.283579 5.863426
+v -1.660555 -1.289057 5.596392
+v -1.591172 -1.368706 5.863764
+v -1.591185 -1.374189 5.596729
+v -1.506527 -1.438665 5.864041
+v -1.506543 -1.444154 5.597005
+v -1.409864 -1.490763 5.864248
+v -1.409876 -1.496257 5.597212
+v -1.304893 -1.523005 5.864375
+v -1.304900 -1.528503 5.597339
+v -1.195649 -1.534150 5.864418
+v -1.195649 -1.539650 5.597383
+v -1.086329 -1.523771 5.864378
+v -1.086321 -1.529268 5.597343
+v -0.981136 -1.492261 5.864253
+v -0.981126 -1.497756 5.597218
+v -0.884108 -1.440837 5.864049
+v -0.884094 -1.446325 5.597014
+v -0.798981 -1.371471 5.863774
+v -0.798965 -1.376956 5.596738
+v -0.729021 -1.286831 5.863439
+v -0.729004 -1.292308 5.596403
+v -0.676914 -1.190168 5.863057
+v -0.676902 -1.195640 5.596019
+v -0.644996 -1.086950 5.862668
+v -0.644650 -1.090617 5.595614
+v -0.633345 -0.980756 5.864254
+v -0.633519 -0.981388 5.595167
+v -0.619185 -0.862105 5.864238
+v -0.619185 -0.867288 5.229348
+v -0.652111 -0.752182 6.389203
+v -0.652111 -0.757365 5.228831
+v -0.705852 -0.650795 6.388727
+v -0.705852 -0.655976 5.228355
+v -0.778338 -0.561836 6.388309
+v -0.778337 -0.567019 5.227938
+v -0.866787 -0.488731 6.387966
+v -0.866788 -0.493915 5.227594
+v -0.967798 -0.434285 6.387711
+v -0.967798 -0.439468 5.227339
+v -1.077490 -0.400592 6.387552
+v -1.077490 -0.405775 5.227180
+v -1.191650 -0.388948 6.387497
+v -1.191649 -0.394128 5.227125
+v -1.305888 -0.399794 6.387548
+v -1.305886 -0.404978 5.227177
+v -1.415811 -0.432720 6.387703
+v -1.415811 -0.437904 5.227331
+v -1.517202 -0.486461 6.387955
+v -1.517201 -0.491643 5.227584
+v -1.606158 -0.558947 6.388296
+v -1.606158 -0.564129 5.227924
+v -1.679263 -0.647395 6.388711
+v -1.679264 -0.652577 5.228340
+v -1.733711 -0.748405 6.389186
+v -1.733710 -0.753588 5.228814
+v -1.767405 -0.858098 5.864219
+v -1.767404 -0.863280 5.229330
+v -1.779050 -0.972254 5.864219
+v -1.779049 -0.977436 5.229865
+v -1.768201 -1.086489 5.862726
+v -1.768202 -1.091671 5.230402
+v -1.735275 -1.196415 5.863242
+v -1.735276 -1.201597 5.230918
+v -1.681534 -1.297802 5.863719
+v -1.681535 -1.302985 5.231395
+v -1.609048 -1.386759 5.864136
+v -1.609047 -1.391941 5.231813
+v -1.520598 -1.459865 5.864480
+v -1.520599 -1.465047 5.232156
+v -1.419586 -1.514309 5.864735
+v -1.419587 -1.519492 5.232411
+v -1.309895 -1.548002 5.864894
+v -1.309894 -1.553185 5.232570
+v -1.195736 -1.559648 5.864949
+v -1.195737 -1.564832 5.232625
+v -1.081500 -1.548801 5.864897
+v -1.081499 -1.553983 5.232574
+v -0.971574 -1.515873 5.864743
+v -0.971575 -1.521056 5.232419
+v -0.870184 -1.462135 5.864491
+v -0.870184 -1.467316 5.232167
+v -0.781227 -1.389648 5.864150
+v -0.781228 -1.394831 5.231826
+v -0.708122 -1.301200 5.863734
+v -0.708122 -1.306382 5.231411
+v -0.653676 -1.200189 5.863259
+v -0.653675 -1.205371 5.230936
+v -0.619983 -1.090498 5.862744
+v -0.619982 -1.095680 5.230421
+v -0.608335 -0.976341 5.864237
+v -0.608336 -0.981523 5.229884
+v -0.951578 -3.358915 5.229884
+v -0.951578 -3.356772 5.864237
+v -0.956395 -3.406133 5.230421
+v -0.956396 -3.403990 5.862744
+v -0.970331 -3.451504 5.230936
+v -0.970332 -3.449360 5.863259
+v -0.992852 -3.493283 5.231411
+v -0.992852 -3.491140 5.863734
+v -1.023090 -3.529868 5.231826
+v -1.023089 -3.527724 5.864150
+v -1.059884 -3.559849 5.232167
+v -1.059884 -3.557706 5.864491
+v -1.101821 -3.582077 5.232419
+v -1.101820 -3.579932 5.864743
+v -1.147287 -3.595695 5.232574
+v -1.147288 -3.593553 5.864897
+v -1.194538 -3.600183 5.232625
+v -1.194538 -3.598039 5.864949
+v -1.241756 -3.595365 5.232570
+v -1.241756 -3.593222 5.864894
+v -1.287127 -3.581429 5.232411
+v -1.287126 -3.579286 5.864735
+v -1.328907 -3.558910 5.232156
+v -1.328907 -3.556767 5.864480
+v -1.365491 -3.528672 5.231813
+v -1.365491 -3.526528 5.864136
+v -1.395473 -3.491878 5.231395
+v -1.395473 -3.489735 5.863719
+v -1.417701 -3.449943 5.230918
+v -1.417701 -3.447799 5.863242
+v -1.431320 -3.404475 5.230402
+v -1.431320 -3.402331 5.862726
+v -1.435807 -3.357225 5.229865
+v -1.435807 -3.355082 5.864219
+v -1.430990 -3.310008 5.229330
+v -1.430991 -3.307865 5.864219
+v -1.417054 -3.264637 5.228814
+v -1.417054 -3.262494 6.389186
+v -1.394534 -3.222857 5.228340
+v -1.394534 -3.220714 6.388711
+v -1.364296 -3.186274 5.227924
+v -1.364296 -3.184130 6.388296
+v -1.327502 -3.156292 5.227584
+v -1.327502 -3.154149 6.387955
+v -1.285565 -3.134065 5.227331
+v -1.285565 -3.131921 6.387703
+v -1.240098 -3.120446 5.227177
+v -1.240099 -3.118302 6.387548
+v -1.192847 -3.115959 5.227125
+v -1.192848 -3.113816 6.387497
+v -1.145629 -3.120776 5.227180
+v -1.145629 -3.118632 6.387552
+v -1.100258 -3.134712 5.227339
+v -1.100258 -3.132568 6.387711
+v -1.058479 -3.157232 5.227594
+v -1.058478 -3.155088 6.387966
+v -1.021894 -3.187469 5.227938
+v -1.021894 -3.185325 6.388309
+v -0.991913 -3.224263 5.228355
+v -0.991913 -3.222120 6.388727
+v -0.969685 -3.266200 5.228831
+v -0.969685 -3.264056 6.389203
+v -0.956066 -3.311666 5.229348
+v -0.956066 -3.309522 5.864238
+v -0.961995 -3.358860 5.595167
+v -0.961923 -3.358598 5.864254
+v -0.966598 -3.404039 5.595614
+v -0.966742 -3.402522 5.862668
+v -0.979939 -3.447478 5.596019
+v -0.979944 -3.445215 5.863057
+v -1.001489 -3.487463 5.596403
+v -1.001496 -3.485197 5.863439
+v -1.030426 -3.522474 5.596738
+v -1.030433 -3.520205 5.863774
+v -1.065637 -3.551166 5.597014
+v -1.065643 -3.548896 5.864049
+v -1.105771 -3.572439 5.597218
+v -1.105775 -3.570166 5.864253
+v -1.149282 -3.585473 5.597343
+v -1.149285 -3.583200 5.864378
+v -1.194502 -3.589768 5.597383
+v -1.194502 -3.587492 5.864418
+v -1.239690 -3.585157 5.597339
+v -1.239687 -3.582883 5.864375
+v -1.283110 -3.571819 5.597212
+v -1.283105 -3.569547 5.864248
+v -1.323093 -3.550268 5.597005
+v -1.323087 -3.547998 5.864041
+v -1.358103 -3.521330 5.596729
+v -1.358097 -3.519062 5.863764
+v -1.386796 -3.486117 5.596392
+v -1.386789 -3.483851 5.863426
+v -1.408066 -3.445985 5.596006
+v -1.408062 -3.443721 5.863041
+v -1.421102 -3.402453 5.595598
+v -1.420964 -3.400939 5.862653
+v -1.425391 -3.357242 5.595152
+v -1.425477 -3.356980 5.864237
+v -1.420781 -3.312076 5.594666
+v -1.420781 -3.309800 5.864267
+v -1.407444 -3.268657 5.594199
+v -1.407445 -3.266382 6.389282
+v -1.385894 -3.228675 5.593767
+v -1.385893 -3.226399 6.388850
+v -1.356957 -3.193665 5.593389
+v -1.356956 -3.191389 6.388473
+v -1.321746 -3.164974 5.593081
+v -1.321745 -3.162699 6.388164
+v -1.281613 -3.143702 5.592852
+v -1.281613 -3.141427 6.387936
+v -1.238102 -3.130670 5.592710
+v -1.238102 -3.128394 6.387794
+v -1.192883 -3.126374 5.592665
+v -1.192884 -3.124101 6.387748
+v -1.147697 -3.130984 5.592714
+v -1.147697 -3.128710 6.387797
+v -1.104278 -3.144321 5.592857
+v -1.104278 -3.142046 6.387940
+v -1.064296 -3.165872 5.593091
+v -1.064296 -3.163597 6.388174
+v -1.029285 -3.194809 5.593402
+v -1.029285 -3.192534 6.388486
+v -1.000594 -3.230020 5.593781
+v -1.000594 -3.227745 6.388865
+v -0.979322 -3.270153 5.594215
+v -0.979322 -3.267877 6.389298
+v -0.966289 -3.313662 5.594683
+v -0.966289 -3.311387 5.864285
+v 0.356099 0.705847 5.864285
+v 0.356098 0.700347 5.594683
+v 0.324589 0.811042 6.389298
+v 0.324588 0.805538 5.594215
+v 0.273160 0.908067 6.388865
+v 0.273160 0.902567 5.593781
+v 0.203793 0.993196 6.388486
+v 0.203794 0.987696 5.593402
+v 0.119149 1.063156 6.388174
+v 0.119148 1.057656 5.593091
+v 0.022483 1.115260 6.387940
+v 0.022485 1.109761 5.592857
+v -0.082489 1.147504 6.387797
+v -0.082489 1.142005 5.592714
+v -0.191737 1.158646 6.387748
+v -0.191736 1.153148 5.592665
+v -0.301062 1.148266 6.387794
+v -0.301060 1.142764 5.592710
+v -0.406255 1.116758 6.387936
+v -0.406256 1.111256 5.592852
+v -0.503284 1.065329 6.388164
+v -0.503284 1.059828 5.593081
+v -0.588412 0.995964 6.388473
+v -0.588414 0.990462 5.593389
+v -0.658372 0.911321 6.388850
+v -0.658375 0.905819 5.593767
+v -0.710479 0.814654 6.389282
+v -0.710478 0.809153 5.594199
+v -0.742722 0.709684 5.864267
+v -0.742722 0.704181 5.594666
+v -0.754074 0.595617 5.864237
+v -0.753866 0.594983 5.595152
+v -0.743164 0.489339 5.862653
+v -0.743496 0.485677 5.595598
+v -0.711969 0.385904 5.863041
+v -0.711981 0.380432 5.596006
+v -0.660540 0.288881 5.863426
+v -0.660555 0.283404 5.596392
+v -0.591172 0.203754 5.863764
+v -0.591185 0.198271 5.596729
+v -0.506527 0.133796 5.864041
+v -0.506543 0.128306 5.597005
+v -0.409864 0.081697 5.864248
+v -0.409876 0.076203 5.597212
+v -0.304893 0.049455 5.864375
+v -0.304900 0.043957 5.597339
+v -0.195649 0.038311 5.864418
+v -0.195649 0.032810 5.597383
+v -0.086328 0.048690 5.864378
+v -0.086321 0.043193 5.597343
+v 0.018864 0.080200 5.864253
+v 0.018874 0.074705 5.597218
+v 0.115892 0.131623 5.864049
+v 0.115906 0.126135 5.597014
+v 0.201019 0.200989 5.863774
+v 0.201035 0.195505 5.596738
+v 0.270979 0.285629 5.863439
+v 0.270996 0.280152 5.596403
+v 0.323086 0.382292 5.863057
+v 0.323098 0.376821 5.596019
+v 0.355004 0.485511 5.862668
+v 0.355350 0.481844 5.595614
+v 0.366655 0.591704 5.864254
+v 0.366481 0.591073 5.595167
+v 0.380815 0.710356 5.864238
+v 0.380815 0.705173 5.229348
+v 0.347889 0.820279 6.389203
+v 0.347889 0.815095 5.228831
+v 0.294148 0.921665 6.388727
+v 0.294148 0.916485 5.228355
+v 0.221662 1.010625 6.388309
+v 0.221663 1.005441 5.227938
+v 0.133213 1.083729 6.387966
+v 0.133212 1.078545 5.227594
+v 0.032202 1.138175 6.387711
+v 0.032202 1.132992 5.227339
+v -0.077490 1.171868 6.387552
+v -0.077490 1.166685 5.227180
+v -0.191650 1.183513 6.387497
+v -0.191649 1.178332 5.227125
+v -0.305888 1.172667 6.387548
+v -0.305886 1.167483 5.227177
+v -0.415811 1.139740 6.387703
+v -0.415811 1.134556 5.227331
+v -0.517202 1.085999 6.387955
+v -0.517201 1.080817 5.227584
+v -0.606158 1.013514 6.388296
+v -0.606158 1.008332 5.227924
+v -0.679263 0.925066 6.388711
+v -0.679264 0.919884 5.228340
+v -0.733711 0.824056 6.389186
+v -0.733710 0.818873 5.228814
+v -0.767404 0.714363 5.864219
+v -0.767404 0.709181 5.229330
+v -0.779050 0.600207 5.864219
+v -0.779049 0.595024 5.229865
+v -0.768201 0.485972 5.862726
+v -0.768202 0.480789 5.230402
+v -0.735275 0.376046 5.863242
+v -0.735276 0.370864 5.230918
+v -0.681534 0.274658 5.863719
+v -0.681535 0.269476 5.231395
+v -0.609048 0.185702 5.864136
+v -0.609047 0.180519 5.231813
+v -0.520598 0.112596 5.864480
+v -0.520599 0.107414 5.232156
+v -0.419586 0.058152 5.864735
+v -0.419587 0.052969 5.232411
+v -0.309895 0.024458 5.864894
+v -0.309894 0.019276 5.232570
+v -0.195736 0.012813 5.864949
+v -0.195737 0.007628 5.232625
+v -0.081500 0.023660 5.864897
+v -0.081499 0.018478 5.232574
+v 0.028426 0.056588 5.864743
+v 0.028425 0.051405 5.232419
+v 0.129816 0.110325 5.864491
+v 0.129816 0.105145 5.232167
+v 0.218773 0.182812 5.864150
+v 0.218772 0.177630 5.231826
+v 0.291878 0.271261 5.863734
+v 0.291878 0.266078 5.231411
+v 0.346324 0.372271 5.863259
+v 0.346325 0.367089 5.230936
+v 0.380017 0.481962 5.862744
+v 0.380018 0.476780 5.230421
+v 0.391665 0.596120 5.864237
+v 0.391664 0.590937 5.229884
+v 0.048422 -2.358916 5.229884
+v 0.048422 -2.356772 5.864237
+v 0.043605 -2.406133 5.230421
+v 0.043604 -2.403990 5.862744
+v 0.029669 -2.451504 5.230936
+v 0.029668 -2.449360 5.863259
+v 0.007148 -2.493284 5.231411
+v 0.007148 -2.491140 5.863734
+v -0.023090 -2.529867 5.231826
+v -0.023089 -2.527724 5.864150
+v -0.059884 -2.559849 5.232167
+v -0.059884 -2.557706 5.864491
+v -0.101821 -2.582077 5.232419
+v -0.101820 -2.579932 5.864743
+v -0.147287 -2.595695 5.232574
+v -0.147288 -2.593553 5.864897
+v -0.194538 -2.600183 5.232625
+v -0.194538 -2.598039 5.864949
+v -0.241756 -2.595365 5.232570
+v -0.241756 -2.593222 5.864894
+v -0.287127 -2.581429 5.232411
+v -0.287126 -2.579286 5.864735
+v -0.328907 -2.558910 5.232156
+v -0.328907 -2.556767 5.864480
+v -0.365491 -2.528672 5.231813
+v -0.365491 -2.526529 5.864136
+v -0.395473 -2.491878 5.231395
+v -0.395473 -2.489735 5.863719
+v -0.417701 -2.449942 5.230918
+v -0.417701 -2.447799 5.863242
+v -0.431320 -2.404475 5.230402
+v -0.431320 -2.402331 5.862726
+v -0.435807 -2.357225 5.229865
+v -0.435807 -2.355082 5.864219
+v -0.430990 -2.310008 5.229330
+v -0.430991 -2.307864 5.864219
+v -0.417054 -2.264637 5.228814
+v -0.417054 -2.262494 6.389186
+v -0.394534 -2.222857 5.228340
+v -0.394534 -2.220714 6.388711
+v -0.364296 -2.186274 5.227924
+v -0.364296 -2.184130 6.388296
+v -0.327502 -2.156292 5.227584
+v -0.327502 -2.154149 6.387955
+v -0.285565 -2.134065 5.227331
+v -0.285565 -2.131920 6.387703
+v -0.240098 -2.120446 5.227177
+v -0.240099 -2.118302 6.387548
+v -0.192847 -2.115958 5.227125
+v -0.192848 -2.113816 6.387497
+v -0.145629 -2.120776 5.227180
+v -0.145629 -2.118632 6.387552
+v -0.100258 -2.134712 5.227339
+v -0.100258 -2.132568 6.387711
+v -0.058479 -2.157232 5.227594
+v -0.058478 -2.155088 6.387966
+v -0.021894 -2.187469 5.227938
+v -0.021894 -2.185325 6.388309
+v 0.008087 -2.224263 5.228355
+v 0.008087 -2.222121 6.388727
+v 0.030315 -2.266200 5.228831
+v 0.030315 -2.264056 6.389203
+v 0.043935 -2.311666 5.229348
+v 0.043935 -2.309522 5.864238
+v 0.038005 -2.358860 5.595167
+v 0.038077 -2.358598 5.864254
+v 0.033402 -2.404039 5.595614
+v 0.033258 -2.402522 5.862668
+v 0.020062 -2.447478 5.596019
+v 0.020056 -2.445215 5.863057
+v -0.001489 -2.487462 5.596403
+v -0.001496 -2.485197 5.863439
+v -0.030426 -2.522474 5.596738
+v -0.030433 -2.520205 5.863774
+v -0.065637 -2.551166 5.597014
+v -0.065643 -2.548896 5.864049
+v -0.105771 -2.572439 5.597218
+v -0.105775 -2.570166 5.864253
+v -0.149282 -2.585473 5.597343
+v -0.149285 -2.583199 5.864378
+v -0.194502 -2.589767 5.597383
+v -0.194502 -2.587492 5.864418
+v -0.239690 -2.585156 5.597339
+v -0.239687 -2.582883 5.864375
+v -0.283110 -2.571819 5.597212
+v -0.283105 -2.569547 5.864248
+v -0.323093 -2.550268 5.597005
+v -0.323087 -2.547998 5.864041
+v -0.358103 -2.521329 5.596729
+v -0.358097 -2.519062 5.863764
+v -0.386796 -2.486117 5.596392
+v -0.386789 -2.483852 5.863426
+v -0.408066 -2.445985 5.596006
+v -0.408062 -2.443721 5.863041
+v -0.421102 -2.402453 5.595598
+v -0.420964 -2.400939 5.862653
+v -0.425391 -2.357242 5.595152
+v -0.425477 -2.356980 5.864237
+v -0.420781 -2.312076 5.594666
+v -0.420781 -2.309800 5.864267
+v -0.407444 -2.268657 5.594199
+v -0.407445 -2.266382 6.389282
+v -0.385894 -2.228675 5.593767
+v -0.385893 -2.226399 6.388850
+v -0.356957 -2.193665 5.593389
+v -0.356956 -2.191389 6.388473
+v -0.321746 -2.164974 5.593081
+v -0.321745 -2.162699 6.388164
+v -0.281613 -2.143702 5.592852
+v -0.281613 -2.141427 6.387936
+v -0.238102 -2.130670 5.592710
+v -0.238102 -2.128394 6.387794
+v -0.192883 -2.126374 5.592665
+v -0.192884 -2.124101 6.387748
+v -0.147697 -2.130984 5.592714
+v -0.147697 -2.128710 6.387797
+v -0.104278 -2.144320 5.592857
+v -0.104278 -2.142046 6.387940
+v -0.064296 -2.165872 5.593091
+v -0.064296 -2.163597 6.388174
+v -0.029285 -2.194809 5.593402
+v -0.029285 -2.192534 6.388486
+v -0.000594 -2.230020 5.593781
+v -0.000594 -2.227745 6.388865
+v 0.020678 -2.270153 5.594215
+v 0.020678 -2.267877 6.389298
+v 0.033711 -2.313662 5.594683
+v 0.033711 -2.311387 5.864285
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.797953 0.896311
+vt 0.741726 0.913364
+vt 0.594127 0.834472
+vt 0.577066 0.778233
+vt 0.655948 0.630639
+vt 0.770682 0.619333
+vt 0.859798 0.692466
+vt 0.876858 0.748707
+vt 0.683240 0.907605
+vt 0.655960 0.896305
+vt 0.582826 0.719746
+vt 0.610530 0.667916
+vt 0.683222 0.619339
+vt 0.822512 0.647036
+vt 0.843392 0.667915
+vt 0.871097 0.807194
+vt 0.843391 0.859025
+vt 0.770685 0.907604
+vt 0.712199 0.913364
+vt 0.631409 0.879901
+vt 0.610530 0.859023
+vt 0.582827 0.807192
+vt 0.577066 0.748705
+vt 0.594126 0.692467
+vt 0.631409 0.647037
+vt 0.712194 0.613573
+vt 0.741722 0.613573
+vt 0.797962 0.630631
+vt 0.871098 0.719747
+vt 0.876858 0.778235
+vt 0.859797 0.834474
+vt 0.822501 0.879912
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vn 0.094500 -0.995500 0.006900
+vn -0.000000 0.004400 1.000000
+vn 0.000000 0.004500 1.000000
+vn 0.000000 0.004000 1.000000
+vn 0.000300 0.004100 1.000000
+vn -0.000200 0.004400 1.000000
+vn 0.000100 0.004500 1.000000
+vn -0.000000 0.004600 1.000000
+vn -0.000100 0.004400 1.000000
+vn -0.000200 0.003800 1.000000
+vn 0.000100 0.004000 1.000000
+vn -0.000000 0.003900 1.000000
+vn -0.000000 0.004100 1.000000
+vn -0.000100 0.004000 1.000000
+vn -0.001200 0.004200 1.000000
+vn -0.995500 -0.094600 0.001900
+vn 0.994800 -0.101500 0.002100
+vn 0.995500 0.094400 -0.002500
+vn -0.994800 0.101400 -0.002700
+vn 0.995500 0.094500 -0.000800
+vn -0.994800 0.101500 -0.000800
+vn -0.995500 -0.094500 0.000800
+vn 0.994800 -0.101500 0.000800
+vn -0.770700 0.637000 -0.013100
+vn -0.008000 0.009000 0.999900
+vn -0.002400 0.006600 1.000000
+vn -0.000500 0.010000 1.000000
+vn 0.002400 0.009000 1.000000
+vn -0.001400 0.009500 1.000000
+vn -0.002300 0.005400 1.000000
+vn 0.003000 0.008100 1.000000
+vn 0.000600 0.010100 0.999900
+vn -0.002400 0.007600 1.000000
+vn 0.001500 0.009400 1.000000
+vn -0.002100 0.008700 1.000000
+vn 0.003100 0.007000 1.000000
+vn 0.002800 0.005900 1.000000
+vn -0.001800 0.005700 1.000000
+vn 0.001800 0.000200 1.000000
+vn 0.003000 -0.013400 0.999900
+vn 0.004900 -0.014400 0.999900
+vn -0.182400 -0.960000 0.212300
+vn -0.008900 0.012000 0.999900
+vn 0.008900 0.011900 0.999900
+vn -0.008500 0.015200 0.999800
+vn -0.007000 0.017900 0.999800
+vn -0.004600 0.019900 0.999800
+vn 0.001600 0.020800 0.999800
+vn 0.004600 0.019800 0.999800
+vn 0.007100 0.017800 0.999800
+vn 0.008600 0.015000 0.999900
+vn 0.361500 -0.909800 0.204000
+vn 0.007900 0.008900 0.999900
+vn 0.006200 0.005600 1.000000
+vn -0.000100 0.004300 1.000000
+vn -0.995800 -0.092100 0.000900
+vn 0.637100 0.770800 -0.003400
+vn -0.631700 0.775200 -0.003500
+vn 0.770800 -0.637100 0.004400
+vn -0.468300 0.883500 -0.003900
+vn 0.287000 -0.957900 0.007900
+vn 0.286900 -0.957900 0.006600
+vn -0.094500 0.995500 -0.004400
+vn -0.101500 -0.994800 0.006900
+vn -0.286900 0.957900 -0.004300
+vn -0.474500 -0.880200 0.006100
+vn -0.637100 -0.770800 0.005300
+vn 0.880300 -0.474500 0.003300
+vn -0.883600 -0.468300 0.003200
+vn -0.955100 -0.296300 0.002100
+vn 0.995100 -0.099000 0.001000
+vn 0.994800 0.102100 0.000500
+vn -0.880200 0.474500 -0.009800
+vn -0.001500 0.020800 0.999800
+vn -0.955400 0.295400 -0.005300
+vn -0.000800 -0.000200 1.000000
+vn -0.631600 0.775100 -0.016000
+vn -0.468200 0.883400 -0.018200
+vn -0.770800 0.637100 -0.002800
+vn 0.468300 -0.883500 0.007200
+vn 0.293600 0.955700 -0.019700
+vn 0.474400 0.880100 -0.018100
+vn 0.637000 0.770700 -0.015900
+vn 0.775200 0.631600 -0.013000
+vn 0.883500 0.468300 -0.009600
+vn 0.957400 0.288700 -0.005200
+vn -0.994000 0.109100 0.000400
+vn 0.770800 -0.637100 0.005200
+vn 0.631700 -0.775200 0.006400
+vn -0.880300 0.474500 -0.002100
+vn -0.094500 0.995300 -0.020500
+vn -0.775200 -0.631700 0.004400
+vn 0.468300 -0.883500 0.006100
+vn 0.094500 -0.995500 0.008200
+vn 0.101500 0.994800 -0.004400
+vn 0.293600 0.955900 -0.004300
+vn 0.474500 0.880300 -0.003900
+vn 0.952900 -0.303200 0.002100
+vn 0.775200 0.631700 -0.002800
+vn 0.883600 0.468300 -0.002100
+vn 0.956200 0.292700 -0.001300
+vn -0.995500 -0.094600 0.000800
+vn -0.286900 0.957800 -0.019700
+vn 0.955900 -0.293600 0.002400
+vn 0.880300 -0.474500 0.003900
+vn -0.955900 0.293600 -0.002400
+vn 0.101500 0.994600 -0.020500
+vn 0.631700 -0.775200 0.005400
+vn -0.293600 -0.955900 0.006600
+vn -0.101500 -0.994800 0.008200
+vn -0.293600 -0.955900 0.007800
+vn -0.474500 -0.880200 0.007200
+vn -0.637100 -0.770800 0.006300
+vn -0.775200 -0.631700 0.005200
+vn -0.883600 -0.468300 0.003800
+vn -0.958000 -0.286900 0.002400
+vn 0.094600 -0.995500 0.006900
+vn -0.770800 0.637000 -0.013100
+vn -0.005700 0.007000 1.000000
+vn -0.003000 0.007000 1.000000
+vn -0.000500 0.010100 0.999900
+vn 0.002100 0.008600 1.000000
+vn -0.001600 0.009800 1.000000
+vn -0.006300 0.005700 1.000000
+vn 0.002500 0.007600 1.000000
+vn 0.000500 0.010000 1.000000
+vn -0.003000 0.008100 1.000000
+vn 0.001600 0.009700 1.000000
+vn -0.002500 0.009100 1.000000
+vn 0.002300 0.006600 1.000000
+vn 0.001800 0.005700 1.000000
+vn -0.002800 0.006000 1.000000
+vn 0.000700 -0.000200 1.000000
+vn -0.005100 -0.014400 0.999900
+vn -0.003200 -0.013400 0.999900
+vn -0.368000 -0.907200 0.204000
+vn -0.007300 0.010000 0.999900
+vn 0.007200 0.009900 0.999900
+vn -0.007600 0.013300 0.999900
+vn -0.006600 0.016400 0.999800
+vn -0.004500 0.018900 0.999800
+vn 0.001700 0.020400 0.999800
+vn 0.004600 0.018800 0.999800
+vn 0.006600 0.016300 0.999800
+vn 0.007600 0.013100 0.999900
+vn 0.175700 -0.961300 0.212300
+vn 0.005600 0.007000 1.000000
+vn 0.002200 0.005400 1.000000
+vn -0.468300 0.883600 -0.003900
+vn -0.957900 -0.286900 0.005900
+vn -0.880300 0.474400 -0.009800
+vn -0.001600 0.020400 0.999800
+vn -0.955900 0.293500 -0.006100
+vn -0.002000 0.000200 1.000000
+vn -0.468300 0.883400 -0.018200
+vn 0.637100 0.770600 -0.015900
+vn 0.883500 0.468200 -0.009700
+vn 0.958000 0.286800 -0.005900
+vn 0.955900 -0.293600 0.006000
+vn 0.957900 0.286900 -0.002300
+vn -0.286900 0.957700 -0.019700
+vn -0.954100 0.299500 -0.001300
+vn -0.000300 0.003800 1.000000
+vn -0.000100 0.003900 1.000000
+vn -0.000200 0.004000 1.000000
+vn 0.003100 -0.013400 0.999900
+vn 0.008800 0.011900 0.999900
+vn 0.008500 0.015000 0.999900
+vn 0.002400 0.007600 1.000000
+vn 0.006700 0.016300 0.999800
+vn 0.005700 0.007000 1.000000
+vn -0.001900 0.000200 1.000000
+vn 0.000200 0.010900 0.999900
+vn -0.019300 0.021700 0.999600
+vn -0.000000 0.009600 1.000000
+vn -0.000600 0.009200 1.000000
+vn 0.880300 -0.474500 0.001600
+vn 0.000100 0.010700 0.999900
+vn -0.003000 0.010200 0.999900
+vn -0.955400 0.295400 -0.002200
+vn -0.995500 -0.094600 0.000300
+vn -0.880300 0.474500 -0.000900
+vn 0.631700 -0.775200 0.002600
+vn 0.000300 0.009700 1.000000
+vn 0.952900 -0.303200 0.000900
+vn 0.000100 0.009600 1.000000
+vn 0.293600 0.955900 -0.001800
+vn 0.637100 0.770800 -0.001400
+vn 0.020700 0.036300 0.999100
+vn -0.094500 0.995500 -0.001800
+vn -0.775200 -0.631700 0.001800
+vn 0.994800 -0.101500 0.000900
+vn -0.101500 -0.994800 0.002800
+vn -0.000000 0.010800 0.999900
+vn 0.000100 0.009700 1.000000
+vn -0.000100 0.009900 1.000000
+vn -0.994800 0.101400 -0.001100
+vn 0.883600 0.468300 -0.000900
+vn -0.995800 -0.092100 0.000400
+vn 0.005900 0.021700 0.999700
+vn -0.005100 0.021000 0.999800
+vn -0.011000 0.048000 0.998800
+vn 0.000000 0.010900 0.999900
+vn 0.004000 0.050300 0.998700
+vn 0.994800 0.102100 0.000200
+vn -0.637100 -0.770800 0.002200
+vn 0.094500 -0.995500 0.002800
+vn -0.005500 0.013100 0.999900
+vn 0.094500 -0.995500 0.003400
+vn 0.011600 -0.034800 0.999300
+vn -0.001200 0.024100 0.999700
+vn 0.775200 0.631700 -0.005400
+vn 0.995500 0.094500 -0.000300
+vn -0.775200 -0.631700 0.002100
+vn 0.995500 0.094400 -0.001000
+vn -0.468300 0.883500 -0.007500
+vn -0.005600 0.016000 0.999900
+vn 0.007300 0.019500 0.999800
+vn 0.468300 -0.883500 0.002500
+vn 0.631700 -0.775200 0.002200
+vn -0.003700 0.050300 0.998700
+vn 0.021300 0.028700 0.999400
+vn -0.293600 -0.955900 0.002700
+vn -0.101500 -0.994800 0.003400
+vn -0.004400 0.013800 0.999900
+vn -0.287000 0.957900 -0.008200
+vn 0.101500 0.994800 -0.008500
+vn -0.000100 0.010800 0.999900
+vn -0.880300 0.474500 -0.004000
+vn 0.883600 0.468300 -0.004000
+vn -0.003500 0.023000 0.999700
+vn 0.293600 0.955900 -0.008100
+vn 0.017100 0.042900 0.998900
+vn 0.994800 -0.101500 0.000300
+vn -0.286900 0.957900 -0.001800
+vn -0.995500 -0.094500 0.000300
+vn -0.883600 -0.468300 0.001600
+vn -0.020600 0.036600 0.999100
+vn -0.994000 0.109100 0.000200
+vn -0.000300 0.009700 1.000000
+vn -0.000000 0.011200 0.999900
+vn 0.004400 0.000400 1.000000
+vn 0.770800 -0.637100 0.001800
+vn 0.995100 -0.099000 0.000400
+vn -0.474500 -0.880300 0.002500
+vn -0.637100 -0.770800 0.002600
+vn 0.770800 -0.637100 0.002200
+vn -0.883600 -0.468300 0.001300
+vn 0.101500 0.994800 -0.001800
+vn -0.000100 0.009500 1.000000
+vn 0.000800 0.009900 1.000000
+vn -0.631700 0.775200 -0.006600
+vn 0.956200 0.292700 -0.000500
+vn -0.016900 0.043300 0.998900
+vn 0.637100 0.770800 -0.006600
+vn -0.955900 0.293600 -0.001000
+vn -0.000000 0.010700 0.999900
+vn 0.286900 -0.957900 0.002700
+vn 0.011200 0.047900 0.998800
+vn -0.000300 0.010700 0.999900
+vn 0.367900 -0.925900 0.085900
+vn -0.958000 -0.286900 0.001000
+vn -0.021400 0.029100 0.999300
+vn 0.007400 -0.032300 0.999400
+vn -0.631700 0.775200 -0.001400
+vn -0.293600 -0.955900 0.003200
+vn 0.775200 0.631700 -0.001200
+vn 0.955900 -0.293600 0.001000
+vn -0.994800 0.101500 -0.000300
+vn -0.005800 0.018500 0.999800
+vn 0.006900 0.014300 0.999900
+vn -0.770800 0.637100 -0.001200
+vn 0.474500 0.880300 -0.001600
+vn -0.474500 -0.880300 0.003000
+vn 0.015100 0.013600 0.999800
+vn 0.880300 -0.474500 0.001400
+vn -0.094500 0.995500 -0.008500
+vn -0.185900 -0.978500 0.089500
+vn 0.007600 0.016800 0.999800
+vn 0.003500 0.022800 0.999700
+vn 0.474500 0.880200 -0.007500
+vn -0.770800 0.637100 -0.005400
+vn 0.019100 0.021500 0.999600
+vn -0.000300 0.010400 0.999900
+vn 0.468300 -0.883600 0.003000
+vn 0.957400 0.288700 -0.002100
+vn -0.001800 -0.000500 1.000000
+vn -0.955100 -0.296300 0.000800
+vn 0.287000 -0.957900 0.003200
+vn -0.468300 0.883600 -0.001600
+vn 0.001400 0.024400 0.999700
+vn 0.094600 -0.995500 0.002800
+vn -0.770800 0.637000 -0.005400
+vn -0.013700 0.017000 0.999800
+vn -0.007300 0.016900 0.999800
+vn -0.001300 0.024400 0.999700
+vn 0.005100 0.020900 0.999800
+vn -0.003800 0.023600 0.999700
+vn -0.015100 0.013800 0.999800
+vn 0.005900 0.018500 0.999800
+vn 0.001300 0.024100 0.999700
+vn -0.007200 0.019600 0.999800
+vn 0.004000 0.023500 0.999700
+vn -0.006000 0.022000 0.999700
+vn 0.005500 0.015900 0.999900
+vn 0.004400 0.013700 0.999900
+vn -0.006700 0.014400 0.999900
+vn 0.001800 -0.000500 1.000000
+vn -0.012400 -0.034700 0.999300
+vn -0.007700 -0.032300 0.999400
+vn -0.374500 -0.923300 0.085900
+vn -0.017600 0.024100 0.999600
+vn 0.017500 0.023800 0.999600
+vn -0.018300 0.032100 0.999300
+vn -0.016000 0.039700 0.999100
+vn -0.010800 0.045700 0.998900
+vn 0.004100 0.049300 0.998800
+vn 0.011000 0.045400 0.998900
+vn 0.016000 0.039400 0.999100
+vn 0.018400 0.031700 0.999300
+vn 0.179100 -0.979700 0.089500
+vn 0.013700 0.016800 0.999800
+vn 0.005400 0.012900 0.999900
+vn -0.957900 -0.286900 0.002400
+vn -0.880300 0.474400 -0.004000
+vn -0.003800 0.049400 0.998800
+vn -0.955900 0.293500 -0.002500
+vn -0.004700 0.000500 1.000000
+vn 0.637100 0.770700 -0.006600
+vn 0.958000 0.286800 -0.002400
+vn 0.468300 -0.883600 0.002500
+vn 0.955900 -0.293600 0.002500
+vn 0.957900 0.286900 -0.001000
+vn -0.954100 0.299500 -0.000600
+vn 0.094600 -0.995500 0.002900
+vn -0.010800 0.045800 0.998900
+vn -0.012300 -0.034700 0.999300
+vn -0.004500 0.013800 0.999900
+vn -0.287000 0.957900 -0.001800
+vn 0.007300 -0.032300 0.999400
+vn 0.293700 0.955900 -0.008100
+vn 0.000300 0.010900 0.999900
+vn -0.006600 0.014400 0.999900
+vn -0.000000 0.009500 1.000000
+vn -0.019200 0.021700 0.999600
+vn 0.016100 0.039400 0.999100
+vn 0.000200 0.009700 1.000000
+vn 0.001300 0.024000 0.999700
+vn -0.015900 0.039700 0.999100
+vn -0.004600 0.000500 1.000000
+vn -0.000200 0.009700 1.000000
+vn 0.003900 0.023500 0.999700
+vn 0.000700 0.009900 1.000000
+vn 0.006700 0.014300 0.999900
+vn 0.019200 0.021500 0.999600
+vn 0.021400 0.028700 0.999400
+vn 0.004500 0.013700 0.999900
+vn 0.179100 -0.979800 0.089500
+vn 0.020600 0.036300 0.999100
+vn 0.000000 0.009700 1.000000
+vn -0.001300 0.004200 1.000000
+vn -0.001900 0.005700 1.000000
+vn 0.004800 -0.014400 0.999900
+vn 0.000500 0.009900 1.000000
+vn 0.001900 0.005700 1.000000
+vn -0.002700 0.006000 1.000000
+vn -0.000100 0.010700 0.999900
+vn 0.000100 0.010900 0.999900
+vn 0.005900 0.021800 0.999700
+vn -0.000500 0.009200 1.000000
+vn 0.003900 0.050300 0.998700
+vn -0.000100 0.009600 1.000000
+vn -0.000100 0.009700 1.000000
+vn 0.015000 0.013600 0.999800
+g HSLampen_Cube.000_Yellow
+usemtl Yellow
+s off
+f 16/1/1 15/2/1 17/3/1
+f 64/4/2 4/5/2 16/6/2
+f 16/6/3 20/7/3 32/8/3
+f 64/4/4 40/9/4 48/10/4
+f 48/10/4 52/11/4 64/4/4
+f 16/6/3 4/5/3 8/12/3
+f 8/12/3 10/13/3 16/6/3
+f 32/8/3 20/7/3 24/14/3
+f 24/14/2 28/15/2 32/8/2
+f 32/8/5 34/16/5 40/9/5
+f 40/9/4 44/17/4 46/18/4
+f 64/4/4 52/11/4 56/19/4
+f 56/19/4 60/20/4 64/4/4
+f 64/4/6 2/21/6 4/5/6
+f 4/5/7 6/22/7 8/12/7
+f 16/6/3 10/13/3 12/23/3
+f 12/23/3 14/24/3 16/6/3
+f 16/6/8 18/25/8 20/7/8
+f 20/7/2 22/26/2 24/14/2
+f 24/14/9 26/27/9 28/15/9
+f 28/15/7 30/28/7 32/8/7
+f 40/9/10 34/16/10 36/29/10
+f 36/29/11 38/30/11 40/9/11
+f 40/9/12 42/31/12 44/17/12
+f 40/9/4 46/18/4 48/10/4
+f 48/10/13 50/32/13 52/11/13
+f 52/11/4 54/33/4 56/19/4
+f 56/19/14 58/34/14 60/20/14
+f 60/20/15 62/35/15 64/4/15
+f 2/36/16 64/37/16 1/38/16
+f 30/39/17 29/40/17 32/41/17
+f 34/42/18 32/41/18 33/43/18
+f 62/44/19 61/45/19 64/37/19
+f 66/46/20 65/47/20 128/48/20
+f 94/49/21 96/50/21 93/51/21
+f 98/52/22 97/53/22 96/50/22
+f 126/54/23 128/48/23 125/55/23
+f 55/56/24 57/57/24 58/58/24
+f 57/59/25 121/60/25 123/61/25
+f 87/62/26 89/63/26 25/64/26
+f 79/65/27 81/66/27 17/67/27
+f 75/68/28 11/69/28 9/70/28
+f 81/66/29 83/71/29 19/72/29
+f 123/61/30 125/73/30 61/74/30
+f 73/75/31 9/70/31 7/76/31
+f 79/65/32 15/77/32 13/78/32
+f 85/79/33 87/62/33 23/80/33
+f 11/69/34 75/68/34 77/81/34
+f 83/71/35 85/79/35 21/82/35
+f 71/83/36 7/76/36 5/84/36
+f 69/85/37 5/84/37 3/86/37
+f 89/63/38 91/87/38 27/88/38
+f 127/89/39 65/90/39 1/91/39
+f 125/73/40 127/89/40 63/92/40
+f 97/93/41 33/94/41 31/95/41
+f 91/87/42 93/96/42 29/97/42
+f 55/98/43 119/99/43 121/60/43
+f 101/100/44 103/101/44 39/102/44
+f 53/103/45 117/104/45 119/99/45
+f 51/105/46 115/106/46 117/104/46
+f 49/107/47 113/108/47 115/106/47
+f 109/109/48 111/110/48 47/111/48
+f 107/112/49 109/109/49 45/113/49
+f 105/114/50 107/112/50 43/115/50
+f 103/101/51 105/114/51 41/116/51
+f 67/117/52 3/86/52 1/91/52
+f 99/118/53 101/100/53 37/119/53
+f 99/118/54 35/120/54 33/94/54
+f 40/9/55 64/4/55 16/6/55
+f 64/37/56 63/121/56 1/38/56
+f 73/122/57 71/123/57 72/124/57
+f 88/125/58 87/126/58 85/127/58
+f 24/128/59 23/129/59 25/130/59
+f 86/131/60 85/127/60 83/132/60
+f 116/133/61 115/134/61 113/135/61
+f 18/136/62 17/3/62 19/137/62
+f 82/138/63 81/139/63 79/140/63
+f 13/141/64 15/2/64 16/1/64
+f 84/142/65 83/132/65 81/143/65
+f 9/144/66 11/145/66 12/146/66
+f 7/147/67 9/144/67 10/148/67
+f 26/149/68 25/130/68 27/150/68
+f 3/151/69 5/152/69 6/153/69
+f 1/38/70 3/151/70 4/154/70
+f 29/40/71 31/155/71 32/41/71
+f 32/41/72 31/155/72 33/43/72
+f 57/57/73 59/156/73 60/157/73
+f 47/111/74 111/110/74 113/108/74
+f 59/156/75 61/45/75 62/44/75
+f 95/158/76 31/95/76 29/97/76
+f 53/159/77 55/56/77 56/160/77
+f 51/161/78 53/159/78 54/162/78
+f 90/163/79 89/164/79 87/126/79
+f 118/165/80 117/166/80 115/134/80
+f 44/167/81 43/168/81 45/169/81
+f 42/170/82 41/171/82 43/168/82
+f 40/172/83 39/173/83 41/171/83
+f 38/174/84 37/175/84 39/173/84
+f 36/176/85 35/177/85 37/175/85
+f 34/42/86 33/43/86 35/177/86
+f 61/45/87 63/121/87 64/37/87
+f 65/47/20 127/178/20 128/48/20
+f 122/179/88 121/180/88 119/181/88
+f 120/182/89 119/181/89 117/166/89
+f 92/183/90 91/184/90 89/164/90
+f 47/185/91 49/186/91 50/187/91
+f 5/152/92 7/147/92 8/188/92
+f 20/189/93 19/137/93 21/190/93
+f 114/191/94 113/135/94 111/192/94
+f 79/140/95 77/193/95 78/194/95
+f 77/193/96 75/195/96 76/196/96
+f 75/195/97 73/122/97 74/197/97
+f 28/198/98 27/150/98 29/40/98
+f 71/123/99 69/199/99 70/200/99
+f 69/199/100 67/201/100 68/202/100
+f 68/202/101 67/201/101 65/47/101
+f 96/50/21 95/203/21 93/51/21
+f 97/53/102 95/203/102 96/50/102
+f 49/186/103 51/161/103 52/204/103
+f 126/54/104 125/55/104 123/205/104
+f 124/206/105 123/205/105 121/180/105
+f 92/183/106 94/49/106 93/51/106
+f 46/207/107 45/169/107 47/208/107
+f 22/209/108 21/190/108 23/129/108
+f 11/145/109 13/141/109 14/210/109
+f 111/192/110 109/211/110 110/212/110
+f 109/211/111 107/213/111 108/214/111
+f 107/213/112 105/215/112 106/216/112
+f 105/215/113 103/217/113 104/218/113
+f 103/217/114 101/219/114 102/220/114
+f 101/219/115 99/221/115 100/222/115
+f 99/221/116 97/53/116 98/52/116
+f 128/48/23 127/178/23 125/55/23
+f 18/136/117 16/1/117 17/3/117
+f 56/160/118 55/56/118 58/58/118
+f 59/223/119 57/59/119 123/61/119
+f 23/80/120 87/62/120 25/64/120
+f 15/77/121 79/65/121 17/67/121
+f 73/75/122 75/68/122 9/70/122
+f 17/67/123 81/66/123 19/72/123
+f 59/223/124 123/61/124 61/74/124
+f 71/83/125 73/75/125 7/76/125
+f 77/81/126 79/65/126 13/78/126
+f 21/82/127 85/79/127 23/80/127
+f 13/78/128 11/69/128 77/81/128
+f 19/72/129 83/71/129 21/82/129
+f 69/85/130 71/83/130 5/84/130
+f 67/117/131 69/85/131 3/86/131
+f 25/64/132 89/63/132 27/88/132
+f 63/92/133 127/89/133 1/91/133
+f 61/74/134 125/73/134 63/92/134
+f 95/158/135 97/93/135 31/95/135
+f 27/88/136 91/87/136 29/97/136
+f 57/59/137 55/98/137 121/60/137
+f 37/119/138 101/100/138 39/102/138
+f 55/98/139 53/103/139 119/99/139
+f 53/103/140 51/105/140 117/104/140
+f 51/105/141 49/107/141 115/106/141
+f 45/113/142 109/109/142 47/111/142
+f 43/115/143 107/112/143 45/113/143
+f 41/116/144 105/114/144 43/115/144
+f 39/102/145 103/101/145 41/116/145
+f 65/90/146 67/117/146 1/91/146
+f 35/120/147 99/118/147 37/119/147
+f 97/93/148 99/118/148 33/94/148
+f 32/8/5 40/9/5 16/6/5
+f 74/197/57 73/122/57 72/124/57
+f 86/131/58 88/125/58 85/127/58
+f 26/149/59 24/128/59 25/130/59
+f 84/142/149 86/131/149 83/132/149
+f 114/191/61 116/133/61 113/135/61
+f 20/189/62 18/136/62 19/137/62
+f 80/224/63 82/138/63 79/140/63
+f 14/210/64 13/141/64 16/1/64
+f 82/225/65 84/142/65 81/143/65
+f 10/148/66 9/144/66 12/146/66
+f 8/188/67 7/147/67 10/148/67
+f 28/198/68 26/149/68 27/150/68
+f 4/154/69 3/151/69 6/153/69
+f 2/36/150 1/38/150 4/154/150
+f 58/58/151 57/57/151 60/157/151
+f 49/107/152 47/111/152 113/108/152
+f 60/157/153 59/156/153 62/44/153
+f 93/96/154 95/158/154 29/97/154
+f 54/162/77 53/159/77 56/160/77
+f 52/204/155 51/161/155 54/162/155
+f 88/125/79 90/163/79 87/126/79
+f 116/133/80 118/165/80 115/134/80
+f 46/207/81 44/167/81 45/169/81
+f 44/167/82 42/170/82 43/168/82
+f 42/170/156 40/172/156 41/171/156
+f 40/172/84 38/174/84 39/173/84
+f 38/174/157 36/176/157 37/175/157
+f 36/176/158 34/42/158 35/177/158
+f 120/182/88 122/179/88 119/181/88
+f 118/165/89 120/182/89 117/166/89
+f 90/163/90 92/183/90 89/164/90
+f 48/226/91 47/185/91 50/187/91
+f 6/153/92 5/152/92 8/188/92
+f 22/209/93 20/189/93 21/190/93
+f 112/227/94 114/191/94 111/192/94
+f 80/224/95 79/140/95 78/194/95
+f 78/194/96 77/193/96 76/196/96
+f 76/196/97 75/195/97 74/197/97
+f 30/39/159 28/198/159 29/40/159
+f 72/124/99 71/123/99 70/200/99
+f 70/200/100 69/199/100 68/202/100
+f 66/46/160 68/202/160 65/47/160
+f 50/187/161 49/186/161 52/204/161
+f 124/206/104 126/54/104 123/205/104
+f 122/179/105 124/206/105 121/180/105
+f 91/184/162 92/183/162 93/51/162
+f 48/228/107 46/207/107 47/208/107
+f 24/128/108 22/209/108 23/129/108
+f 12/146/109 11/145/109 14/210/109
+f 112/227/110 111/192/110 110/212/110
+f 110/212/111 109/211/111 108/214/111
+f 108/214/112 107/213/112 106/216/112
+f 106/216/113 105/215/113 104/218/113
+f 104/218/114 103/217/114 102/220/114
+f 102/220/115 101/219/115 100/222/115
+f 100/222/116 99/221/116 98/52/116
+g HSLampen_Cube.000_Green
+usemtl Green
+f 272/1/1 271/2/1 273/3/1
+f 320/4/2 260/5/2 272/6/2
+f 272/6/3 276/7/3 288/8/3
+f 320/4/4 296/9/4 304/10/4
+f 304/10/4 308/11/4 320/4/4
+f 272/6/3 260/5/3 264/12/3
+f 264/12/3 266/13/3 272/6/3
+f 288/8/3 276/7/3 280/14/3
+f 280/14/2 284/15/2 288/8/2
+f 288/8/5 290/16/5 296/9/5
+f 296/9/4 300/17/4 302/18/4
+f 320/4/4 308/11/4 312/19/4
+f 312/19/4 316/20/4 320/4/4
+f 320/4/6 258/21/6 260/5/6
+f 260/5/7 262/22/7 264/12/7
+f 272/6/3 266/13/3 268/23/3
+f 268/23/3 270/24/3 272/6/3
+f 272/6/8 274/25/8 276/7/8
+f 276/7/2 278/26/2 280/14/2
+f 280/14/9 282/27/9 284/15/9
+f 284/15/3 286/28/3 288/8/3
+f 296/9/163 290/16/163 292/29/163
+f 292/29/11 294/30/11 296/9/11
+f 296/9/164 298/31/164 300/17/164
+f 296/9/4 302/18/4 304/10/4
+f 304/10/13 306/32/13 308/11/13
+f 308/11/4 310/33/4 312/19/4
+f 312/19/165 314/34/165 316/20/165
+f 316/20/15 318/35/15 320/4/15
+f 258/36/16 320/37/16 257/38/16
+f 286/39/17 285/40/17 288/41/17
+f 290/42/18 288/41/18 289/43/18
+f 318/44/19 317/45/19 320/37/19
+f 322/46/20 321/47/20 384/48/20
+f 350/49/21 352/50/21 349/51/21
+f 354/52/22 353/53/22 352/50/22
+f 382/54/23 384/48/23 381/55/23
+f 311/56/24 313/57/24 314/58/24
+f 313/59/25 377/60/25 379/61/25
+f 343/62/26 345/63/26 281/64/26
+f 335/65/27 337/66/27 273/67/27
+f 331/68/28 267/69/28 265/70/28
+f 337/66/29 339/71/29 275/72/29
+f 379/61/30 381/73/30 317/74/30
+f 329/75/31 265/70/31 263/76/31
+f 335/65/32 271/77/32 269/78/32
+f 341/79/33 343/62/33 279/80/33
+f 267/69/34 331/68/34 333/81/34
+f 339/71/35 341/79/35 277/82/35
+f 327/83/36 263/76/36 261/84/36
+f 325/85/37 261/84/37 259/86/37
+f 345/63/38 347/87/38 283/88/38
+f 383/89/39 321/90/39 257/91/39
+f 381/73/166 383/89/166 319/92/166
+f 353/93/41 289/94/41 287/95/41
+f 347/87/42 349/96/42 285/97/42
+f 311/98/43 375/99/43 377/60/43
+f 357/100/167 359/101/167 295/102/167
+f 309/103/45 373/104/45 375/99/45
+f 307/105/46 371/106/46 373/104/46
+f 305/107/47 369/108/47 371/106/47
+f 365/109/48 367/110/48 303/111/48
+f 363/112/49 365/109/49 301/113/49
+f 361/114/50 363/112/50 299/115/50
+f 359/101/168 361/114/168 297/116/168
+f 323/117/52 259/86/52 257/91/52
+f 355/118/53 357/100/53 293/119/53
+f 355/118/54 291/120/54 289/94/54
+f 296/9/55 320/4/55 272/6/55
+f 320/37/56 319/121/56 257/38/56
+f 329/122/57 327/123/57 328/124/57
+f 344/125/58 343/126/58 341/127/58
+f 280/128/59 279/129/59 281/130/59
+f 342/131/60 341/127/60 339/132/60
+f 372/133/61 371/134/61 369/135/61
+f 274/136/62 273/3/62 275/137/62
+f 338/138/63 337/139/63 335/140/63
+f 269/141/64 271/2/64 272/1/64
+f 340/142/65 339/132/65 337/143/65
+f 265/144/66 267/145/66 268/146/66
+f 263/147/67 265/144/67 266/148/67
+f 282/149/68 281/130/68 283/150/68
+f 259/151/69 261/152/69 262/153/69
+f 257/38/70 259/151/70 260/154/70
+f 285/40/71 287/155/71 288/41/71
+f 288/41/72 287/155/72 289/43/72
+f 313/57/73 315/156/73 316/157/73
+f 303/111/74 367/110/74 369/108/74
+f 315/156/75 317/45/75 318/44/75
+f 351/158/76 287/95/76 285/97/76
+f 309/159/77 311/56/77 312/160/77
+f 307/161/78 309/159/78 310/162/78
+f 346/163/79 345/164/79 343/126/79
+f 374/165/80 373/166/80 371/134/80
+f 300/167/81 299/168/81 301/169/81
+f 298/170/82 297/171/82 299/168/82
+f 296/172/83 295/173/83 297/171/83
+f 294/174/84 293/175/84 295/173/84
+f 292/176/85 291/177/85 293/175/85
+f 290/42/86 289/43/86 291/177/86
+f 317/45/87 319/121/87 320/37/87
+f 321/47/20 383/178/20 384/48/20
+f 378/179/88 377/180/88 375/181/88
+f 376/182/89 375/181/89 373/166/89
+f 348/183/90 347/184/90 345/164/90
+f 303/185/91 305/186/91 306/187/91
+f 261/152/92 263/147/92 264/188/92
+f 276/189/93 275/137/93 277/190/93
+f 370/191/94 369/135/94 367/192/94
+f 335/140/95 333/193/95 334/194/95
+f 333/193/96 331/195/96 332/196/96
+f 331/195/97 329/122/97 330/197/97
+f 284/198/98 283/150/98 285/40/98
+f 327/123/99 325/199/99 326/200/99
+f 325/199/100 323/201/100 324/202/100
+f 324/202/101 323/201/101 321/47/101
+f 352/50/21 351/203/21 349/51/21
+f 353/53/102 351/203/102 352/50/102
+f 305/186/103 307/161/103 308/204/103
+f 382/54/104 381/55/104 379/205/104
+f 380/206/105 379/205/105 377/180/105
+f 348/183/106 350/49/106 349/51/106
+f 302/207/107 301/169/107 303/208/107
+f 278/209/108 277/190/108 279/129/108
+f 267/145/109 269/141/109 270/210/109
+f 367/192/110 365/211/110 366/212/110
+f 365/211/111 363/213/111 364/214/111
+f 363/213/112 361/215/112 362/216/112
+f 361/215/113 359/217/113 360/218/113
+f 359/217/114 357/219/114 358/220/114
+f 357/219/115 355/221/115 356/222/115
+f 355/221/116 353/53/116 354/52/116
+f 384/48/23 383/178/23 381/55/23
+f 274/136/117 272/1/117 273/3/117
+f 312/160/118 311/56/118 314/58/118
+f 315/223/119 313/59/119 379/61/119
+f 279/80/120 343/62/120 281/64/120
+f 271/77/121 335/65/121 273/67/121
+f 329/75/122 331/68/122 265/70/122
+f 273/67/123 337/66/123 275/72/123
+f 315/223/124 379/61/124 317/74/124
+f 327/83/169 329/75/169 263/76/169
+f 333/81/126 335/65/126 269/78/126
+f 277/82/127 341/79/127 279/80/127
+f 269/78/128 267/69/128 333/81/128
+f 275/72/129 339/71/129 277/82/129
+f 325/85/130 327/83/130 261/84/130
+f 323/117/131 325/85/131 259/86/131
+f 281/64/132 345/63/132 283/88/132
+f 319/92/133 383/89/133 257/91/133
+f 317/74/134 381/73/134 319/92/134
+f 351/158/135 353/93/135 287/95/135
+f 283/88/136 347/87/136 285/97/136
+f 313/59/137 311/98/137 377/60/137
+f 293/119/138 357/100/138 295/102/138
+f 311/98/139 309/103/139 375/99/139
+f 309/103/140 307/105/140 373/104/140
+f 307/105/141 305/107/141 371/106/141
+f 301/113/142 365/109/142 303/111/142
+f 299/115/143 363/112/143 301/113/143
+f 297/116/170 361/114/170 299/115/170
+f 295/102/145 359/101/145 297/116/145
+f 321/90/146 323/117/146 257/91/146
+f 291/120/171 355/118/171 293/119/171
+f 353/93/148 355/118/148 289/94/148
+f 288/8/5 296/9/5 272/6/5
+f 330/197/57 329/122/57 328/124/57
+f 342/131/58 344/125/58 341/127/58
+f 282/149/59 280/128/59 281/130/59
+f 340/142/149 342/131/149 339/132/149
+f 370/191/61 372/133/61 369/135/61
+f 276/189/62 274/136/62 275/137/62
+f 336/224/63 338/138/63 335/140/63
+f 270/210/64 269/141/64 272/1/64
+f 338/225/65 340/142/65 337/143/65
+f 266/148/66 265/144/66 268/146/66
+f 264/188/67 263/147/67 266/148/67
+f 284/198/68 282/149/68 283/150/68
+f 260/154/69 259/151/69 262/153/69
+f 258/36/150 257/38/150 260/154/150
+f 314/58/151 313/57/151 316/157/151
+f 305/107/152 303/111/152 369/108/152
+f 316/157/153 315/156/153 318/44/153
+f 349/96/172 351/158/172 285/97/172
+f 310/162/77 309/159/77 312/160/77
+f 308/204/155 307/161/155 310/162/155
+f 344/125/79 346/163/79 343/126/79
+f 372/133/80 374/165/80 371/134/80
+f 302/207/81 300/167/81 301/169/81
+f 300/167/82 298/170/82 299/168/82
+f 298/170/156 296/172/156 297/171/156
+f 296/172/84 294/174/84 295/173/84
+f 294/174/157 292/176/157 293/175/157
+f 292/176/158 290/42/158 291/177/158
+f 376/182/88 378/179/88 375/181/88
+f 374/165/89 376/182/89 373/166/89
+f 346/163/90 348/183/90 345/164/90
+f 304/226/91 303/185/91 306/187/91
+f 262/153/92 261/152/92 264/188/92
+f 278/209/93 276/189/93 277/190/93
+f 368/227/94 370/191/94 367/192/94
+f 336/224/95 335/140/95 334/194/95
+f 334/194/96 333/193/96 332/196/96
+f 332/196/97 331/195/97 330/197/97
+f 286/39/159 284/198/159 285/40/159
+f 328/124/99 327/123/99 326/200/99
+f 326/200/100 325/199/100 324/202/100
+f 322/46/160 324/202/160 321/47/160
+f 306/187/161 305/186/161 308/204/161
+f 380/206/104 382/54/104 379/205/104
+f 378/179/105 380/206/105 377/180/105
+f 347/184/162 348/183/162 349/51/162
+f 304/228/107 302/207/107 303/208/107
+f 280/128/108 278/209/108 279/129/108
+f 268/146/109 267/145/109 270/210/109
+f 368/227/110 367/192/110 366/212/110
+f 366/212/111 365/211/111 364/214/111
+f 364/214/112 363/213/112 362/216/112
+f 362/216/113 361/215/113 360/218/113
+f 360/218/114 359/217/114 358/220/114
+f 358/220/115 357/219/115 356/222/115
+f 356/222/116 355/221/116 354/52/116
+g HSLampen_Cube.000_Distance
+usemtl Distance
+f 132/5/173 134/22/173 136/12/173
+f 185/59/174 249/60/174 251/61/174
+f 176/10/175 180/11/175 192/4/175
+f 168/9/176 162/16/176 164/29/176
+f 252/206/177 251/205/177 249/180/177
+f 152/14/178 156/15/178 160/8/178
+f 188/20/179 190/35/179 192/4/179
+f 187/156/180 189/45/180 190/44/180
+f 225/53/181 223/203/181 224/50/181
+f 220/183/182 219/184/182 217/164/182
+f 248/182/183 247/181/183 245/166/183
+f 164/29/184 166/30/184 168/9/184
+f 156/198/185 155/150/185 157/40/185
+f 168/9/186 172/17/186 174/18/186
+f 205/193/187 203/195/187 204/196/187
+f 201/122/188 199/123/188 200/124/188
+f 231/101/189 233/114/189 169/116/189
+f 210/138/190 209/139/190 207/140/190
+f 133/152/191 135/147/191 136/188/191
+f 158/39/192 157/40/192 160/41/192
+f 141/141/193 143/2/193 144/1/193
+f 160/8/194 148/7/194 152/14/194
+f 180/11/195 182/33/195 184/19/195
+f 176/10/196 178/32/196 180/11/196
+f 190/44/197 189/45/197 192/37/197
+f 197/199/198 195/201/198 196/202/198
+f 192/37/199 191/121/199 129/38/199
+f 203/68/200 139/69/200 137/70/200
+f 211/71/201 213/79/201 149/82/201
+f 192/4/175 168/9/175 176/10/175
+f 177/107/202 241/108/202 243/106/202
+f 144/6/203 138/13/203 140/23/203
+f 237/109/204 239/110/204 175/111/204
+f 160/41/205 159/155/205 161/43/205
+f 135/147/206 137/144/206 138/148/206
+f 140/23/194 142/24/194 144/6/194
+f 144/1/207 143/2/207 145/3/207
+f 251/61/208 253/73/208 189/74/208
+f 242/191/209 241/135/209 239/192/209
+f 225/93/210 161/94/210 159/95/210
+f 207/65/211 209/66/211 145/67/211
+f 166/174/212 165/175/212 167/173/212
+f 193/47/213 255/178/213 256/48/213
+f 136/12/194 138/13/194 144/6/194
+f 231/217/214 229/219/214 230/220/214
+f 162/42/215 160/41/215 161/43/215
+f 179/161/216 181/159/216 182/162/216
+f 215/62/217 217/63/217 153/64/217
+f 201/75/218 137/70/218 135/76/218
+f 148/189/219 147/137/219 149/190/219
+f 150/209/220 149/190/220 151/129/220
+f 175/111/221 239/110/221 241/108/221
+f 229/100/222 231/101/222 167/102/222
+f 139/145/223 141/141/223 142/210/223
+f 239/192/224 237/211/224 238/212/224
+f 217/63/225 219/87/225 155/88/225
+f 177/186/226 179/161/226 180/204/226
+f 174/207/227 173/169/227 175/208/227
+f 152/14/228 154/27/228 156/15/228
+f 185/57/229 187/156/229 188/157/229
+f 164/176/230 163/177/230 165/175/230
+f 209/66/231 211/71/231 147/72/231
+f 172/167/232 171/168/232 173/169/232
+f 233/114/233 235/112/233 171/115/233
+f 254/54/234 256/48/234 253/55/234
+f 212/142/235 211/132/235 209/143/235
+f 226/52/236 225/53/236 224/50/236
+f 229/219/237 227/221/237 228/222/237
+f 181/103/238 245/104/238 247/99/238
+f 189/45/239 191/121/239 192/37/239
+f 184/19/240 186/34/240 188/20/240
+f 130/36/102 192/37/102 129/38/102
+f 194/46/213 193/47/213 256/48/213
+f 144/6/241 146/25/241 148/7/241
+f 144/6/194 148/7/194 160/8/194
+f 144/6/194 132/5/194 136/12/194
+f 156/15/194 158/28/194 160/8/194
+f 255/89/242 193/90/242 129/91/242
+f 152/128/243 151/129/243 153/130/243
+f 184/19/175 188/20/175 192/4/175
+f 192/4/175 180/11/175 184/19/175
+f 157/40/244 159/155/244 160/41/244
+f 137/144/245 139/145/245 140/146/245
+f 256/48/234 255/178/234 253/55/234
+f 233/215/246 231/217/246 232/218/246
+f 250/179/247 249/180/247 247/181/247
+f 131/151/248 133/152/248 134/153/248
+f 207/140/249 205/193/249 206/194/249
+f 168/9/250 170/31/250 172/17/250
+f 160/8/251 162/16/251 168/9/251
+f 181/159/252 183/56/252 184/160/252
+f 168/9/175 174/18/175 176/10/175
+f 196/202/253 195/201/253 193/47/253
+f 179/105/254 243/106/254 245/104/254
+f 168/172/255 167/173/255 169/171/255
+f 220/183/256 222/49/256 221/51/256
+f 192/4/257 132/5/257 144/6/257
+f 146/136/258 145/3/258 147/137/258
+f 235/112/259 237/109/259 173/113/259
+f 192/4/260 130/21/260 132/5/260
+f 195/117/261 131/86/261 129/91/261
+f 227/221/262 225/53/262 226/52/262
+f 183/98/263 247/99/263 249/60/263
+f 253/73/264 255/89/264 191/92/264
+f 216/125/265 215/126/265 213/127/265
+f 237/211/266 235/213/266 236/214/266
+f 199/123/267 197/199/267 198/200/267
+f 254/54/268 253/55/268 251/205/268
+f 224/50/269 223/203/269 221/51/269
+f 213/79/270 215/62/270 151/80/270
+f 148/7/257 150/26/257 152/14/257
+f 222/49/269 224/50/269 221/51/269
+f 197/85/271 133/84/271 131/86/271
+f 218/163/272 217/164/272 215/126/272
+f 203/195/273 201/122/273 202/197/273
+f 235/213/274 233/215/274 234/216/274
+f 227/118/275 163/120/275 161/94/275
+f 154/149/276 153/130/276 155/150/276
+f 175/185/277 177/186/277 178/187/277
+f 219/87/278 221/96/278 157/97/278
+f 199/83/279 135/76/279 133/84/279
+f 139/69/280 203/68/280 205/81/280
+f 170/170/281 169/171/281 171/168/281
+f 183/56/282 185/57/282 186/58/282
+f 227/118/283 229/100/283 165/119/283
+f 168/9/284 192/4/284 144/6/284
+f 246/165/285 245/166/285 243/134/285
+f 162/42/286 161/43/286 163/177/286
+f 223/158/287 159/95/287 157/97/287
+f 129/38/288 131/151/288 132/154/288
+f 244/133/289 243/134/289 241/135/289
+f 214/131/290 213/127/290 211/132/290
+f 207/65/291 143/77/291 141/78/291
+f 146/136/292 144/1/292 145/3/292
+f 184/160/293 183/56/293 186/58/293
+f 187/223/294 185/59/294 251/61/294
+f 151/80/295 215/62/295 153/64/295
+f 143/77/296 207/65/296 145/67/296
+f 201/75/297 203/68/297 137/70/297
+f 145/67/298 209/66/298 147/72/298
+f 187/223/299 251/61/299 189/74/299
+f 199/83/300 201/75/300 135/76/300
+f 205/81/301 207/65/301 141/78/301
+f 149/82/302 213/79/302 151/80/302
+f 141/78/303 139/69/303 205/81/303
+f 147/72/304 211/71/304 149/82/304
+f 197/85/305 199/83/305 133/84/305
+f 195/117/306 197/85/306 131/86/306
+f 153/64/307 217/63/307 155/88/307
+f 191/92/308 255/89/308 129/91/308
+f 189/74/309 253/73/309 191/92/309
+f 223/158/310 225/93/310 159/95/310
+f 155/88/311 219/87/311 157/97/311
+f 185/59/312 183/98/312 249/60/312
+f 165/119/313 229/100/313 167/102/313
+f 183/98/314 181/103/314 247/99/314
+f 181/103/315 179/105/315 245/104/315
+f 179/105/316 177/107/316 243/106/316
+f 173/113/317 237/109/317 175/111/317
+f 171/115/318 235/112/318 173/113/318
+f 169/116/319 233/114/319 171/115/319
+f 167/102/320 231/101/320 169/116/320
+f 193/90/321 195/117/321 129/91/321
+f 163/120/322 227/118/322 165/119/322
+f 225/93/323 227/118/323 161/94/323
+f 160/8/251 168/9/251 144/6/251
+f 202/197/188 201/122/188 200/124/188
+f 214/131/265 216/125/265 213/127/265
+f 154/149/243 152/128/243 153/130/243
+f 212/142/290 214/131/290 211/132/290
+f 242/191/289 244/133/289 241/135/289
+f 148/189/258 146/136/258 147/137/258
+f 208/224/190 210/138/190 207/140/190
+f 142/210/193 141/141/193 144/1/193
+f 210/225/235 212/142/235 209/143/235
+f 138/148/245 137/144/245 140/146/245
+f 136/188/206 135/147/206 138/148/206
+f 156/198/276 154/149/276 155/150/276
+f 132/154/248 131/151/248 134/153/248
+f 130/36/324 129/38/324 132/154/324
+f 186/58/325 185/57/325 188/157/325
+f 177/107/326 175/111/326 241/108/326
+f 188/157/327 187/156/327 190/44/327
+f 221/96/328 223/158/328 157/97/328
+f 182/162/252 181/159/252 184/160/252
+f 180/204/216 179/161/216 182/162/216
+f 216/125/272 218/163/272 215/126/272
+f 244/133/285 246/165/285 243/134/285
+f 174/207/232 172/167/232 173/169/232
+f 172/167/281 170/170/281 171/168/281
+f 170/170/329 168/172/329 169/171/329
+f 168/172/212 166/174/212 167/173/212
+f 166/174/230 164/176/230 165/175/230
+f 164/176/330 162/42/330 163/177/330
+f 248/182/247 250/179/247 247/181/247
+f 246/165/183 248/182/183 245/166/183
+f 218/163/182 220/183/182 217/164/182
+f 176/226/277 175/185/277 178/187/277
+f 134/153/191 133/152/191 136/188/191
+f 150/209/331 148/189/331 149/190/331
+f 240/227/209 242/191/209 239/192/209
+f 208/224/249 207/140/249 206/194/249
+f 206/194/187 205/193/187 204/196/187
+f 204/196/273 203/195/273 202/197/273
+f 158/39/332 156/198/332 157/40/332
+f 200/124/267 199/123/267 198/200/267
+f 198/200/198 197/199/198 196/202/198
+f 194/46/333 196/202/333 193/47/333
+f 178/187/226 177/186/226 180/204/226
+f 252/206/268 254/54/268 251/205/268
+f 250/179/177 252/206/177 249/180/177
+f 219/184/334 220/183/334 221/51/334
+f 176/228/227 174/207/227 175/208/227
+f 152/128/220 150/209/220 151/129/220
+f 140/146/223 139/145/223 142/210/223
+f 240/227/224 239/192/224 238/212/224
+f 238/212/266 237/211/266 236/214/266
+f 236/214/274 235/213/274 234/216/274
+f 234/216/246 233/215/246 232/218/246
+f 232/218/214 231/217/214 230/220/214
+f 230/220/237 229/219/237 228/222/237
+f 228/222/262 227/221/262 226/52/262
+g HSLampen_Cube.000_Repeater
+usemtl Repeater
+f 447/46/333 445/202/333 448/47/333
+f 485/15/194 483/28/194 481/8/194
+f 495/136/258 496/3/258 494/137/258
+f 495/136/335 497/1/335 496/3/335
+f 389/206/177 390/205/177 392/180/177
+f 462/105/336 464/107/336 398/106/336
+f 452/45/239 450/121/239 449/37/239
+f 511/36/102 449/37/102 512/38/102
+f 497/6/203 503/13/203 501/23/203
+f 497/1/207 498/2/207 496/3/207
+f 416/53/181 418/203/181 417/50/181
+f 418/158/287 482/95/287 484/97/287
+f 452/74/337 388/73/337 450/92/337
+f 466/185/277 464/186/277 463/187/277
+f 466/111/221 402/110/221 400/108/221
+f 424/63/338 422/87/338 486/88/338
+f 438/195/273 440/122/273 439/197/273
+f 462/161/216 460/159/216 459/162/216
+f 437/196/273 438/195/273 439/197/273
+f 494/72/304 430/71/304 492/82/304
+f 459/162/252 460/159/252 457/160/252
+f 487/149/243 489/128/243 488/130/243
+f 434/140/249 436/193/249 435/194/249
+f 406/112/259 404/109/259 468/113/259
+f 412/219/237 414/221/237 413/222/237
+f 456/57/229 454/156/229 453/157/229
+f 411/220/237 412/219/237 413/222/237
+f 393/182/247 391/179/247 394/181/247
+f 416/93/323 414/118/323 480/94/323
+f 442/83/279 506/76/279 508/84/279
+f 449/4/257 509/5/257 497/6/257
+f 475/174/230 477/176/230 476/175/230
+f 458/98/263 394/99/263 392/60/263
+f 496/67/298 432/66/298 494/72/298
+f 507/153/191 508/152/191 505/188/191
+f 397/133/285 395/165/285 398/134/285
+f 464/107/326 466/111/326 400/108/326
+f 429/142/339 430/132/339 432/143/339
+f 436/193/187 438/195/187 437/196/187
+f 454/223/299 390/61/299 452/74/299
+f 499/210/193 500/141/193 497/1/193
+f 479/42/286 480/43/286 478/177/286
+f 432/66/231 430/71/231 494/72/231
+f 465/226/277 466/185/277 463/187/277
+f 444/199/198 446/201/198 445/202/198
+f 440/75/297 438/68/297 504/70/297
+f 460/159/252 458/56/252 457/160/252
+f 456/59/312 458/98/312 392/60/312
+f 491/209/331 493/189/331 492/190/331
+f 429/142/290 427/131/290 430/132/290
+f 478/120/322 414/118/322 476/119/322
+f 388/73/340 386/89/340 450/92/340
+f 471/170/281 472/171/281 470/168/281
+f 467/207/341 469/167/341 468/169/341
+f 431/138/190 432/139/190 434/140/190
+f 450/92/308 386/89/308 512/91/308
+f 473/172/255 474/173/255 472/171/255
+f 387/54/268 388/55/268 390/205/268
+f 468/113/317 404/109/317 466/111/317
+f 497/6/241 495/25/241 493/7/241
+f 427/131/290 428/127/290 430/132/290
+f 399/191/289 397/133/289 400/135/289
+f 428/79/270 426/62/270 490/80/270
+f 493/7/257 491/26/257 489/14/257
+f 509/5/342 507/22/342 505/12/342
+f 410/217/214 412/219/214 411/220/214
+f 464/107/202 400/108/202 398/106/202
+f 438/68/200 502/69/200 504/70/200
+f 385/48/234 386/178/234 388/55/234
+f 460/103/238 396/104/238 394/99/238
+f 386/89/242 448/90/242 512/91/242
+f 409/218/214 410/217/214 411/220/214
+f 469/167/232 470/168/232 468/169/232
+f 509/154/248 510/151/248 507/153/248
+f 511/36/324 512/38/324 509/154/324
+f 443/200/198 444/199/198 445/202/198
+f 488/64/343 424/63/343 486/88/343
+f 405/214/274 406/213/274 407/216/274
+f 470/115/318 406/112/318 468/113/318
+f 489/128/243 490/129/243 488/130/243
+f 473/9/344 471/31/344 469/17/344
+f 444/85/305 442/83/305 508/84/305
+f 395/165/183 393/182/183 396/166/183
+f 456/59/345 392/60/345 390/61/345
+f 465/10/196 463/32/196 461/11/196
+f 453/20/179 451/35/179 449/4/179
+f 389/206/268 387/54/268 390/205/268
+f 493/189/219 494/137/219 492/190/219
+f 422/87/278 420/96/278 484/97/278
+f 498/77/296 434/65/296 496/67/296
+f 408/215/246 410/217/246 409/218/246
+f 487/149/276 488/130/276 486/150/276
+f 408/114/233 406/112/233 470/115/233
+f 445/202/253 446/201/253 448/47/253
+f 502/69/280 438/68/280 436/81/280
+f 506/147/206 504/144/206 503/148/206
+f 463/187/226 464/186/226 461/204/226
+f 503/148/245 504/144/245 501/146/245
+f 404/211/266 406/213/266 405/214/266
+f 489/128/220 491/209/220 490/129/220
+f 501/146/223 502/145/223 499/210/223
+f 449/4/175 473/9/175 465/10/175
+f 504/144/245 502/145/245 501/146/245
+f 387/54/234 385/48/234 388/55/234
+f 434/65/211 432/66/211 496/67/211
+f 483/39/192 484/40/192 481/41/192
+f 467/207/227 468/169/227 466/208/227
+f 473/9/176 479/16/176 477/29/176
+f 404/109/204 402/110/204 466/111/204
+f 472/116/346 408/114/346 470/115/346
+f 439/197/188 440/122/188 441/124/188
+f 481/41/205 482/155/205 480/43/205
+f 391/179/177 389/206/177 392/180/177
+f 399/191/209 400/135/209 402/192/209
+f 502/145/223 500/141/223 499/210/223
+f 481/8/194 493/7/194 489/14/194
+f 457/160/293 458/56/293 455/58/293
+f 476/119/313 412/100/313 474/102/313
+f 449/4/260 511/21/260 509/5/260
+f 492/82/302 428/79/302 490/80/302
+f 483/39/332 485/198/332 484/40/332
+f 473/172/212 475/174/212 474/173/212
+f 423/163/272 424/164/272 426/126/272
+f 457/19/175 453/20/175 449/4/175
+f 473/9/284 449/4/284 497/6/284
+f 505/188/206 506/147/206 503/148/206
+f 477/29/347 475/30/347 473/9/347
+f 454/223/294 456/59/294 390/61/294
+f 436/81/348 434/65/348 500/78/348
+f 401/227/224 402/192/224 403/212/224
+f 473/9/186 469/17/186 467/18/186
+f 448/47/213 386/178/213 385/48/213
+f 461/204/216 462/161/216 459/162/216
+f 485/198/276 487/149/276 486/150/276
+f 484/40/244 482/155/244 481/41/244
+f 497/6/194 493/7/194 481/8/194
+f 474/102/320 410/101/320 472/116/320
+f 453/157/327 454/156/327 451/44/327
+f 477/176/330 479/42/330 478/177/330
+f 431/225/235 429/142/235 432/143/235
+f 447/46/213 448/47/213 385/48/213
+f 433/224/249 434/140/249 435/194/249
+f 425/125/272 423/163/272 426/126/272
+f 481/8/251 473/9/251 497/6/251
+f 469/167/281 471/170/281 470/168/281
+f 493/189/258 495/136/258 494/137/258
+f 441/124/267 442/123/267 443/200/267
+f 465/228/227 467/207/227 466/208/227
+f 458/98/314 460/103/314 394/99/314
+f 413/222/262 414/221/262 415/52/262
+f 415/52/236 416/53/236 417/50/236
+f 442/83/300 440/75/300 506/76/300
+f 418/158/310 416/93/310 482/95/310
+f 449/4/175 461/11/175 457/19/175
+f 395/165/285 396/166/285 398/134/285
+f 391/179/247 392/180/247 394/181/247
+f 473/9/175 467/18/175 465/10/175
+f 421/183/256 419/49/256 420/51/256
+f 442/123/267 444/199/267 443/200/267
+f 419/49/269 417/50/269 420/51/269
+f 406/213/274 408/215/274 407/216/274
+f 458/56/282 456/57/282 455/58/282
+f 407/216/246 408/215/246 409/218/246
+f 397/133/289 398/134/289 400/135/289
+f 490/80/295 426/62/295 488/64/295
+f 455/58/325 456/57/325 453/157/325
+f 402/192/224 404/211/224 403/212/224
+f 475/174/212 476/175/212 474/173/212
+f 460/103/349 462/105/349 396/104/349
+f 505/12/194 503/13/194 497/6/194
+f 485/198/185 486/150/185 484/40/185
+f 433/224/190 431/138/190 434/140/190
+f 426/62/217 424/63/217 488/64/217
+f 420/96/350 418/158/350 484/97/350
+f 479/42/215 481/41/215 480/43/215
+f 423/163/182 421/183/182 424/164/182
+f 401/227/209 399/191/209 402/192/209
+f 486/88/311 422/87/311 484/97/311
+f 422/184/334 421/183/334 420/51/334
+f 403/212/266 404/211/266 405/214/266
+f 497/6/194 509/5/194 505/12/194
+f 446/117/261 510/86/261 512/91/261
+f 457/19/351 455/34/351 453/20/351
+f 500/78/352 502/69/352 436/81/352
+f 510/151/248 508/152/248 507/153/248
+f 481/8/353 479/16/353 473/9/353
+f 416/93/210 480/94/210 482/95/210
+f 393/182/183 394/181/183 396/166/183
+f 417/50/269 418/203/269 420/51/269
+f 444/85/354 508/84/354 510/86/354
+f 414/118/275 478/120/275 480/94/275
+f 414/118/355 412/100/355 476/119/355
+f 512/38/288 510/151/288 509/154/288
+f 434/65/291 498/77/291 500/78/291
+f 454/156/180 452/45/180 451/44/180
+f 421/183/182 422/184/182 424/164/182
+f 390/61/208 388/73/208 452/74/208
+f 414/221/262 416/53/262 415/52/262
+f 435/194/187 436/193/187 437/196/187
+f 427/131/265 425/125/265 428/127/265
+f 440/122/188 442/123/188 441/124/188
+f 440/75/218 504/70/218 506/76/218
+f 491/209/220 492/190/220 490/129/220
+f 412/100/356 410/101/356 474/102/356
+f 446/117/357 444/85/357 510/86/357
+f 464/186/226 462/161/226 461/204/226
+f 489/14/228 487/27/228 485/15/228
+f 477/176/230 478/177/230 476/175/230
+f 462/105/254 398/106/254 396/104/254
+f 465/10/175 461/11/175 449/4/175
+f 489/14/178 485/15/178 481/8/178
+f 501/23/194 499/24/194 497/6/194
+f 425/125/265 426/126/265 428/127/265
+f 448/90/358 446/117/358 512/91/358
+f 471/170/329 473/172/329 472/171/329
+f 410/101/359 408/114/359 472/116/359
+f 508/152/191 506/147/191 505/188/191
+f 500/141/193 498/2/193 497/1/193
+f 461/11/360 459/33/360 457/19/360
+f 451/44/197 452/45/197 449/37/197
+f 449/37/199 450/121/199 512/38/199
+f 430/71/201 428/79/201 492/82/201
+g HSLampen_Cube.000_Red
+usemtl Red
+f 528/1/1 527/2/1 529/3/1
+f 576/4/2 516/5/2 528/6/2
+f 528/6/3 532/7/3 544/8/3
+f 576/4/4 552/9/4 560/10/4
+f 560/10/4 564/11/4 576/4/4
+f 528/6/3 516/5/3 520/12/3
+f 520/12/3 522/13/3 528/6/3
+f 544/8/3 532/7/3 536/14/3
+f 536/14/2 540/15/2 544/8/2
+f 544/8/5 546/16/5 552/9/5
+f 552/9/4 556/17/4 558/18/4
+f 576/4/4 564/11/4 568/19/4
+f 568/19/4 572/20/4 576/4/4
+f 576/4/6 514/21/6 516/5/6
+f 516/5/7 518/22/7 520/12/7
+f 528/6/3 522/13/3 524/23/3
+f 524/23/3 526/24/3 528/6/3
+f 528/6/8 530/25/8 532/7/8
+f 532/7/2 534/26/2 536/14/2
+f 536/14/2 538/27/2 540/15/2
+f 540/15/3 542/28/3 544/8/3
+f 552/9/163 546/16/163 548/29/163
+f 548/29/11 550/30/11 552/9/11
+f 552/9/164 554/31/164 556/17/164
+f 552/9/4 558/18/4 560/10/4
+f 560/10/13 562/32/13 564/11/13
+f 564/11/4 566/33/4 568/19/4
+f 568/19/165 570/34/165 572/20/165
+f 572/20/361 574/35/361 576/4/361
+f 514/36/16 576/37/16 513/38/16
+f 542/39/17 541/40/17 544/41/17
+f 546/42/18 544/41/18 545/43/18
+f 574/44/19 573/45/19 576/37/19
+f 578/46/20 577/47/20 640/48/20
+f 606/49/21 608/50/21 605/51/21
+f 610/52/22 609/53/22 608/50/22
+f 638/54/23 640/48/23 637/55/23
+f 567/56/24 569/57/24 570/58/24
+f 569/59/25 633/60/25 635/61/25
+f 599/62/26 601/63/26 537/64/26
+f 591/65/27 593/66/27 529/67/27
+f 587/68/28 523/69/28 521/70/28
+f 593/66/29 595/71/29 531/72/29
+f 635/61/30 637/73/30 573/74/30
+f 585/75/31 521/70/31 519/76/31
+f 591/65/32 527/77/32 525/78/32
+f 597/79/33 599/62/33 535/80/33
+f 523/69/34 587/68/34 589/81/34
+f 595/71/35 597/79/35 533/82/35
+f 583/83/36 519/76/36 517/84/36
+f 581/85/37 517/84/37 515/86/37
+f 601/63/362 603/87/362 539/88/362
+f 639/89/39 577/90/39 513/91/39
+f 637/73/166 639/89/166 575/92/166
+f 609/93/363 545/94/363 543/95/363
+f 603/87/42 605/96/42 541/97/42
+f 567/98/43 631/99/43 633/60/43
+f 613/100/167 615/101/167 551/102/167
+f 565/103/45 629/104/45 631/99/45
+f 563/105/46 627/106/46 629/104/46
+f 561/107/47 625/108/47 627/106/47
+f 621/109/48 623/110/48 559/111/48
+f 619/112/49 621/109/49 557/113/49
+f 617/114/50 619/112/50 555/115/50
+f 615/101/168 617/114/168 553/116/168
+f 579/117/52 515/86/52 513/91/52
+f 611/118/53 613/100/53 549/119/53
+f 611/118/54 547/120/54 545/94/54
+f 552/9/55 576/4/55 528/6/55
+f 576/37/56 575/121/56 513/38/56
+f 585/122/57 583/123/57 584/124/57
+f 600/125/58 599/126/58 597/127/58
+f 536/128/59 535/129/59 537/130/59
+f 598/131/60 597/127/60 595/132/60
+f 628/133/61 627/134/61 625/135/61
+f 530/136/62 529/3/62 531/137/62
+f 594/138/63 593/139/63 591/140/63
+f 525/141/64 527/2/64 528/1/64
+f 596/142/65 595/132/65 593/143/65
+f 521/144/66 523/145/66 524/146/66
+f 519/147/67 521/144/67 522/148/67
+f 538/149/68 537/130/68 539/150/68
+f 515/151/69 517/152/69 518/153/69
+f 513/38/70 515/151/70 516/154/70
+f 541/40/71 543/155/71 544/41/71
+f 544/41/72 543/155/72 545/43/72
+f 569/57/73 571/156/73 572/157/73
+f 559/111/74 623/110/74 625/108/74
+f 571/156/75 573/45/75 574/44/75
+f 607/158/76 543/95/76 541/97/76
+f 565/159/77 567/56/77 568/160/77
+f 563/161/78 565/159/78 566/162/78
+f 602/163/79 601/164/79 599/126/79
+f 630/165/80 629/166/80 627/134/80
+f 556/167/81 555/168/81 557/169/81
+f 554/170/82 553/171/82 555/168/82
+f 552/172/83 551/173/83 553/171/83
+f 550/174/84 549/175/84 551/173/84
+f 548/176/85 547/177/85 549/175/85
+f 546/42/86 545/43/86 547/177/86
+f 573/45/87 575/121/87 576/37/87
+f 577/47/20 639/178/20 640/48/20
+f 634/179/88 633/180/88 631/181/88
+f 632/182/89 631/181/89 629/166/89
+f 604/183/90 603/184/90 601/164/90
+f 559/185/91 561/186/91 562/187/91
+f 517/152/92 519/147/92 520/188/92
+f 532/189/93 531/137/93 533/190/93
+f 626/191/94 625/135/94 623/192/94
+f 591/140/95 589/193/95 590/194/95
+f 589/193/96 587/195/96 588/196/96
+f 587/195/97 585/122/97 586/197/97
+f 540/198/98 539/150/98 541/40/98
+f 583/123/99 581/199/99 582/200/99
+f 581/199/100 579/201/100 580/202/100
+f 580/202/101 579/201/101 577/47/101
+f 608/50/21 607/203/21 605/51/21
+f 609/53/102 607/203/102 608/50/102
+f 561/186/103 563/161/103 564/204/103
+f 638/54/104 637/55/104 635/205/104
+f 636/206/105 635/205/105 633/180/105
+f 604/183/106 606/49/106 605/51/106
+f 558/207/107 557/169/107 559/208/107
+f 534/209/108 533/190/108 535/129/108
+f 523/145/109 525/141/109 526/210/109
+f 623/192/110 621/211/110 622/212/110
+f 621/211/111 619/213/111 620/214/111
+f 619/213/112 617/215/112 618/216/112
+f 617/215/113 615/217/113 616/218/113
+f 615/217/114 613/219/114 614/220/114
+f 613/219/115 611/221/115 612/222/115
+f 611/221/116 609/53/116 610/52/116
+f 640/48/23 639/178/23 637/55/23
+f 530/136/117 528/1/117 529/3/117
+f 568/160/118 567/56/118 570/58/118
+f 571/223/119 569/59/119 635/61/119
+f 535/80/120 599/62/120 537/64/120
+f 527/77/121 591/65/121 529/67/121
+f 585/75/122 587/68/122 521/70/122
+f 529/67/123 593/66/123 531/72/123
+f 571/223/124 635/61/124 573/74/124
+f 583/83/125 585/75/125 519/76/125
+f 589/81/364 591/65/364 525/78/364
+f 533/82/127 597/79/127 535/80/127
+f 525/78/128 523/69/128 589/81/128
+f 531/72/129 595/71/129 533/82/129
+f 581/85/130 583/83/130 517/84/130
+f 579/117/365 581/85/365 515/86/365
+f 537/64/366 601/63/366 539/88/366
+f 575/92/133 639/89/133 513/91/133
+f 573/74/134 637/73/134 575/92/134
+f 607/158/135 609/93/135 543/95/135
+f 539/88/136 603/87/136 541/97/136
+f 569/59/137 567/98/137 633/60/137
+f 549/119/138 613/100/138 551/102/138
+f 567/98/139 565/103/139 631/99/139
+f 565/103/140 563/105/140 629/104/140
+f 563/105/141 561/107/141 627/106/141
+f 557/113/142 621/109/142 559/111/142
+f 555/115/143 619/112/143 557/113/143
+f 553/116/170 617/114/170 555/115/170
+f 551/102/145 615/101/145 553/116/145
+f 577/90/146 579/117/146 513/91/146
+f 547/120/171 611/118/171 549/119/171
+f 609/93/148 611/118/148 545/94/148
+f 544/8/5 552/9/5 528/6/5
+f 586/197/57 585/122/57 584/124/57
+f 598/131/58 600/125/58 597/127/58
+f 538/149/59 536/128/59 537/130/59
+f 596/142/149 598/131/149 595/132/149
+f 626/191/61 628/133/61 625/135/61
+f 532/189/62 530/136/62 531/137/62
+f 592/224/63 594/138/63 591/140/63
+f 526/210/64 525/141/64 528/1/64
+f 594/225/65 596/142/65 593/143/65
+f 522/148/66 521/144/66 524/146/66
+f 520/188/67 519/147/67 522/148/67
+f 540/198/68 538/149/68 539/150/68
+f 516/154/69 515/151/69 518/153/69
+f 514/36/150 513/38/150 516/154/150
+f 570/58/151 569/57/151 572/157/151
+f 561/107/152 559/111/152 625/108/152
+f 572/157/153 571/156/153 574/44/153
+f 605/96/172 607/158/172 541/97/172
+f 566/162/77 565/159/77 568/160/77
+f 564/204/155 563/161/155 566/162/155
+f 600/125/79 602/163/79 599/126/79
+f 628/133/80 630/165/80 627/134/80
+f 558/207/81 556/167/81 557/169/81
+f 556/167/82 554/170/82 555/168/82
+f 554/170/156 552/172/156 553/171/156
+f 552/172/84 550/174/84 551/173/84
+f 550/174/157 548/176/157 549/175/157
+f 548/176/158 546/42/158 547/177/158
+f 632/182/88 634/179/88 631/181/88
+f 630/165/89 632/182/89 629/166/89
+f 602/163/90 604/183/90 601/164/90
+f 560/226/91 559/185/91 562/187/91
+f 518/153/92 517/152/92 520/188/92
+f 534/209/93 532/189/93 533/190/93
+f 624/227/94 626/191/94 623/192/94
+f 592/224/95 591/140/95 590/194/95
+f 590/194/96 589/193/96 588/196/96
+f 588/196/97 587/195/97 586/197/97
+f 542/39/159 540/198/159 541/40/159
+f 584/124/99 583/123/99 582/200/99
+f 582/200/100 581/199/100 580/202/100
+f 578/46/160 580/202/160 577/47/160
+f 562/187/161 561/186/161 564/204/161
+f 636/206/104 638/54/104 635/205/104
+f 634/179/105 636/206/105 633/180/105
+f 603/184/162 604/183/162 605/51/162
+f 560/228/107 558/207/107 559/208/107
+f 536/128/108 534/209/108 535/129/108
+f 524/146/109 523/145/109 526/210/109
+f 624/227/110 623/192/110 622/212/110
+f 622/212/111 621/211/111 620/214/111
+f 620/214/112 619/213/112 618/216/112
+f 618/216/113 617/215/113 616/218/113
+f 616/218/114 615/217/114 614/220/114
+f 614/220/115 613/219/115 612/222/115
+f 612/222/116 611/221/116 610/52/116
+g HSLampen_Cube.000_Shunt
+usemtl Shunt
+f 703/46/333 701/202/333 704/47/333
+f 741/15/194 739/28/194 737/8/194
+f 751/136/258 752/3/258 750/137/258
+f 751/136/335 753/1/335 752/3/335
+f 645/206/177 646/205/177 648/180/177
+f 718/105/316 720/107/316 654/106/316
+f 708/45/239 706/121/239 705/37/239
+f 767/36/102 705/37/102 768/38/102
+f 753/6/203 759/13/203 757/23/203
+f 753/1/207 754/2/207 752/3/207
+f 672/53/181 674/203/181 673/50/181
+f 674/158/287 738/95/287 740/97/287
+f 708/74/309 644/73/309 706/92/309
+f 722/185/277 720/186/277 719/187/277
+f 722/111/221 658/110/221 656/108/221
+f 680/63/338 678/87/338 742/88/338
+f 694/195/273 696/122/273 695/197/273
+f 718/161/216 716/159/216 715/162/216
+f 693/196/273 694/195/273 695/197/273
+f 750/72/304 686/71/304 748/82/304
+f 715/162/252 716/159/252 713/160/252
+f 743/149/243 745/128/243 744/130/243
+f 690/140/249 692/193/249 691/194/249
+f 662/112/259 660/109/259 724/113/259
+f 668/219/237 670/221/237 669/222/237
+f 712/57/229 710/156/229 709/157/229
+f 667/220/237 668/219/237 669/222/237
+f 649/182/247 647/179/247 650/181/247
+f 672/93/323 670/118/323 736/94/323
+f 698/83/279 762/76/279 764/84/279
+f 705/4/257 765/5/257 753/6/257
+f 731/174/230 733/176/230 732/175/230
+f 714/98/263 650/99/263 648/60/263
+f 752/67/298 688/66/298 750/72/298
+f 763/153/191 764/152/191 761/188/191
+f 653/133/285 651/165/285 654/134/285
+f 720/107/326 722/111/326 656/108/326
+f 685/142/235 686/132/235 688/143/235
+f 692/193/187 694/195/187 693/196/187
+f 710/223/299 646/61/299 708/74/299
+f 755/210/193 756/141/193 753/1/193
+f 735/42/286 736/43/286 734/177/286
+f 688/66/231 686/71/231 750/72/231
+f 721/226/277 722/185/277 719/187/277
+f 700/199/198 702/201/198 701/202/198
+f 696/75/297 694/68/297 760/70/297
+f 716/159/252 714/56/252 713/160/252
+f 712/59/312 714/98/312 648/60/312
+f 747/209/331 749/189/331 748/190/331
+f 685/142/290 683/131/290 686/132/290
+f 734/120/322 670/118/322 732/119/322
+f 644/73/264 642/89/264 706/92/264
+f 727/170/281 728/171/281 726/168/281
+f 723/207/232 725/167/232 724/169/232
+f 687/138/190 688/139/190 690/140/190
+f 706/92/308 642/89/308 768/91/308
+f 729/172/255 730/173/255 728/171/255
+f 643/54/268 644/55/268 646/205/268
+f 724/113/317 660/109/317 722/111/317
+f 753/6/241 751/25/241 749/7/241
+f 683/131/290 684/127/290 686/132/290
+f 655/191/289 653/133/289 656/135/289
+f 684/79/270 682/62/270 746/80/270
+f 749/7/367 747/26/367 745/14/367
+f 765/5/368 763/22/368 761/12/368
+f 666/217/214 668/219/214 667/220/214
+f 720/107/202 656/108/202 654/106/202
+f 694/68/369 758/69/369 760/70/369
+f 641/48/234 642/178/234 644/55/234
+f 716/103/238 652/104/238 650/99/238
+f 642/89/242 704/90/242 768/91/242
+f 665/218/214 666/217/214 667/220/214
+f 725/167/232 726/168/232 724/169/232
+f 765/154/248 766/151/248 763/153/248
+f 767/36/324 768/38/324 765/154/324
+f 699/200/198 700/199/198 701/202/198
+f 744/64/343 680/63/343 742/88/343
+f 661/214/274 662/213/274 663/216/274
+f 726/115/318 662/112/318 724/113/318
+f 745/128/243 746/129/243 744/130/243
+f 729/9/250 727/31/250 725/17/250
+f 700/85/305 698/83/305 764/84/305
+f 651/165/183 649/182/183 652/166/183
+f 712/59/345 648/60/345 646/61/345
+f 721/10/196 719/32/196 717/11/196
+f 709/20/179 707/35/179 705/4/179
+f 645/206/268 643/54/268 646/205/268
+f 749/189/219 750/137/219 748/190/219
+f 678/87/278 676/96/278 740/97/278
+f 754/77/296 690/65/296 752/67/296
+f 664/215/246 666/217/246 665/218/246
+f 743/149/276 744/130/276 742/150/276
+f 664/114/233 662/112/233 726/115/233
+f 701/202/253 702/201/253 704/47/253
+f 758/69/280 694/68/280 692/81/280
+f 762/147/206 760/144/206 759/148/206
+f 719/187/226 720/186/226 717/204/226
+f 759/148/245 760/144/245 757/146/245
+f 660/211/266 662/213/266 661/214/266
+f 745/128/220 747/209/220 746/129/220
+f 757/146/223 758/145/223 755/210/223
+f 705/4/175 729/9/175 721/10/175
+f 760/144/245 758/145/245 757/146/245
+f 643/54/234 641/48/234 644/55/234
+f 690/65/211 688/66/211 752/67/211
+f 739/39/192 740/40/192 737/41/192
+f 723/207/227 724/169/227 722/208/227
+f 729/9/370 735/16/370 733/29/370
+f 660/109/371 658/110/371 722/111/371
+f 728/116/346 664/114/346 726/115/346
+f 695/197/188 696/122/188 697/124/188
+f 737/41/205 738/155/205 736/43/205
+f 647/179/177 645/206/177 648/180/177
+f 655/191/209 656/135/209 658/192/209
+f 758/145/223 756/141/223 755/210/223
+f 737/8/194 749/7/194 745/14/194
+f 713/160/293 714/56/293 711/58/293
+f 732/119/313 668/100/313 730/102/313
+f 705/4/260 767/21/260 765/5/260
+f 748/82/302 684/79/302 746/80/302
+f 739/39/332 741/198/332 740/40/332
+f 729/172/212 731/174/212 730/173/212
+f 679/163/272 680/164/272 682/126/272
+f 713/19/372 709/20/372 705/4/372
+f 729/9/284 705/4/284 753/6/284
+f 761/188/206 762/147/206 759/148/206
+f 733/29/195 731/30/195 729/9/195
+f 710/223/294 712/59/294 646/61/294
+f 692/81/301 690/65/301 756/78/301
+f 657/227/224 658/192/224 659/212/224
+f 729/9/186 725/17/186 723/18/186
+f 704/47/213 642/178/213 641/48/213
+f 717/204/216 718/161/216 715/162/216
+f 741/198/276 743/149/276 742/150/276
+f 740/40/244 738/155/244 737/41/244
+f 753/6/194 749/7/194 737/8/194
+f 730/102/320 666/101/320 728/116/320
+f 709/157/327 710/156/327 707/44/327
+f 733/176/330 735/42/330 734/177/330
+f 687/225/235 685/142/235 688/143/235
+f 703/46/213 704/47/213 641/48/213
+f 689/224/249 690/140/249 691/194/249
+f 681/125/272 679/163/272 682/126/272
+f 737/8/251 729/9/251 753/6/251
+f 725/167/281 727/170/281 726/168/281
+f 749/189/258 751/136/258 750/137/258
+f 697/124/267 698/123/267 699/200/267
+f 721/228/227 723/207/227 722/208/227
+f 714/98/314 716/103/314 650/99/314
+f 669/222/262 670/221/262 671/52/262
+f 671/52/236 672/53/236 673/50/236
+f 698/83/300 696/75/300 762/76/300
+f 674/158/310 672/93/310 738/95/310
+f 705/4/175 717/11/175 713/19/175
+f 651/165/285 652/166/285 654/134/285
+f 647/179/247 648/180/247 650/181/247
+f 729/9/175 723/18/175 721/10/175
+f 677/183/256 675/49/256 676/51/256
+f 698/123/267 700/199/267 699/200/267
+f 675/49/269 673/50/269 676/51/269
+f 662/213/274 664/215/274 663/216/274
+f 714/56/282 712/57/282 711/58/282
+f 663/216/246 664/215/246 665/218/246
+f 653/133/289 654/134/289 656/135/289
+f 746/80/295 682/62/295 744/64/295
+f 711/58/325 712/57/325 709/157/325
+f 658/192/224 660/211/224 659/212/224
+f 731/174/212 732/175/212 730/173/212
+f 716/103/349 718/105/349 652/104/349
+f 761/12/194 759/13/194 753/6/194
+f 741/198/185 742/150/185 740/40/185
+f 689/224/190 687/138/190 690/140/190
+f 682/62/217 680/63/217 744/64/217
+f 676/96/328 674/158/328 740/97/328
+f 735/42/215 737/41/215 736/43/215
+f 679/163/182 677/183/182 680/164/182
+f 657/227/209 655/191/209 658/192/209
+f 742/88/311 678/87/311 740/97/311
+f 678/184/334 677/183/334 676/51/334
+f 659/212/266 660/211/266 661/214/266
+f 753/6/194 765/5/194 761/12/194
+f 702/117/261 766/86/261 768/91/261
+f 713/19/373 711/34/373 709/20/373
+f 756/78/303 758/69/303 692/81/303
+f 766/151/248 764/152/248 763/153/248
+f 737/8/251 735/16/251 729/9/251
+f 672/93/210 736/94/210 738/95/210
+f 649/182/183 650/181/183 652/166/183
+f 673/50/269 674/203/269 676/51/269
+f 700/85/271 764/84/271 766/86/271
+f 670/118/374 734/120/374 736/94/374
+f 670/118/283 668/100/283 732/119/283
+f 768/38/288 766/151/288 765/154/288
+f 690/65/291 754/77/291 756/78/291
+f 710/156/180 708/45/180 707/44/180
+f 677/183/182 678/184/182 680/164/182
+f 646/61/208 644/73/208 708/74/208
+f 670/221/262 672/53/262 671/52/262
+f 691/194/187 692/193/187 693/196/187
+f 683/131/265 681/125/265 684/127/265
+f 696/122/188 698/123/188 697/124/188
+f 696/75/218 760/70/218 762/76/218
+f 747/209/220 748/190/220 746/129/220
+f 668/100/222 666/101/222 730/102/222
+f 702/117/306 700/85/306 766/86/306
+f 720/186/226 718/161/226 717/204/226
+f 745/14/228 743/27/228 741/15/228
+f 733/176/230 734/177/230 732/175/230
+f 718/105/254 654/106/254 652/104/254
+f 721/10/175 717/11/175 705/4/175
+f 745/14/178 741/15/178 737/8/178
+f 757/23/194 755/24/194 753/6/194
+f 681/125/265 682/126/265 684/127/265
+f 704/90/321 702/117/321 768/91/321
+f 727/170/329 729/172/329 728/171/329
+f 666/101/359 664/114/359 728/116/359
+f 764/152/191 762/147/191 761/188/191
+f 756/141/193 754/2/193 753/1/193
+f 717/11/195 715/33/195 713/19/195
+f 707/44/197 708/45/197 705/37/197
+f 705/37/199 706/121/199 768/38/199
+f 686/71/201 684/79/201 748/82/201
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr0.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr0.obj
new file mode 100644
index 0000000..eb6d468
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr0.obj
@@ -0,0 +1,4280 @@
+# Blender v2.79 (sub 0) OBJ File: 'signal_ks_singlemesh_final.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_main_smr0.mtl
+o KsHauptsignal_Plane.006
+v 0.028888 -0.503378 -0.439591
+v -0.028274 -0.503378 -0.439631
+v -0.028235 -0.503378 -0.496794
+v 0.028928 -0.503378 -0.496754
+v 0.028809 -0.503378 -0.325555
+v 0.028769 -0.503378 -0.268392
+v -0.028394 -0.503378 -0.268432
+v -0.028354 -0.503378 -0.325595
+v 0.028888 -0.299114 -0.439591
+v 0.028888 -0.172218 -0.439591
+v -0.028274 -0.172218 -0.439631
+v -0.028274 -0.299114 -0.439631
+v -0.028235 -0.299114 -0.496794
+v -0.028235 -0.172218 -0.496794
+v 0.028928 -0.172218 -0.496754
+v 0.028928 -0.299114 -0.496754
+v 0.028809 -0.299114 -0.325555
+v 0.028809 -0.172218 -0.325555
+v 0.028769 -0.172218 -0.268392
+v 0.028769 -0.299114 -0.268392
+v -0.028394 -0.299114 -0.268432
+v -0.028394 -0.172218 -0.268432
+v -0.028354 -0.172218 -0.325595
+v -0.028354 -0.299114 -0.325595
+v -0.135201 0.243339 -0.586523
+v -0.135219 0.242789 -0.559563
+v -0.132013 0.253858 -0.639022
+v -0.132068 0.253308 -0.559514
+v -0.126870 0.263561 -0.638975
+v -0.126926 0.263011 -0.559467
+v -0.119933 0.272074 -0.638933
+v -0.119989 0.271524 -0.559424
+v -0.111469 0.279070 -0.638896
+v -0.111524 0.278520 -0.559387
+v -0.101802 0.284280 -0.638865
+v -0.101858 0.283730 -0.559357
+v -0.091305 0.287504 -0.638844
+v -0.091361 0.286954 -0.559335
+v -0.080380 0.288619 -0.638831
+v -0.080436 0.288069 -0.559323
+v -0.069448 0.287581 -0.638828
+v -0.069504 0.287030 -0.559320
+v -0.058929 0.284430 -0.638835
+v -0.058984 0.283880 -0.559327
+v -0.049226 0.279287 -0.638851
+v -0.049281 0.278737 -0.559343
+v -0.040713 0.272350 -0.638876
+v -0.040768 0.271800 -0.559368
+v -0.033717 0.263886 -0.638909
+v -0.033772 0.263336 -0.559401
+v -0.028506 0.254219 -0.638948
+v -0.028562 0.253669 -0.559440
+v -0.025318 0.243722 -0.586445
+v -0.025337 0.243172 -0.559485
+v -0.024183 0.232316 -0.586441
+v -0.024223 0.232252 -0.559532
+v -0.025274 0.221688 -0.586283
+v -0.025260 0.221322 -0.559578
+v -0.028394 0.211344 -0.586324
+v -0.028411 0.210797 -0.559621
+v -0.033537 0.201642 -0.586366
+v -0.033554 0.201094 -0.559663
+v -0.040474 0.193129 -0.586405
+v -0.040491 0.192581 -0.559701
+v -0.048938 0.186134 -0.586439
+v -0.048955 0.185585 -0.559735
+v -0.058604 0.180924 -0.586466
+v -0.058622 0.180374 -0.559762
+v -0.069101 0.177700 -0.586486
+v -0.069119 0.177150 -0.559782
+v -0.080026 0.176585 -0.586498
+v -0.080044 0.176035 -0.559794
+v -0.090958 0.177623 -0.586502
+v -0.090977 0.177073 -0.559798
+v -0.101477 0.180774 -0.586496
+v -0.101497 0.180224 -0.559793
+v -0.111180 0.185916 -0.586483
+v -0.111200 0.185367 -0.559779
+v -0.119693 0.192853 -0.586461
+v -0.119713 0.192304 -0.559758
+v -0.126689 0.201317 -0.586433
+v -0.126709 0.200769 -0.559729
+v -0.131899 0.210983 -0.586398
+v -0.131919 0.210436 -0.559694
+v -0.135091 0.221305 -0.586361
+v -0.135144 0.220938 -0.559656
+v -0.136256 0.231924 -0.586521
+v -0.136258 0.231861 -0.559612
+v -0.137672 0.243790 -0.586520
+v -0.137717 0.243271 -0.523031
+v -0.134343 0.254782 -0.639014
+v -0.134424 0.254264 -0.522977
+v -0.128969 0.264921 -0.638963
+v -0.129050 0.264402 -0.522926
+v -0.121720 0.273816 -0.638916
+v -0.121801 0.273298 -0.522879
+v -0.112875 0.281127 -0.638876
+v -0.112956 0.280609 -0.522839
+v -0.102774 0.286572 -0.638843
+v -0.102855 0.286053 -0.522806
+v -0.091805 0.289941 -0.638820
+v -0.091886 0.289423 -0.522782
+v -0.080389 0.291105 -0.638806
+v -0.080470 0.290587 -0.522769
+v -0.068965 0.290021 -0.638803
+v -0.069047 0.289502 -0.522766
+v -0.057973 0.286728 -0.638811
+v -0.058054 0.286210 -0.522774
+v -0.047834 0.281354 -0.638829
+v -0.047915 0.280836 -0.522792
+v -0.038938 0.274105 -0.638857
+v -0.039019 0.273587 -0.522820
+v -0.031628 0.265261 -0.638893
+v -0.031709 0.264742 -0.522856
+v -0.026183 0.255160 -0.638937
+v -0.026264 0.254641 -0.522900
+v -0.022850 0.244190 -0.586438
+v -0.022895 0.243672 -0.522949
+v -0.021686 0.232775 -0.586437
+v -0.021730 0.232256 -0.523002
+v -0.022771 0.221351 -0.586289
+v -0.022815 0.220833 -0.523056
+v -0.026063 0.210359 -0.586343
+v -0.026107 0.209840 -0.523110
+v -0.031437 0.200220 -0.586394
+v -0.031481 0.199702 -0.523162
+v -0.038686 0.191324 -0.586441
+v -0.038730 0.190806 -0.523209
+v -0.047531 0.184013 -0.586481
+v -0.047575 0.183495 -0.523249
+v -0.057632 0.178569 -0.586514
+v -0.057676 0.178051 -0.523282
+v -0.068601 0.175200 -0.586538
+v -0.068645 0.174682 -0.523305
+v -0.080017 0.174035 -0.586551
+v -0.080061 0.173517 -0.523319
+v -0.091441 0.175120 -0.586554
+v -0.091485 0.174602 -0.523322
+v -0.102433 0.178413 -0.586546
+v -0.102477 0.177894 -0.523314
+v -0.112572 0.183787 -0.586528
+v -0.112616 0.183268 -0.523296
+v -0.121468 0.191035 -0.586500
+v -0.121512 0.190517 -0.523268
+v -0.128778 0.199880 -0.586464
+v -0.128823 0.199362 -0.523231
+v -0.134223 0.209981 -0.586420
+v -0.134267 0.209463 -0.523188
+v -0.137592 0.220950 -0.586371
+v -0.137637 0.220432 -0.523138
+v -0.138757 0.232366 -0.586521
+v -0.138801 0.231848 -0.523086
+v 0.097038 0.506097 -0.586361
+v 0.097019 0.505869 -0.559401
+v 0.098378 0.510448 -0.638861
+v 0.098323 0.510220 -0.559353
+v 0.100505 0.514461 -0.638817
+v 0.100450 0.514233 -0.559308
+v 0.103374 0.517982 -0.638777
+v 0.103319 0.517755 -0.559268
+v 0.106875 0.520876 -0.638743
+v 0.106820 0.520648 -0.559235
+v 0.110874 0.523031 -0.638717
+v 0.110818 0.522803 -0.559209
+v 0.115216 0.524364 -0.638700
+v 0.115160 0.524137 -0.559191
+v 0.119734 0.524825 -0.638692
+v 0.119679 0.524598 -0.559183
+v 0.124256 0.524396 -0.638693
+v 0.124201 0.524168 -0.559185
+v 0.128607 0.523093 -0.638704
+v 0.128552 0.522865 -0.559196
+v 0.132620 0.520966 -0.638724
+v 0.132565 0.520738 -0.559216
+v 0.136141 0.518097 -0.638753
+v 0.136086 0.517869 -0.559244
+v 0.139035 0.514596 -0.638788
+v 0.138980 0.514368 -0.559280
+v 0.141190 0.510597 -0.638830
+v 0.141135 0.510370 -0.559322
+v 0.142487 0.506255 -0.586328
+v 0.142469 0.506028 -0.559367
+v 0.142957 0.501537 -0.586324
+v 0.142930 0.501511 -0.559416
+v 0.142506 0.497142 -0.586166
+v 0.142501 0.496990 -0.559461
+v 0.141215 0.492863 -0.586206
+v 0.141197 0.492637 -0.559502
+v 0.139088 0.488850 -0.586246
+v 0.139070 0.488624 -0.559542
+v 0.136219 0.485329 -0.586282
+v 0.136201 0.485102 -0.559578
+v 0.132718 0.482436 -0.586312
+v 0.132700 0.482209 -0.559608
+v 0.128720 0.480281 -0.586335
+v 0.128702 0.480054 -0.559632
+v 0.124378 0.478947 -0.586351
+v 0.124360 0.478720 -0.559647
+v 0.119860 0.478486 -0.586358
+v 0.119841 0.478259 -0.559655
+v 0.115338 0.478915 -0.586358
+v 0.115319 0.478688 -0.559654
+v 0.110987 0.480219 -0.586348
+v 0.110968 0.479992 -0.559645
+v 0.106974 0.482346 -0.586331
+v 0.106954 0.482119 -0.559627
+v 0.103453 0.485215 -0.586305
+v 0.103433 0.484988 -0.559602
+v 0.100559 0.488716 -0.586274
+v 0.100539 0.488489 -0.559570
+v 0.098404 0.492714 -0.586237
+v 0.098384 0.492488 -0.559533
+v 0.097083 0.496983 -0.586199
+v 0.097050 0.496832 -0.559494
+v 0.096602 0.501376 -0.586358
+v 0.096590 0.501349 -0.559449
+v 0.096016 0.506283 -0.586357
+v 0.095972 0.506069 -0.522868
+v 0.097414 0.510830 -0.638853
+v 0.097333 0.510615 -0.522815
+v 0.099637 0.515023 -0.638803
+v 0.099556 0.514809 -0.522766
+v 0.102635 0.518703 -0.638760
+v 0.102554 0.518489 -0.522722
+v 0.106294 0.521727 -0.638723
+v 0.106213 0.521512 -0.522686
+v 0.110472 0.523979 -0.638694
+v 0.110391 0.523764 -0.522657
+v 0.115009 0.525372 -0.638675
+v 0.114928 0.525158 -0.522638
+v 0.119731 0.525854 -0.638666
+v 0.119650 0.525640 -0.522629
+v 0.124456 0.525405 -0.638668
+v 0.124375 0.525191 -0.522631
+v 0.129002 0.524043 -0.638681
+v 0.128921 0.523829 -0.522643
+v 0.133196 0.521821 -0.638703
+v 0.133115 0.521606 -0.522666
+v 0.136876 0.518822 -0.638734
+v 0.136795 0.518608 -0.522697
+v 0.139899 0.515164 -0.638774
+v 0.139818 0.514950 -0.522737
+v 0.142151 0.510986 -0.638820
+v 0.142070 0.510772 -0.522783
+v 0.143508 0.506449 -0.586322
+v 0.143464 0.506235 -0.522833
+v 0.143990 0.501727 -0.586322
+v 0.143946 0.501513 -0.522886
+v 0.143541 0.497002 -0.586173
+v 0.143497 0.496788 -0.522940
+v 0.142179 0.492455 -0.586225
+v 0.142135 0.492241 -0.522993
+v 0.139957 0.488262 -0.586274
+v 0.139912 0.488048 -0.523042
+v 0.136958 0.484583 -0.586318
+v 0.136914 0.484368 -0.523086
+v 0.133300 0.481559 -0.586355
+v 0.133256 0.481344 -0.523123
+v 0.129122 0.479307 -0.586384
+v 0.129078 0.479092 -0.523151
+v 0.124585 0.477913 -0.586403
+v 0.124541 0.477699 -0.523170
+v 0.119863 0.477432 -0.586412
+v 0.119819 0.477217 -0.523179
+v 0.115138 0.477880 -0.586410
+v 0.115094 0.477666 -0.523177
+v 0.110591 0.479242 -0.586397
+v 0.110547 0.479028 -0.523165
+v 0.106398 0.481465 -0.586375
+v 0.106354 0.481251 -0.523143
+v 0.102718 0.484463 -0.586344
+v 0.102674 0.484249 -0.523111
+v 0.099694 0.488121 -0.586304
+v 0.099650 0.487907 -0.523072
+v 0.097442 0.492299 -0.586258
+v 0.097398 0.492085 -0.523026
+v 0.096049 0.496836 -0.586208
+v 0.096005 0.496622 -0.522975
+v 0.095567 0.501558 -0.586357
+v 0.095523 0.501344 -0.522922
+v 0.064799 0.243339 -0.586384
+v 0.064781 0.242789 -0.559423
+v 0.067987 0.253858 -0.638883
+v 0.067932 0.253308 -0.559374
+v 0.073130 0.263561 -0.638836
+v 0.073074 0.263011 -0.559327
+v 0.080067 0.272074 -0.638793
+v 0.080011 0.271524 -0.559285
+v 0.088531 0.279070 -0.638756
+v 0.088476 0.278520 -0.559248
+v 0.098198 0.284280 -0.638726
+v 0.098142 0.283730 -0.559217
+v 0.108695 0.287504 -0.638704
+v 0.108639 0.286954 -0.559196
+v 0.119620 0.288619 -0.638692
+v 0.119564 0.288069 -0.559183
+v 0.130552 0.287581 -0.638689
+v 0.130496 0.287030 -0.559180
+v 0.141071 0.284430 -0.638695
+v 0.141016 0.283880 -0.559187
+v 0.150774 0.279287 -0.638712
+v 0.150719 0.278737 -0.559203
+v 0.159287 0.272350 -0.638736
+v 0.159232 0.271800 -0.559228
+v 0.166283 0.263886 -0.638769
+v 0.166228 0.263336 -0.559261
+v 0.171494 0.254219 -0.638809
+v 0.171438 0.253669 -0.559300
+v 0.174681 0.243722 -0.586305
+v 0.174663 0.243172 -0.559345
+v 0.175817 0.232316 -0.586301
+v 0.175777 0.232252 -0.559393
+v 0.174726 0.221688 -0.586144
+v 0.174740 0.221322 -0.559438
+v 0.171606 0.211344 -0.586185
+v 0.171589 0.210797 -0.559481
+v 0.166463 0.201642 -0.586227
+v 0.166446 0.201094 -0.559523
+v 0.159526 0.193129 -0.586265
+v 0.159509 0.192581 -0.559562
+v 0.151062 0.186134 -0.586299
+v 0.151045 0.185585 -0.559595
+v 0.141396 0.180924 -0.586326
+v 0.141378 0.180374 -0.559623
+v 0.130899 0.177700 -0.586346
+v 0.130881 0.177150 -0.559643
+v 0.119974 0.176585 -0.586358
+v 0.119956 0.176035 -0.559655
+v 0.109042 0.177623 -0.586362
+v 0.109023 0.177073 -0.559659
+v 0.098523 0.180774 -0.586357
+v 0.098503 0.180224 -0.559653
+v 0.088820 0.185916 -0.586343
+v 0.088800 0.185368 -0.559640
+v 0.080307 0.192853 -0.586322
+v 0.080287 0.192304 -0.559618
+v 0.073311 0.201317 -0.586293
+v 0.073291 0.200769 -0.559589
+v 0.068101 0.210983 -0.586258
+v 0.068081 0.210436 -0.559555
+v 0.064909 0.221305 -0.586222
+v 0.064856 0.220938 -0.559516
+v 0.063744 0.231924 -0.586381
+v 0.063742 0.231861 -0.559472
+v 0.062328 0.243790 -0.586381
+v 0.062283 0.243271 -0.522892
+v 0.065657 0.254782 -0.638875
+v 0.065576 0.254264 -0.522838
+v 0.071031 0.264921 -0.638823
+v 0.070950 0.264402 -0.522786
+v 0.078280 0.273816 -0.638777
+v 0.078199 0.273298 -0.522739
+v 0.087125 0.281127 -0.638736
+v 0.087044 0.280609 -0.522699
+v 0.097226 0.286572 -0.638704
+v 0.097145 0.286053 -0.522666
+v 0.108195 0.289941 -0.638680
+v 0.108114 0.289423 -0.522643
+v 0.119611 0.291105 -0.638667
+v 0.119530 0.290587 -0.522629
+v 0.131035 0.290021 -0.638664
+v 0.130953 0.289502 -0.522627
+v 0.142027 0.286728 -0.638672
+v 0.141946 0.286210 -0.522634
+v 0.152166 0.281354 -0.638690
+v 0.152085 0.280836 -0.522652
+v 0.161062 0.274105 -0.638717
+v 0.160981 0.273587 -0.522680
+v 0.168372 0.265261 -0.638754
+v 0.168291 0.264742 -0.522717
+v 0.173817 0.255160 -0.638798
+v 0.173736 0.254641 -0.522760
+v 0.177150 0.244190 -0.586299
+v 0.177105 0.243672 -0.522810
+v 0.178314 0.232775 -0.586298
+v 0.178270 0.232256 -0.522862
+v 0.177229 0.221351 -0.586149
+v 0.177185 0.220833 -0.522917
+v 0.173937 0.210359 -0.586203
+v 0.173893 0.209840 -0.522971
+v 0.168563 0.200220 -0.586254
+v 0.168519 0.199702 -0.523022
+v 0.161314 0.191324 -0.586301
+v 0.161270 0.190806 -0.523069
+v 0.152469 0.184014 -0.586342
+v 0.152425 0.183495 -0.523109
+v 0.142368 0.178569 -0.586374
+v 0.142324 0.178051 -0.523142
+v 0.131399 0.175200 -0.586398
+v 0.131355 0.174682 -0.523166
+v 0.119983 0.174035 -0.586411
+v 0.119939 0.173517 -0.523179
+v 0.108559 0.175120 -0.586414
+v 0.108515 0.174602 -0.523182
+v 0.097567 0.178413 -0.586406
+v 0.097523 0.177894 -0.523174
+v 0.087428 0.183787 -0.586388
+v 0.087384 0.183268 -0.523156
+v 0.078532 0.191035 -0.586360
+v 0.078488 0.190517 -0.523128
+v 0.071222 0.199880 -0.586324
+v 0.071177 0.199362 -0.523092
+v 0.065777 0.209981 -0.586280
+v 0.065733 0.209463 -0.523048
+v 0.062408 0.220950 -0.586231
+v 0.062363 0.220432 -0.522999
+v 0.061243 0.232366 -0.586381
+v 0.061199 0.231848 -0.522946
+v 0.095523 -0.005892 -0.522922
+v 0.095567 -0.005677 -0.586357
+v 0.096005 -0.010613 -0.522975
+v 0.096049 -0.010399 -0.586208
+v 0.097398 -0.015150 -0.523026
+v 0.097442 -0.014936 -0.586258
+v 0.099650 -0.019328 -0.523072
+v 0.099694 -0.019114 -0.586304
+v 0.102674 -0.022987 -0.523111
+v 0.102718 -0.022772 -0.586344
+v 0.106354 -0.025985 -0.523143
+v 0.106398 -0.025771 -0.586375
+v 0.110547 -0.028208 -0.523165
+v 0.110591 -0.027993 -0.586397
+v 0.115094 -0.029570 -0.523177
+v 0.115138 -0.029355 -0.586410
+v 0.119819 -0.030018 -0.523179
+v 0.119863 -0.029804 -0.586412
+v 0.124541 -0.029537 -0.523170
+v 0.124585 -0.029322 -0.586403
+v 0.129078 -0.028143 -0.523151
+v 0.129122 -0.027929 -0.586384
+v 0.133256 -0.025891 -0.523123
+v 0.133300 -0.025677 -0.586355
+v 0.136914 -0.022867 -0.523086
+v 0.136958 -0.022653 -0.586318
+v 0.139912 -0.019188 -0.523042
+v 0.139957 -0.018973 -0.586274
+v 0.142135 -0.014994 -0.522993
+v 0.142179 -0.014780 -0.586225
+v 0.143497 -0.010448 -0.522940
+v 0.143541 -0.010233 -0.586173
+v 0.143946 -0.005723 -0.522886
+v 0.143990 -0.005508 -0.586322
+v 0.143464 -0.001001 -0.522833
+v 0.143508 -0.000787 -0.586322
+v 0.142070 0.003536 -0.522783
+v 0.142151 0.003751 -0.638820
+v 0.139818 0.007714 -0.522737
+v 0.139899 0.007929 -0.638774
+v 0.136795 0.011373 -0.522697
+v 0.136876 0.011587 -0.638734
+v 0.133115 0.014371 -0.522666
+v 0.133196 0.014585 -0.638703
+v 0.128921 0.016593 -0.522643
+v 0.129002 0.016808 -0.638681
+v 0.124375 0.017955 -0.522631
+v 0.124456 0.018170 -0.638668
+v 0.119650 0.018404 -0.522629
+v 0.119731 0.018618 -0.638666
+v 0.114928 0.017922 -0.522638
+v 0.115009 0.018137 -0.638675
+v 0.110391 0.016529 -0.522657
+v 0.110472 0.016743 -0.638694
+v 0.106213 0.014277 -0.522686
+v 0.106294 0.014491 -0.638723
+v 0.102554 0.011253 -0.522722
+v 0.102635 0.011467 -0.638760
+v 0.099556 0.007574 -0.522766
+v 0.099637 0.007788 -0.638803
+v 0.097333 0.003380 -0.522815
+v 0.097414 0.003594 -0.638853
+v 0.095972 -0.001167 -0.522868
+v 0.096016 -0.000952 -0.586357
+v 0.096590 -0.005886 -0.559449
+v 0.096602 -0.005860 -0.586358
+v 0.097050 -0.010404 -0.559494
+v 0.097083 -0.010252 -0.586199
+v 0.098384 -0.014748 -0.559533
+v 0.098404 -0.014522 -0.586237
+v 0.100539 -0.018746 -0.559570
+v 0.100559 -0.018520 -0.586274
+v 0.103433 -0.022247 -0.559602
+v 0.103453 -0.022021 -0.586305
+v 0.106954 -0.025117 -0.559627
+v 0.106974 -0.024890 -0.586331
+v 0.110968 -0.027244 -0.559645
+v 0.110987 -0.027017 -0.586348
+v 0.115319 -0.028547 -0.559654
+v 0.115338 -0.028320 -0.586358
+v 0.119841 -0.028977 -0.559655
+v 0.119860 -0.028749 -0.586358
+v 0.124360 -0.028516 -0.559647
+v 0.124378 -0.028288 -0.586351
+v 0.128702 -0.027182 -0.559632
+v 0.128720 -0.026955 -0.586335
+v 0.132700 -0.025027 -0.559608
+v 0.132718 -0.024800 -0.586312
+v 0.136201 -0.022133 -0.559578
+v 0.136219 -0.021906 -0.586282
+v 0.139070 -0.018612 -0.559542
+v 0.139088 -0.018385 -0.586246
+v 0.141197 -0.014598 -0.559502
+v 0.141215 -0.014372 -0.586206
+v 0.142501 -0.010245 -0.559461
+v 0.142506 -0.010094 -0.586166
+v 0.142930 -0.005724 -0.559416
+v 0.142957 -0.005698 -0.586324
+v 0.142469 -0.001208 -0.559367
+v 0.142487 -0.000980 -0.586328
+v 0.141135 0.003134 -0.559322
+v 0.141190 0.003362 -0.638830
+v 0.138980 0.007132 -0.559280
+v 0.139035 0.007360 -0.638788
+v 0.136086 0.010633 -0.559244
+v 0.136141 0.010861 -0.638753
+v 0.132565 0.013503 -0.559216
+v 0.132620 0.013730 -0.638724
+v 0.128552 0.015630 -0.559196
+v 0.128607 0.015857 -0.638704
+v 0.124201 0.016933 -0.559185
+v 0.124256 0.017161 -0.638693
+v 0.119679 0.017362 -0.559183
+v 0.119734 0.017590 -0.638692
+v 0.115160 0.016901 -0.559191
+v 0.115216 0.017129 -0.638700
+v 0.110818 0.015568 -0.559209
+v 0.110874 0.015795 -0.638717
+v 0.106820 0.013413 -0.559235
+v 0.106875 0.013640 -0.638743
+v 0.103319 0.010519 -0.559268
+v 0.103374 0.010747 -0.638777
+v 0.100450 0.006998 -0.559308
+v 0.100505 0.007226 -0.638817
+v 0.098323 0.002985 -0.559353
+v 0.098378 0.003212 -0.638861
+v 0.097019 -0.001366 -0.559401
+v 0.097038 -0.001139 -0.586361
+v -0.035201 0.400585 -0.586453
+v -0.035219 0.400035 -0.559493
+v -0.032013 0.411104 -0.638952
+v -0.032068 0.410554 -0.559444
+v -0.026870 0.420807 -0.638906
+v -0.026926 0.420257 -0.559397
+v -0.019933 0.429320 -0.638863
+v -0.019989 0.428770 -0.559354
+v -0.011469 0.436316 -0.638826
+v -0.011524 0.435766 -0.559317
+v -0.001802 0.441526 -0.638796
+v -0.001858 0.440976 -0.559287
+v 0.008695 0.444750 -0.638774
+v 0.008639 0.444201 -0.559266
+v 0.019620 0.445865 -0.638761
+v 0.019564 0.445315 -0.559253
+v 0.030552 0.444827 -0.638758
+v 0.030496 0.444276 -0.559250
+v 0.041071 0.441676 -0.638765
+v 0.041016 0.441126 -0.559257
+v 0.050774 0.436533 -0.638781
+v 0.050719 0.435983 -0.559273
+v 0.059287 0.429597 -0.638806
+v 0.059232 0.429046 -0.559298
+v 0.066283 0.421132 -0.638839
+v 0.066228 0.420582 -0.559331
+v 0.071494 0.411466 -0.638879
+v 0.071438 0.410915 -0.559370
+v 0.074682 0.400968 -0.586375
+v 0.074663 0.400418 -0.559415
+v 0.075817 0.389562 -0.586371
+v 0.075777 0.389498 -0.559463
+v 0.074726 0.378934 -0.586213
+v 0.074740 0.378568 -0.559508
+v 0.071606 0.368590 -0.586254
+v 0.071589 0.368043 -0.559551
+v 0.066463 0.358888 -0.586296
+v 0.066446 0.358340 -0.559593
+v 0.059526 0.350376 -0.586335
+v 0.059509 0.349827 -0.559632
+v 0.051062 0.343380 -0.586369
+v 0.051045 0.342831 -0.559665
+v 0.041396 0.338170 -0.586396
+v 0.041378 0.337620 -0.559693
+v 0.030899 0.334946 -0.586416
+v 0.030881 0.334396 -0.559713
+v 0.019974 0.333831 -0.586428
+v 0.019956 0.333281 -0.559725
+v 0.009042 0.334869 -0.586432
+v 0.009023 0.334319 -0.559728
+v -0.001477 0.338020 -0.586427
+v -0.001497 0.337471 -0.559723
+v -0.011180 0.343162 -0.586413
+v -0.011200 0.342614 -0.559709
+v -0.019693 0.350099 -0.586391
+v -0.019713 0.349550 -0.559688
+v -0.026689 0.358563 -0.586363
+v -0.026709 0.358015 -0.559659
+v -0.031899 0.368229 -0.586328
+v -0.031919 0.367682 -0.559624
+v -0.035091 0.378551 -0.586292
+v -0.035144 0.378184 -0.559586
+v -0.036256 0.389171 -0.586451
+v -0.036258 0.389107 -0.559542
+v -0.037672 0.401036 -0.586450
+v -0.037717 0.400517 -0.522961
+v -0.034343 0.412028 -0.638945
+v -0.034424 0.411510 -0.522907
+v -0.028969 0.422167 -0.638893
+v -0.029050 0.421649 -0.522856
+v -0.021720 0.431063 -0.638846
+v -0.021801 0.430544 -0.522809
+v -0.012875 0.438373 -0.638806
+v -0.012956 0.437855 -0.522769
+v -0.002774 0.443818 -0.638773
+v -0.002855 0.443299 -0.522736
+v 0.008195 0.447187 -0.638750
+v 0.008114 0.446669 -0.522713
+v 0.019611 0.448351 -0.638736
+v 0.019530 0.447833 -0.522699
+v 0.031035 0.447267 -0.638734
+v 0.030953 0.446748 -0.522696
+v 0.042027 0.443974 -0.638741
+v 0.041946 0.443456 -0.522704
+v 0.052166 0.438600 -0.638759
+v 0.052085 0.438082 -0.522722
+v 0.061062 0.431351 -0.638787
+v 0.060981 0.430833 -0.522750
+v 0.068372 0.422507 -0.638824
+v 0.068291 0.421988 -0.522787
+v 0.073817 0.412406 -0.638867
+v 0.073736 0.411887 -0.522830
+v 0.077150 0.401436 -0.586368
+v 0.077105 0.400918 -0.522879
+v 0.078314 0.390021 -0.586367
+v 0.078270 0.389503 -0.522932
+v 0.077229 0.378597 -0.586219
+v 0.077185 0.378079 -0.522987
+v 0.073937 0.367605 -0.586273
+v 0.073893 0.367086 -0.523041
+v 0.068563 0.357466 -0.586324
+v 0.068519 0.356948 -0.523092
+v 0.061314 0.348570 -0.586371
+v 0.061270 0.348052 -0.523139
+v 0.052469 0.341260 -0.586412
+v 0.052425 0.340741 -0.523179
+v 0.042368 0.335815 -0.586444
+v 0.042324 0.335297 -0.523212
+v 0.031399 0.332446 -0.586468
+v 0.031355 0.331928 -0.523235
+v 0.019983 0.331281 -0.586481
+v 0.019939 0.330763 -0.523249
+v 0.008559 0.332366 -0.586484
+v 0.008515 0.331848 -0.523252
+v -0.002433 0.335659 -0.586476
+v -0.002477 0.335141 -0.523244
+v -0.012572 0.341033 -0.586458
+v -0.012616 0.340515 -0.523226
+v -0.021468 0.348281 -0.586430
+v -0.021512 0.347763 -0.523198
+v -0.028778 0.357126 -0.586394
+v -0.028823 0.356608 -0.523161
+v -0.034223 0.367227 -0.586350
+v -0.034267 0.366709 -0.523118
+v -0.037592 0.378196 -0.586301
+v -0.037637 0.377678 -0.523069
+v -0.038757 0.389612 -0.586451
+v -0.038801 0.389094 -0.523016
+v -0.004477 0.094108 -0.522992
+v -0.004433 0.094323 -0.586427
+v -0.003995 0.089387 -0.523045
+v -0.003951 0.089601 -0.586277
+v -0.002602 0.084850 -0.523096
+v -0.002558 0.085064 -0.586328
+v -0.000350 0.080672 -0.523142
+v -0.000306 0.080886 -0.586374
+v 0.002674 0.077013 -0.523181
+v 0.002718 0.077228 -0.586413
+v 0.006354 0.074015 -0.523213
+v 0.006398 0.074229 -0.586445
+v 0.010547 0.071792 -0.523235
+v 0.010591 0.072007 -0.586467
+v 0.015094 0.070430 -0.523247
+v 0.015138 0.070645 -0.586479
+v 0.019819 0.069982 -0.523249
+v 0.019863 0.070196 -0.586481
+v 0.024541 0.070463 -0.523240
+v 0.024585 0.070678 -0.586473
+v 0.029078 0.071857 -0.523221
+v 0.029122 0.072071 -0.586453
+v 0.033256 0.074109 -0.523193
+v 0.033300 0.074323 -0.586425
+v 0.036914 0.077133 -0.523156
+v 0.036958 0.077347 -0.586388
+v 0.039912 0.080812 -0.523112
+v 0.039957 0.081027 -0.586344
+v 0.042135 0.085006 -0.523063
+v 0.042179 0.085220 -0.586295
+v 0.043497 0.089552 -0.523010
+v 0.043541 0.089767 -0.586242
+v 0.043946 0.094278 -0.522956
+v 0.043990 0.094492 -0.586391
+v 0.043464 0.098999 -0.522903
+v 0.043508 0.099214 -0.586392
+v 0.042070 0.103536 -0.522852
+v 0.042151 0.103751 -0.638889
+v 0.039818 0.107714 -0.522806
+v 0.039899 0.107929 -0.638844
+v 0.036795 0.111373 -0.522767
+v 0.036876 0.111587 -0.638804
+v 0.033115 0.114371 -0.522735
+v 0.033196 0.114585 -0.638773
+v 0.028921 0.116594 -0.522713
+v 0.029002 0.116808 -0.638750
+v 0.024375 0.117955 -0.522701
+v 0.024456 0.118170 -0.638738
+v 0.019650 0.118404 -0.522699
+v 0.019731 0.118618 -0.638736
+v 0.014928 0.117922 -0.522708
+v 0.015009 0.118137 -0.638745
+v 0.010391 0.116529 -0.522727
+v 0.010472 0.116743 -0.638764
+v 0.006213 0.114277 -0.522755
+v 0.006294 0.114491 -0.638793
+v 0.002554 0.111253 -0.522792
+v 0.002635 0.111467 -0.638829
+v -0.000444 0.107574 -0.522836
+v -0.000363 0.107788 -0.638873
+v -0.002667 0.103380 -0.522885
+v -0.002586 0.103594 -0.638922
+v -0.004028 0.098833 -0.522938
+v -0.003984 0.099048 -0.586427
+v -0.003410 0.094114 -0.559519
+v -0.003398 0.094140 -0.586428
+v -0.002950 0.089596 -0.559564
+v -0.002917 0.089748 -0.586269
+v -0.001616 0.085252 -0.559603
+v -0.001596 0.085478 -0.586307
+v 0.000540 0.081254 -0.559640
+v 0.000559 0.081480 -0.586344
+v 0.003433 0.077753 -0.559672
+v 0.003453 0.077979 -0.586375
+v 0.006954 0.074883 -0.559697
+v 0.006974 0.075110 -0.586400
+v 0.010968 0.072756 -0.559714
+v 0.010987 0.072983 -0.586418
+v 0.015319 0.071453 -0.559724
+v 0.015338 0.071680 -0.586427
+v 0.019841 0.071023 -0.559725
+v 0.019860 0.071251 -0.586428
+v 0.024360 0.071484 -0.559717
+v 0.024378 0.071712 -0.586421
+v 0.028702 0.072818 -0.559701
+v 0.028720 0.073045 -0.586405
+v 0.032700 0.074973 -0.559678
+v 0.032718 0.075200 -0.586382
+v 0.036201 0.077867 -0.559648
+v 0.036219 0.078094 -0.586351
+v 0.039070 0.081388 -0.559612
+v 0.039088 0.081615 -0.586316
+v 0.041197 0.085402 -0.559572
+v 0.041215 0.085628 -0.586276
+v 0.042501 0.089755 -0.559530
+v 0.042506 0.089906 -0.586236
+v 0.042930 0.094276 -0.559486
+v 0.042957 0.094302 -0.586394
+v 0.042469 0.098792 -0.559437
+v 0.042487 0.099020 -0.586397
+v 0.041135 0.103134 -0.559391
+v 0.041190 0.103362 -0.638900
+v 0.038980 0.107132 -0.559350
+v 0.039035 0.107360 -0.638858
+v 0.036086 0.110633 -0.559314
+v 0.036141 0.110861 -0.638822
+v 0.032565 0.113503 -0.559286
+v 0.032620 0.113730 -0.638794
+v 0.028552 0.115630 -0.559266
+v 0.028607 0.115857 -0.638774
+v 0.024201 0.116933 -0.559254
+v 0.024256 0.117161 -0.638763
+v 0.019679 0.117363 -0.559253
+v 0.019734 0.117590 -0.638761
+v 0.015160 0.116902 -0.559261
+v 0.015216 0.117129 -0.638769
+v 0.010818 0.115568 -0.559278
+v 0.010874 0.115795 -0.638787
+v 0.006820 0.113413 -0.559305
+v 0.006875 0.113640 -0.638813
+v 0.003319 0.110519 -0.559338
+v 0.003374 0.110747 -0.638847
+v 0.000450 0.106998 -0.559378
+v 0.000505 0.107226 -0.638886
+v -0.001677 0.102985 -0.559423
+v -0.001622 0.103212 -0.638931
+v -0.002981 0.098634 -0.559471
+v -0.002962 0.098861 -0.586431
+v 0.028888 -0.168051 -0.439591
+v -0.028274 -0.168051 -0.439631
+v -0.028235 -0.168051 -0.496794
+v 0.028928 -0.168051 -0.496754
+v 0.028809 -0.168051 -0.325555
+v 0.028769 -0.168051 -0.268392
+v -0.028394 -0.168051 -0.268432
+v -0.028354 -0.168051 -0.325595
+v -0.028394 -0.168051 -0.268432
+v 0.028769 -0.168051 -0.268392
+v 0.028928 -0.168051 -0.496754
+v -0.028235 -0.168051 -0.496794
+v -0.028354 -0.168051 -0.325595
+v -0.028274 -0.168051 -0.439631
+v 0.028809 -0.168051 -0.325555
+v 0.028888 -0.168051 -0.439591
+v 0.028888 0.037812 -0.439591
+v 0.028888 0.165702 -0.439591
+v -0.028274 0.165702 -0.439631
+v -0.028274 0.037812 -0.439631
+v -0.028235 0.037812 -0.496794
+v -0.028235 0.165702 -0.496794
+v 0.028928 0.165702 -0.496754
+v 0.028928 0.037812 -0.496754
+v 0.028809 0.037812 -0.325555
+v 0.028809 0.165702 -0.325555
+v 0.028769 0.165702 -0.268392
+v 0.028769 0.037812 -0.268392
+v -0.028394 0.037812 -0.268432
+v -0.028394 0.165702 -0.268432
+v -0.028354 0.165702 -0.325595
+v -0.028354 0.037812 -0.325595
+v 0.028888 0.166622 -0.439591
+v -0.028274 0.166622 -0.439631
+v -0.028235 0.166622 -0.496794
+v 0.028928 0.166622 -0.496754
+v 0.028809 0.166622 -0.325555
+v 0.028769 0.166622 -0.268392
+v -0.028394 0.166622 -0.268432
+v -0.028354 0.166622 -0.325595
+v -0.028394 0.166622 -0.268432
+v 0.028769 0.166622 -0.268392
+v 0.028928 0.166622 -0.496754
+v -0.028235 0.166622 -0.496794
+v -0.028354 0.166622 -0.325595
+v -0.028274 0.166622 -0.439631
+v 0.028809 0.166622 -0.325555
+v 0.028888 0.166622 -0.439591
+v 0.028888 0.370885 -0.439591
+v 0.028888 0.497782 -0.439591
+v -0.028274 0.497782 -0.439631
+v -0.028274 0.370885 -0.439631
+v -0.028235 0.370885 -0.496794
+v -0.028235 0.497782 -0.496794
+v 0.028928 0.497782 -0.496754
+v 0.028928 0.370885 -0.496754
+v 0.028809 0.370885 -0.325555
+v 0.028809 0.497782 -0.325555
+v 0.028769 0.497782 -0.268392
+v 0.028769 0.370885 -0.268392
+v -0.028394 0.370885 -0.268432
+v -0.028394 0.497782 -0.268432
+v -0.028354 0.497782 -0.325595
+v -0.028354 0.370885 -0.325595
+v 0.269752 -0.145166 -0.548298
+v -0.230248 -0.145166 -0.548647
+v 0.269752 0.603749 -0.548297
+v -0.230248 0.603749 -0.548646
+v 0.269719 0.603749 -0.500879
+v 0.269719 -0.145166 -0.500879
+v -0.230281 -0.145166 -0.501228
+v -0.230281 0.603749 -0.501228
+vt 0.285559 0.095797
+vt 0.214079 0.095797
+vt 0.214079 0.000000
+vt 0.285559 0.000000
+vt 0.357039 0.095797
+vt 0.285559 0.095797
+vt 0.285559 0.000000
+vt 0.357039 0.000000
+vt 0.642599 0.095797
+vt 0.571118 0.095797
+vt 0.571118 0.000000
+vt 0.642598 0.000000
+vt 0.714079 0.904203
+vt 0.785559 0.904203
+vt 0.785559 1.000000
+vt 0.714079 1.000000
+vt 0.642599 0.904203
+vt 0.714079 0.904203
+vt 0.714079 1.000000
+vt 0.642599 1.000000
+vt 0.071480 0.095797
+vt 0.000000 0.095797
+vt 0.000000 0.000000
+vt 0.071480 0.000000
+vt 0.571118 0.095797
+vt 0.499638 0.095797
+vt 0.499638 0.000000
+vt 0.571118 0.000000
+vt 0.857040 0.394495
+vt 0.928520 0.394495
+vt 0.928520 0.480583
+vt 0.857040 0.480583
+vt 0.857040 0.129242
+vt 0.785559 0.129242
+vt 0.785559 0.043154
+vt 0.857040 0.043154
+vt 0.785559 0.172396
+vt 0.857040 0.172396
+vt 0.785559 0.000000
+vt 0.857040 0.000000
+vt 0.285559 0.250000
+vt 0.214079 0.250000
+vt 0.357039 0.250000
+vt 0.285559 0.250000
+vt 0.642599 0.250000
+vt 0.571118 0.250000
+vt 0.714079 0.750000
+vt 0.785559 0.750000
+vt 0.642599 0.750000
+vt 0.714079 0.750000
+vt 0.928520 0.154203
+vt 0.857040 0.154203
+vt 0.857040 0.000000
+vt 0.928520 0.000000
+vt 0.071480 0.250000
+vt 0.000000 0.250000
+vt 0.571118 0.250000
+vt 0.499638 0.250000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.615085 0.501950
+vt 0.538102 0.501950
+vt 0.538102 0.192341
+vt 0.615085 0.192341
+vt 0.538102 0.000000
+vt 0.615085 0.000000
+vt 0.076983 0.501950
+vt 0.000000 0.501950
+vt 0.000000 0.192341
+vt 0.076983 0.192341
+vt 0.000000 0.000000
+vt 0.076983 0.000000
+vt 0.692068 0.501950
+vt 0.692068 0.192341
+vt 0.692068 0.000000
+vt 0.769051 0.501950
+vt 0.692068 0.501950
+vt 0.692068 0.192341
+vt 0.769051 0.192341
+vt 0.692068 0.000000
+vt 0.769051 0.000000
+vt 0.846034 0.501950
+vt 0.769051 0.501950
+vt 0.769051 0.192341
+vt 0.846034 0.192341
+vt 0.769051 0.000000
+vt 0.846034 0.000000
+vt 0.923017 0.996502
+vt 0.846034 0.996502
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.384526 0.501950
+vt 0.307543 0.501950
+vt 0.307542 0.192341
+vt 0.384525 0.192341
+vt 0.307542 0.000000
+vt 0.384525 0.000000
+vt 0.307542 0.501950
+vt 0.230559 0.501950
+vt 0.230559 0.192341
+vt 0.307542 0.192341
+vt 0.230559 0.000000
+vt 0.307542 0.000000
+vt 0.923017 0.478709
+vt 1.000000 0.478709
+vt 1.000000 0.650215
+vt 0.923017 0.650215
+vt 0.923017 0.600923
+vt 0.846034 0.600923
+vt 0.846034 0.429417
+vt 0.923017 0.429417
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.615085 1.000000
+vt 0.538102 1.000000
+vt 0.538102 0.692796
+vt 0.615085 0.692796
+vt 0.538102 0.501950
+vt 0.615085 0.501950
+vt 0.076983 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.692797
+vt 0.076983 0.692797
+vt 0.000000 0.501950
+vt 0.076983 0.501950
+vt 0.769051 1.000000
+vt 0.692068 1.000000
+vt 0.692068 0.692796
+vt 0.769051 0.692796
+vt 0.692068 0.501950
+vt 0.769051 0.501950
+vt 0.615085 0.501950
+vt 0.692068 0.501950
+vt 0.692068 0.809153
+vt 0.615085 0.809153
+vt 0.692068 1.000000
+vt 0.615085 1.000000
+vt 0.846034 1.000000
+vt 0.769051 1.000000
+vt 0.769051 0.692796
+vt 0.846034 0.692796
+vt 0.769051 0.501950
+vt 0.846034 0.501950
+vt 1.000000 0.307203
+vt 0.923017 0.307203
+vt 0.923017 0.000000
+vt 1.000000 0.000000
+vt 0.384526 1.000000
+vt 0.307543 1.000000
+vt 0.307542 0.692797
+vt 0.384525 0.692797
+vt 0.307542 0.501950
+vt 0.384525 0.501950
+vt 0.307542 1.000000
+vt 0.230559 1.000000
+vt 0.230559 0.692797
+vt 0.307542 0.692796
+vt 0.230559 0.501950
+vt 0.307542 0.501950
+vt 0.923017 0.307203
+vt 1.000000 0.307203
+vt 1.000000 0.478709
+vt 0.923017 0.478709
+vt 0.923017 0.257476
+vt 0.846034 0.257476
+vt 0.846034 0.085970
+vt 0.923017 0.085970
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.846034 0.000000
+vt 0.923017 0.000000
+vt 0.875462 0.748915
+vt 0.437731 0.748915
+vt 0.437731 0.000000
+vt 0.875462 0.000000
+vt 0.437731 0.000000
+vt 0.437731 0.748915
+vt 0.000000 0.748915
+vt 0.000000 0.000000
+vt 0.958487 0.748915
+vt 0.916975 0.748915
+vt 0.916975 0.000000
+vt 0.958487 0.000000
+vt 0.958487 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.958487 0.500000
+vt 1.000000 1.000000
+vt 0.958487 1.000000
+vt 0.958487 0.500000
+vt 1.000000 0.500000
+vt 0.875462 0.000000
+vt 0.916974 0.000000
+vt 0.916975 0.748915
+vt 0.875462 0.748915
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.371443 0.812167
+vt 0.371352 0.783117
+vt 0.443163 0.783546
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.319278 0.869069
+vt 0.006467 0.407437
+vt 0.176492 0.407399
+vt 0.176430 0.438254
+vt 0.442897 0.340661
+vt 0.229109 0.340661
+vt 0.370467 0.312068
+vt 0.319524 0.069087
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.856681 0.436209
+vt 0.834553 0.458608
+vt 0.830124 0.453224
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.229049 0.665457
+vt 0.228992 0.635930
+vt 0.442780 0.635930
+vt 0.442967 0.311134
+vt 0.443056 0.281620
+vt 0.228890 0.547350
+vt 0.228883 0.517823
+vt 0.442670 0.517822
+vt 0.443060 0.754024
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.370709 0.754396
+vt 0.370472 0.723575
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.792953 0.086670
+vt 0.789700 0.092175
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.687628 0.489885
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.370705 0.281246
+vt 0.371348 0.252525
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.228889 0.488295
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.176359 0.530816
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.371495 0.164423
+vt 0.177644 0.253134
+vt 0.177399 0.283987
+vt 0.006828 0.284020
+vt 0.176549 0.654233
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.443160 0.252098
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.442698 0.458768
+vt 0.228910 0.458769
+vt 0.228944 0.429242
+vt 0.442732 0.429241
+vt 0.228990 0.399716
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.228912 0.576877
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.371029 0.959797
+vt 0.443079 0.931196
+vt 0.442853 0.074922
+vt 0.371043 0.075847
+vt 0.370712 0.046322
+vt 0.371495 0.841694
+vt 0.443254 0.813086
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.763884 0.080481
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.808610 0.476251
+vt 0.805300 0.470133
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.006827 0.746834
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.632640 0.461897
+vt 0.442971 0.724510
+vt 0.006929 0.253167
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.442700 0.576876
+vt 0.176474 0.623379
+vt 0.006524 0.654271
+vt 0.006543 0.376583
+vt 0.229113 0.694984
+vt 0.442837 0.665456
+vt 0.007520 0.068042
+vt 0.371492 0.871219
+vt 0.443302 0.872141
+vt 0.689480 0.483245
+vt 0.443305 0.163503
+vt 0.371427 0.134897
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.442678 0.488295
+vt 0.777761 0.481894
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.636826 0.456466
+vt 0.579568 0.357437
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.007122 0.191458
+vt 0.812355 0.108585
+vt 0.582798 0.148853
+vt 0.589057 0.151745
+vt 0.007276 0.870250
+vt 0.007319 0.129750
+vt 0.006448 0.623417
+vt 0.886228 0.380492
+vt 0.879533 0.378395
+vt 0.442833 0.370188
+vt 0.370694 0.989321
+vt 0.442838 0.960722
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.599888 0.122511
+vt 0.676401 0.072253
+vt 0.443237 0.133976
+vt 0.443305 0.842613
+vt 0.867982 0.406513
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.892437 0.317355
+vt 0.442901 0.694984
+vt 0.006361 0.469146
+vt 0.007499 0.931958
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.006929 0.253167
+vt 0.007025 0.222313
+vt 0.177644 0.253134
+vt 0.442678 0.488295
+vt 0.228889 0.488295
+vt 0.228910 0.458769
+vt 0.442670 0.517822
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.689480 0.483245
+vt 0.718747 0.488548
+vt 0.687628 0.489885
+vt 0.371352 0.783117
+vt 0.370709 0.754396
+vt 0.443060 0.754024
+vt 0.442971 0.724510
+vt 0.370472 0.723575
+vt 0.228883 0.517823
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.892437 0.317355
+vt 0.885704 0.319257
+vt 0.879631 0.287703
+vt 0.586362 0.385333
+vt 0.579817 0.387126
+vt 0.579568 0.357437
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.748545 0.488099
+vt 0.749318 0.494983
+vt 0.718195 0.495436
+vt 0.836176 0.125250
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.319423 0.099941
+vt 0.319322 0.130795
+vt 0.007319 0.129750
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.007419 0.098896
+vt 0.763884 0.080481
+vt 0.765981 0.074365
+vt 0.789700 0.092175
+vt 0.443302 0.872141
+vt 0.442833 0.370188
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.319626 0.038233
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.808610 0.476251
+vt 0.779839 0.488518
+vt 0.777761 0.481894
+vt 0.176640 0.685087
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.371495 0.841694
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.006614 0.685125
+vt 0.006467 0.407437
+vt 0.006543 0.376583
+vt 0.176492 0.407399
+vt 0.892437 0.349226
+vt 0.886228 0.380492
+vt 0.885423 0.348954
+vt 0.599888 0.122511
+vt 0.605204 0.126737
+vt 0.589057 0.151745
+vt 0.443305 0.193031
+vt 0.443252 0.222558
+vt 0.371495 0.193949
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.610260 0.440534
+vt 0.735929 0.074111
+vt 0.736753 0.067631
+vt 0.442837 0.665456
+vt 0.229049 0.665457
+vt 0.442780 0.635930
+vt 0.006361 0.469146
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.598317 0.411848
+vt 0.592437 0.415287
+vt 0.442678 0.547349
+vt 0.228890 0.547350
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.371442 0.223476
+vt 0.442504 0.990249
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.621946 0.100560
+vt 0.647824 0.083609
+vt 0.626230 0.105756
+vt 0.371492 0.871219
+vt 0.615392 0.436018
+vt 0.442732 0.429241
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.007499 0.931958
+vt 0.879533 0.378395
+vt 0.867982 0.406513
+vt 0.572791 0.357181
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.371280 0.105372
+vt 0.442853 0.074922
+vt 0.443090 0.104449
+vt 0.371043 0.075847
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.578089 0.326242
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.319502 0.930776
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.792953 0.086670
+vt 0.816609 0.103895
+vt 0.812355 0.108585
+vt 0.176549 0.654233
+vt 0.650942 0.089526
+vt 0.006828 0.284020
+vt 0.177399 0.283987
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.571207 0.326153
+vt 0.006524 0.654271
+vt 0.442901 0.694984
+vt 0.229113 0.694984
+vt 0.007122 0.191458
+vt 0.831035 0.128981
+vt 0.006390 0.592562
+vt 0.176415 0.592525
+vt 0.006448 0.623417
+vt 0.805300 0.470133
+vt 0.228990 0.399716
+vt 0.582798 0.148853
+vt 0.176430 0.438254
+vt 0.886223 0.285996
+vt 0.706979 0.073452
+vt 0.706468 0.066881
+vt 0.176474 0.623379
+vt 0.229109 0.340661
+vt 0.834553 0.458608
+vt 0.676401 0.072253
+vt 0.228992 0.635930
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.443079 0.931196
+vt 0.442700 0.576876
+vt 0.176377 0.561671
+vt 0.228912 0.576877
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.370712 0.046322
+vt 0.830124 0.453224
+vt 0.007220 0.160604
+vt 0.370705 0.281246
+vt 0.176359 0.530816
+vt 0.443305 0.842613
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.442897 0.340661
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.319390 0.899923
+vt 0.678244 0.078632
+vt 0.006334 0.530854
+vt 0.006351 0.561708
+vt 0.856681 0.436209
+vt 0.443163 0.783546
+vt 0.007728 0.993666
+vt 0.007623 0.037188
+vt 0.007387 0.901104
+vt 0.319224 0.161649
+vt 0.442522 0.045396
+vt 0.006827 0.746834
+vt 0.007165 0.839396
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.319168 0.838215
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.006929 0.253167
+vt 0.007025 0.222313
+vt 0.177644 0.253134
+vt 0.442678 0.488295
+vt 0.228889 0.488295
+vt 0.228910 0.458769
+vt 0.442670 0.517822
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.689480 0.483245
+vt 0.718747 0.488548
+vt 0.687628 0.489885
+vt 0.371352 0.783117
+vt 0.370709 0.754396
+vt 0.443060 0.754024
+vt 0.442971 0.724510
+vt 0.370472 0.723575
+vt 0.228883 0.517823
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.892437 0.317355
+vt 0.885704 0.319257
+vt 0.879631 0.287703
+vt 0.586362 0.385333
+vt 0.579817 0.387126
+vt 0.579568 0.357437
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.748545 0.488099
+vt 0.749318 0.494983
+vt 0.718195 0.495436
+vt 0.836176 0.125250
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.319423 0.099941
+vt 0.319322 0.130795
+vt 0.007319 0.129750
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.007419 0.098896
+vt 0.763884 0.080481
+vt 0.765981 0.074365
+vt 0.789700 0.092175
+vt 0.443302 0.872141
+vt 0.442833 0.370188
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.319626 0.038233
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.808610 0.476251
+vt 0.779839 0.488518
+vt 0.777761 0.481894
+vt 0.176640 0.685087
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.371495 0.841694
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.006614 0.685125
+vt 0.006467 0.407437
+vt 0.006543 0.376583
+vt 0.176492 0.407399
+vt 0.892437 0.349226
+vt 0.886228 0.380492
+vt 0.885423 0.348954
+vt 0.599888 0.122511
+vt 0.605204 0.126737
+vt 0.589057 0.151745
+vt 0.443305 0.193031
+vt 0.443252 0.222558
+vt 0.371495 0.193949
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.610260 0.440534
+vt 0.735929 0.074111
+vt 0.736753 0.067631
+vt 0.442837 0.665456
+vt 0.229049 0.665457
+vt 0.442780 0.635930
+vt 0.006361 0.469146
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.598317 0.411848
+vt 0.592437 0.415287
+vt 0.442678 0.547349
+vt 0.228890 0.547350
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.371442 0.223476
+vt 0.442504 0.990249
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.621946 0.100560
+vt 0.647824 0.083609
+vt 0.626230 0.105756
+vt 0.371492 0.871219
+vt 0.615392 0.436018
+vt 0.442732 0.429241
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.007499 0.931958
+vt 0.879533 0.378395
+vt 0.867982 0.406513
+vt 0.572791 0.357181
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.371280 0.105372
+vt 0.442853 0.074922
+vt 0.443090 0.104449
+vt 0.371043 0.075847
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.578089 0.326242
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.319502 0.930776
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.792953 0.086670
+vt 0.816609 0.103895
+vt 0.812355 0.108585
+vt 0.176549 0.654233
+vt 0.650942 0.089526
+vt 0.006828 0.284020
+vt 0.177399 0.283987
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.571207 0.326153
+vt 0.006524 0.654271
+vt 0.442901 0.694984
+vt 0.229113 0.694984
+vt 0.007122 0.191458
+vt 0.831035 0.128981
+vt 0.006390 0.592562
+vt 0.176415 0.592525
+vt 0.006448 0.623417
+vt 0.805300 0.470133
+vt 0.228990 0.399716
+vt 0.582798 0.148853
+vt 0.176430 0.438254
+vt 0.886223 0.285996
+vt 0.706979 0.073452
+vt 0.706468 0.066881
+vt 0.176474 0.623379
+vt 0.229109 0.340661
+vt 0.834553 0.458608
+vt 0.676401 0.072253
+vt 0.228992 0.635930
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.443079 0.931196
+vt 0.442700 0.576876
+vt 0.176377 0.561671
+vt 0.228912 0.576877
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.370712 0.046322
+vt 0.830124 0.453224
+vt 0.007220 0.160604
+vt 0.370705 0.281246
+vt 0.176359 0.530816
+vt 0.443305 0.842613
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.442897 0.340661
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.319390 0.899923
+vt 0.678244 0.078632
+vt 0.006334 0.530854
+vt 0.006351 0.561708
+vt 0.856681 0.436209
+vt 0.443163 0.783546
+vt 0.007728 0.993666
+vt 0.007623 0.037188
+vt 0.007387 0.901104
+vt 0.319224 0.161649
+vt 0.442522 0.045396
+vt 0.006827 0.746834
+vt 0.007165 0.839396
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.319168 0.838215
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.874125 0.609201
+vt 0.817898 0.626255
+vt 0.670298 0.547363
+vt 0.653238 0.491123
+vt 0.732120 0.343530
+vt 0.846854 0.332224
+vt 0.935969 0.405357
+vt 0.953029 0.461597
+vt 0.759412 0.620495
+vt 0.732132 0.609195
+vt 0.658998 0.432637
+vt 0.686702 0.380807
+vt 0.759394 0.332230
+vt 0.898684 0.359926
+vt 0.919564 0.380805
+vt 0.947269 0.520085
+vt 0.919563 0.571916
+vt 0.846857 0.620495
+vt 0.788371 0.626255
+vt 0.707581 0.592792
+vt 0.686702 0.571913
+vt 0.658999 0.520082
+vt 0.653238 0.461596
+vt 0.670298 0.405358
+vt 0.707581 0.359928
+vt 0.788366 0.326464
+vt 0.817893 0.326463
+vt 0.874134 0.343522
+vt 0.947270 0.432638
+vt 0.953029 0.491125
+vt 0.935968 0.547365
+vt 0.898673 0.592803
+vt 0.214996 0.906316
+vt 0.198460 0.906317
+vt 0.182243 0.903091
+vt 0.281116 0.782613
+vt 0.290669 0.814108
+vt 0.246483 0.896766
+vt 0.231211 0.741659
+vt 0.182233 0.741662
+vt 0.198458 0.738433
+vt 0.126012 0.797890
+vt 0.141526 0.768865
+vt 0.166960 0.747990
+vt 0.271928 0.875886
+vt 0.260230 0.887583
+vt 0.214993 0.738433
+vt 0.260236 0.757172
+vt 0.271928 0.768865
+vt 0.122786 0.830643
+vt 0.290669 0.830644
+vt 0.287443 0.846861
+vt 0.287444 0.797891
+vt 0.132340 0.862137
+vt 0.166967 0.896763
+vt 0.153218 0.887577
+vt 0.141526 0.875885
+vt 0.132339 0.782614
+vt 0.281115 0.862138
+vt 0.126012 0.846860
+vt 0.153218 0.757173
+vt 0.246487 0.747986
+vt 0.231212 0.903091
+vt 0.122786 0.814107
+vt 0.305766 0.603342
+vt 0.249539 0.620395
+vt 0.101939 0.541503
+vt 0.084879 0.485264
+vt 0.163760 0.337671
+vt 0.278494 0.326364
+vt 0.367610 0.399497
+vt 0.384670 0.455738
+vt 0.191052 0.614636
+vt 0.163773 0.603336
+vt 0.090639 0.426777
+vt 0.118343 0.374948
+vt 0.191035 0.326370
+vt 0.330325 0.354067
+vt 0.351205 0.374946
+vt 0.378909 0.514226
+vt 0.351204 0.566056
+vt 0.278498 0.614635
+vt 0.220011 0.620396
+vt 0.139222 0.586933
+vt 0.118343 0.566054
+vt 0.090640 0.514223
+vt 0.084879 0.455737
+vt 0.101938 0.399499
+vt 0.139222 0.354069
+vt 0.220007 0.320605
+vt 0.249534 0.320604
+vt 0.305774 0.337663
+vt 0.378910 0.426778
+vt 0.384670 0.485266
+vt 0.367609 0.541505
+vt 0.330314 0.586943
+vt 0.103870 0.076834
+vt 0.115562 0.065142
+vt 0.129303 0.055959
+vt 0.094683 0.170106
+vt 0.129310 0.204732
+vt 0.115562 0.195546
+vt 0.208826 0.204735
+vt 0.177339 0.214285
+vt 0.088356 0.154828
+vt 0.085130 0.138611
+vt 0.085130 0.122076
+vt 0.088355 0.105859
+vt 0.160804 0.214285
+vt 0.144587 0.211060
+vt 0.193554 0.049628
+vt 0.208831 0.055955
+vt 0.222579 0.065141
+vt 0.243459 0.090582
+vt 0.249787 0.105860
+vt 0.253013 0.122077
+vt 0.234272 0.183855
+vt 0.222573 0.195552
+vt 0.144577 0.049631
+vt 0.160801 0.046402
+vt 0.193556 0.211059
+vt 0.249787 0.154830
+vt 0.177337 0.046402
+vt 0.234272 0.076833
+vt 0.243459 0.170107
+vt 0.094683 0.090583
+vt 0.103870 0.183854
+vt 0.253013 0.138613
+vt 0.606547 0.945139
+vt 0.550320 0.962192
+vt 0.402720 0.883300
+vt 0.385660 0.827061
+vt 0.464542 0.679467
+vt 0.579275 0.668161
+vt 0.668391 0.741294
+vt 0.685451 0.797535
+vt 0.491833 0.956433
+vt 0.464554 0.945133
+vt 0.391420 0.768574
+vt 0.419124 0.716744
+vt 0.491816 0.668167
+vt 0.631106 0.695864
+vt 0.651986 0.716743
+vt 0.679690 0.856022
+vt 0.651985 0.907853
+vt 0.579279 0.956432
+vt 0.520792 0.962193
+vt 0.440003 0.928729
+vt 0.419124 0.907851
+vt 0.391421 0.856020
+vt 0.385660 0.797533
+vt 0.402719 0.741295
+vt 0.440003 0.695865
+vt 0.520788 0.662401
+vt 0.550315 0.662401
+vt 0.606555 0.679459
+vt 0.679692 0.768575
+vt 0.685451 0.827063
+vt 0.668390 0.883302
+vt 0.631095 0.928740
+vt 0.443713 0.231131
+vt 0.455405 0.219439
+vt 0.469147 0.210256
+vt 0.434527 0.324402
+vt 0.469154 0.359029
+vt 0.455406 0.349843
+vt 0.548670 0.359032
+vt 0.517183 0.368582
+vt 0.428200 0.309125
+vt 0.424973 0.292908
+vt 0.424973 0.276373
+vt 0.428199 0.260156
+vt 0.500648 0.368582
+vt 0.484431 0.365357
+vt 0.533398 0.203925
+vt 0.548675 0.210252
+vt 0.562423 0.219438
+vt 0.583303 0.244879
+vt 0.589631 0.260156
+vt 0.592857 0.276374
+vt 0.574115 0.338152
+vt 0.562417 0.349849
+vt 0.484421 0.203928
+vt 0.500645 0.200699
+vt 0.533400 0.365356
+vt 0.589630 0.309127
+vt 0.517180 0.200699
+vt 0.574116 0.231130
+vt 0.583302 0.324403
+vt 0.434527 0.244880
+vt 0.443713 0.338151
+vt 0.592857 0.292910
+vn -1.0000 0.0000 -0.0007
+vn 1.0000 0.0000 0.0007
+vn 0.0007 0.0000 -1.0000
+vn -0.0007 0.0000 1.0000
+vn 0.0000 -1.0000 -0.0000
+vn 0.0000 1.0000 0.0000
+vn -0.0945 -0.9955 -0.0070
+vn 0.9955 -0.0946 -0.0012
+vn -0.9948 -0.1015 -0.0028
+vn -0.9955 0.0944 0.0018
+vn 0.9948 0.1014 0.0034
+vn -0.9955 0.0945 0.0001
+vn 0.9948 0.1015 0.0015
+vn 0.9955 -0.0945 -0.0001
+vn -0.9948 -0.1015 -0.0015
+vn 0.7707 0.6370 0.0137
+vn 0.0087 0.0090 -0.9999
+vn 0.0030 0.0066 -1.0000
+vn 0.0012 0.0099 -0.9999
+vn -0.0017 0.0090 -1.0000
+vn 0.0021 0.0095 -1.0000
+vn 0.0030 0.0054 -1.0000
+vn -0.0023 0.0081 -1.0000
+vn 0.0001 0.0101 -0.9999
+vn 0.0031 0.0076 -1.0000
+vn -0.0007 0.0094 -1.0000
+vn 0.0028 0.0087 -1.0000
+vn -0.0024 0.0070 -1.0000
+vn -0.0021 0.0059 -1.0000
+vn 0.0025 0.0057 -1.0000
+vn -0.0012 0.0002 -1.0000
+vn -0.0023 -0.0134 -0.9999
+vn -0.0041 -0.0144 -0.9999
+vn 0.1826 -0.9600 -0.2122
+vn 0.0096 0.0120 -0.9999
+vn -0.0081 0.0119 -0.9999
+vn 0.0092 0.0151 -0.9998
+vn 0.0077 0.0179 -0.9998
+vn 0.0052 0.0199 -0.9998
+vn -0.0009 0.0208 -0.9998
+vn -0.0040 0.0198 -0.9998
+vn -0.0064 0.0178 -0.9998
+vn -0.0079 0.0150 -0.9999
+vn -0.3614 -0.9098 -0.2042
+vn -0.0072 0.0089 -0.9999
+vn -0.0056 0.0056 -1.0000
+vn 0.9958 -0.0921 -0.0002
+vn -0.6371 0.7708 0.0030
+vn 0.6317 0.7752 0.0039
+vn -0.7708 -0.6371 -0.0049
+vn 0.4683 0.8835 0.0043
+vn -0.2869 -0.9579 -0.0081
+vn -0.2869 -0.9579 -0.0068
+vn 0.0945 0.9955 0.0045
+vn 0.1015 -0.9948 -0.0068
+vn 0.2869 0.9579 0.0045
+vn 0.4745 -0.8802 -0.0058
+vn 0.6371 -0.7708 -0.0049
+vn -0.8803 -0.4745 -0.0039
+vn 0.8836 -0.4683 -0.0026
+vn 0.9551 -0.2963 -0.0014
+vn -0.9951 -0.0990 -0.0017
+vn -0.9948 0.1021 -0.0012
+vn 0.8802 0.4745 0.0104
+vn 0.0022 0.0208 -0.9998
+vn 0.9554 0.2954 0.0060
+vn 0.0015 -0.0002 -1.0000
+vn 0.6316 0.7751 0.0164
+vn 0.4682 0.8834 0.0185
+vn 0.7708 0.6371 0.0034
+vn -0.4683 -0.8835 -0.0076
+vn -0.2936 0.9557 0.0195
+vn -0.4744 0.8801 0.0178
+vn -0.6370 0.7707 0.0154
+vn -0.7752 0.6316 0.0125
+vn -0.8835 0.4683 0.0090
+vn -0.9574 0.2887 0.0045
+vn 0.9940 0.1091 0.0003
+vn -0.7708 -0.6371 -0.0058
+vn -0.6317 -0.7752 -0.0068
+vn 0.8803 0.4745 0.0027
+vn 0.0945 0.9953 0.0206
+vn 0.7752 -0.6317 -0.0038
+vn -0.4683 -0.8835 -0.0064
+vn -0.0945 -0.9955 -0.0082
+vn -0.1015 0.9948 0.0044
+vn -0.2936 0.9559 0.0041
+vn -0.4745 0.8803 0.0036
+vn -0.9529 -0.3032 -0.0028
+vn -0.7752 0.6317 0.0023
+vn -0.8836 0.4683 0.0015
+vn -0.9562 0.2927 0.0006
+vn 0.9955 -0.0946 -0.0001
+vn 0.2869 0.9578 0.0199
+vn -0.9559 -0.2936 -0.0031
+vn -0.8803 -0.4745 -0.0045
+vn 0.9559 0.2936 0.0031
+vn -0.1015 0.9946 0.0204
+vn -0.6317 -0.7752 -0.0058
+vn 0.2936 -0.9559 -0.0064
+vn 0.1015 -0.9948 -0.0081
+vn 0.2936 -0.9559 -0.0076
+vn 0.4745 -0.8802 -0.0069
+vn 0.6371 -0.7708 -0.0059
+vn 0.7752 -0.6317 -0.0046
+vn 0.8836 -0.4683 -0.0032
+vn 0.9580 -0.2869 -0.0017
+vn 0.0198 0.0217 -0.9996
+vn -0.8803 -0.4745 -0.0022
+vn 0.9554 0.2954 0.0029
+vn 0.9955 -0.0946 0.0004
+vn 0.8803 0.4745 0.0015
+vn -0.6317 -0.7752 -0.0031
+vn -0.9529 -0.3032 -0.0015
+vn -0.2936 0.9559 0.0016
+vn -0.6371 0.7708 0.0010
+vn -0.0199 0.0363 -0.9991
+vn 0.0945 0.9955 0.0019
+vn 0.7752 -0.6317 -0.0013
+vn -0.9948 -0.1015 -0.0016
+vn 0.1015 -0.9948 -0.0028
+vn 0.9948 0.1014 0.0018
+vn -0.8836 0.4683 0.0002
+vn 0.9958 -0.0921 0.0003
+vn -0.0051 0.0218 -0.9998
+vn 0.0058 0.0210 -0.9998
+vn 0.0117 0.0479 -0.9988
+vn -0.0033 0.0503 -0.9987
+vn -0.9948 0.1021 -0.0009
+vn 0.6371 -0.7708 -0.0018
+vn -0.0945 -0.9955 -0.0029
+vn 0.0062 0.0131 -0.9999
+vn -0.0945 -0.9955 -0.0034
+vn -0.0110 -0.0348 -0.9993
+vn 0.0019 0.0241 -0.9997
+vn -0.7752 0.6317 0.0048
+vn -0.9955 0.0945 -0.0004
+vn 0.7752 -0.6317 -0.0016
+vn -0.9955 0.0944 0.0004
+vn 0.4683 0.8835 0.0078
+vn 0.0062 0.0160 -0.9999
+vn -0.0066 0.0195 -0.9998
+vn -0.4683 -0.8836 -0.0029
+vn -0.6317 -0.7752 -0.0027
+vn 0.0044 0.0503 -0.9987
+vn -0.0206 0.0287 -0.9994
+vn 0.2936 -0.9559 -0.0025
+vn 0.1015 -0.9948 -0.0033
+vn 0.0052 0.0138 -0.9999
+vn 0.2870 0.9579 0.0084
+vn -0.1015 0.9948 0.0084
+vn 0.8803 0.4745 0.0047
+vn -0.8836 0.4683 0.0034
+vn 0.0041 0.0230 -0.9997
+vn -0.2936 0.9559 0.0079
+vn -0.0164 0.0430 -0.9989
+vn -0.9948 -0.1015 -0.0010
+vn 0.2870 0.9579 0.0020
+vn 0.9955 -0.0945 0.0004
+vn 0.8836 -0.4683 -0.0010
+vn 0.0213 0.0366 -0.9991
+vn 0.9940 0.1091 0.0005
+vn -0.0037 0.0004 -1.0000
+vn -0.7708 -0.6371 -0.0024
+vn -0.9951 -0.0990 -0.0011
+vn 0.4745 -0.8803 -0.0022
+vn 0.6371 -0.7708 -0.0022
+vn -0.7708 -0.6371 -0.0027
+vn 0.8836 -0.4683 -0.0007
+vn -0.1015 0.9948 0.0018
+vn 0.6317 0.7752 0.0070
+vn -0.9562 0.2927 -0.0001
+vn 0.0176 0.0433 -0.9989
+vn -0.6371 0.7708 0.0061
+vn 0.9559 0.2936 0.0017
+vn -0.2870 -0.9579 -0.0029
+vn -0.0106 0.0479 -0.9988
+vn -0.3679 -0.9259 -0.0861
+vn 0.9580 -0.2869 -0.0003
+vn 0.0222 0.0291 -0.9993
+vn -0.0067 -0.0324 -0.9995
+vn 0.6317 0.7752 0.0019
+vn 0.2936 -0.9559 -0.0030
+vn -0.7752 0.6317 0.0006
+vn -0.9559 -0.2936 -0.0017
+vn 0.9948 0.1015 0.0010
+vn 0.0065 0.0185 -0.9998
+vn -0.0060 0.0143 -0.9999
+vn 0.7708 0.6371 0.0017
+vn -0.4745 0.8803 0.0013
+vn 0.4745 -0.8803 -0.0027
+vn -0.0144 0.0136 -0.9998
+vn -0.8803 -0.4745 -0.0020
+vn 0.0945 0.9955 0.0085
+vn 0.1860 -0.9785 -0.0894
+vn -0.0068 0.0169 -0.9998
+vn -0.0028 0.0228 -0.9997
+vn -0.4745 0.8802 0.0072
+vn 0.7708 0.6370 0.0060
+vn -0.0183 0.0215 -0.9996
+vn -0.4683 -0.8836 -0.0033
+vn -0.9574 0.2887 0.0015
+vn 0.0026 -0.0005 -1.0000
+vn 0.9551 -0.2963 -0.0002
+vn -0.2870 -0.9579 -0.0034
+vn 0.4683 0.8836 0.0020
+vn -0.0007 0.0244 -0.9997
+vn -0.0946 -0.9955 -0.0070
+vn 0.7708 0.6370 0.0137
+vn 0.0064 0.0070 -1.0000
+vn 0.0038 0.0070 -1.0000
+vn 0.0012 0.0101 -0.9999
+vn -0.0015 0.0087 -1.0000
+vn 0.0023 0.0097 -1.0000
+vn 0.0070 0.0057 -1.0000
+vn -0.0017 0.0076 -1.0000
+vn 0.0002 0.0100 -1.0000
+vn 0.0037 0.0081 -1.0000
+vn -0.0009 0.0097 -1.0000
+vn 0.0031 0.0091 -1.0000
+vn -0.0016 0.0066 -1.0000
+vn -0.0011 0.0057 -1.0000
+vn 0.0034 0.0060 -1.0000
+vn 0.0000 -0.0002 -1.0000
+vn 0.0057 -0.0144 -0.9999
+vn 0.0039 -0.0134 -0.9999
+vn 0.3681 -0.9072 -0.2037
+vn 0.0080 0.0100 -0.9999
+vn -0.0065 0.0098 -0.9999
+vn 0.0083 0.0133 -0.9999
+vn 0.0073 0.0164 -0.9998
+vn 0.0052 0.0189 -0.9998
+vn -0.0010 0.0204 -0.9998
+vn -0.0039 0.0188 -0.9998
+vn -0.0059 0.0163 -0.9998
+vn -0.0069 0.0131 -0.9999
+vn -0.1756 -0.9613 -0.2124
+vn -0.0049 0.0070 -1.0000
+vn -0.0015 0.0053 -1.0000
+vn 0.4683 0.8836 0.0043
+vn 0.9579 -0.2869 -0.0052
+vn 0.8803 0.4744 0.0104
+vn 0.0023 0.0204 -0.9998
+vn 0.9559 0.2935 0.0067
+vn 0.0026 0.0002 -1.0000
+vn 0.4683 0.8834 0.0185
+vn -0.6371 0.7706 0.0154
+vn -0.8836 0.4682 0.0090
+vn -0.9580 0.2868 0.0053
+vn -0.9559 -0.2936 -0.0067
+vn -0.9579 0.2869 0.0017
+vn 0.2869 0.9577 0.0199
+vn 0.9541 0.2995 0.0020
+vn 0.0086 0.0090 -0.9999
+vn -0.0018 0.0090 -1.0000
+vn -0.0020 0.0059 -1.0000
+vn -0.0011 0.0002 -1.0000
+vn 0.1825 -0.9600 -0.2122
+vn -0.0039 0.0198 -0.9998
+vn -0.0078 0.0150 -0.9999
+vn 0.0014 -0.0002 -1.0000
+vn 0.0037 0.0070 -1.0000
+vn -0.0014 0.0086 -1.0000
+vn -0.0010 0.0097 -1.0000
+vn -0.0012 0.0057 -1.0000
+vn 0.0035 0.0060 -1.0000
+vn 0.0058 -0.0144 -0.9999
+vn -0.0065 0.0099 -0.9999
+vn -0.0060 0.0163 -0.9998
+vn -0.0050 0.0070 -1.0000
+vn 0.8802 0.4744 0.0104
+vn -0.0946 -0.9955 -0.0029
+vn 0.0144 0.0170 -0.9998
+vn 0.0082 0.0169 -0.9998
+vn 0.0020 0.0244 -0.9997
+vn -0.0045 0.0210 -0.9998
+vn 0.0046 0.0236 -0.9997
+vn 0.0159 0.0138 -0.9998
+vn -0.0052 0.0185 -0.9998
+vn -0.0006 0.0241 -0.9997
+vn 0.0080 0.0196 -0.9998
+vn -0.0033 0.0236 -0.9997
+vn 0.0067 0.0219 -0.9997
+vn -0.0049 0.0159 -0.9999
+vn -0.0037 0.0137 -0.9999
+vn 0.0073 0.0144 -0.9999
+vn -0.0009 -0.0005 -1.0000
+vn 0.0130 -0.0347 -0.9993
+vn 0.0083 -0.0323 -0.9994
+vn 0.3745 -0.9232 -0.0856
+vn 0.0183 0.0241 -0.9995
+vn -0.0168 0.0238 -0.9996
+vn 0.0190 0.0321 -0.9993
+vn 0.0166 0.0396 -0.9991
+vn 0.0115 0.0458 -0.9989
+vn -0.0034 0.0494 -0.9988
+vn -0.0103 0.0455 -0.9989
+vn -0.0153 0.0394 -0.9991
+vn -0.0176 0.0317 -0.9993
+vn -0.1790 -0.9798 -0.0896
+vn -0.0130 0.0169 -0.9998
+vn -0.0046 0.0129 -0.9999
+vn -0.2869 -0.9579 -0.0029
+vn 0.2869 0.9579 0.0020
+vn 0.9580 -0.2869 -0.0018
+vn 0.8803 0.4744 0.0047
+vn 0.0045 0.0493 -0.9988
+vn 0.9559 0.2935 0.0032
+vn 0.0053 0.0005 -1.0000
+vn 0.4683 0.8835 0.0079
+vn -0.2937 0.9559 0.0079
+vn -0.6371 0.7707 0.0061
+vn -0.7752 0.6316 0.0048
+vn -0.9580 0.2868 0.0018
+vn 0.0946 0.9955 0.0085
+vn -0.9580 0.2869 0.0003
+vn 0.9541 0.2995 0.0012
+vn -0.9579 0.2869 0.0003
+vn 0.0115 0.0457 -0.9989
+vn 0.9940 0.1090 0.0005
+vn 0.0129 -0.0347 -0.9993
+vn 0.0221 0.0291 -0.9993
+vn 0.0182 0.0241 -0.9995
+vn 0.0074 0.0144 -0.9999
+vn 0.0199 0.0217 -0.9996
+vn -0.4683 -0.8835 -0.0029
+vn 0.1859 -0.9785 -0.0894
+vn 0.4745 -0.8802 -0.0022
+vn 0.7708 0.6371 0.0060
+vn 0.0081 0.0169 -0.9998
+vn 0.3745 -0.9233 -0.0856
+vn 0.0061 0.0131 -0.9999
+vn 0.0029 0.0054 -1.0000
+vn -0.0008 0.0094 -1.0000
+vn -0.0024 -0.0134 -0.9999
+vn -0.0055 0.0056 -1.0000
+vn 0.0013 0.0101 -0.9999
+vn -0.0014 0.0087 -1.0000
+vn 0.0022 0.0097 -1.0000
+vn 0.0001 0.0100 -1.0000
+vn 0.0032 0.0091 -1.0000
+vn -0.2870 -0.9579 -0.0081
+vn 0.0025 -0.0005 -1.0000
+vn 0.0051 0.0138 -0.9999
+vn 0.0066 0.0219 -0.9997
+vn -0.0105 0.0479 -0.9988
+vn 0.0220 0.0291 -0.9993
+vn 0.0045 0.0236 -0.9997
+vn 0.0045 0.0494 -0.9988
+vn 0.0158 0.0138 -0.9998
+vn 0.0042 0.0230 -0.9997
+vn -0.0045 0.0209 -0.9998
+vn -0.0131 0.0169 -0.9998
+vn -0.0066 -0.0324 -0.9995
+vn -0.0010 -0.0005 -1.0000
+vn 0.0117 0.0480 -0.9988
+vn -0.0052 0.0218 -0.9997
+vn -0.0038 0.0004 -1.0000
+vn -0.0051 0.0159 -0.9999
+vn -0.0154 0.0394 -0.9991
+vn 0.0079 0.0196 -0.9998
+vn 0.0145 0.0170 -0.9997
+vn 0.0084 -0.0323 -0.9994
+vn 0.0080 0.0169 -0.9998
+vn 0.0063 0.0160 -0.9999
+vn 0.0054 0.0005 -1.0000
+vn -0.3678 -0.9259 -0.0861
+vn -0.0032 0.0236 -0.9997
+vn -0.0185 0.0215 -0.9996
+vn -0.0065 0.0195 -0.9998
+vn 0.0059 0.0210 -0.9998
+vn 0.0007 0.0044 -1.0000
+vn 0.0007 0.0045 -1.0000
+vn 0.0007 0.0040 -1.0000
+vn 0.0004 0.0041 -1.0000
+vn 0.0008 0.0044 -1.0000
+vn 0.0006 0.0045 -1.0000
+vn 0.0007 0.0046 -1.0000
+vn 0.0008 0.0045 -1.0000
+vn 0.0010 0.0038 -1.0000
+vn 0.0006 0.0040 -1.0000
+vn 0.0007 0.0039 -1.0000
+vn 0.0007 0.0041 -1.0000
+vn 0.0019 0.0042 -1.0000
+vn 0.0008 0.0043 -1.0000
+vn 0.0005 0.0109 -0.9999
+vn 0.0007 0.0096 -1.0000
+vn 0.0013 0.0092 -1.0000
+vn 0.0006 0.0107 -0.9999
+vn 0.0036 0.0102 -0.9999
+vn 0.0007 0.0097 -1.0000
+vn 0.0007 0.0108 -0.9999
+vn 0.0008 0.0099 -1.0000
+vn 0.0007 0.0109 -0.9999
+vn 0.0007 0.0107 -0.9999
+vn 0.0009 0.0108 -0.9999
+vn 0.0007 0.0111 -0.9999
+vn 0.0008 0.0108 -0.9999
+vn 0.0000 0.0099 -1.0000
+vn 0.0007 0.0095 -1.0000
+vn 0.0010 0.0107 -0.9999
+vn 0.0010 0.0104 -0.9999
+vn 0.0018 0.0042 -1.0000
+vn -0.0001 0.0099 -1.0000
+vn 0.0008 0.0096 -1.0000
+vn 0.0035 0.0102 -0.9999
+vn 0.0006 0.0097 -1.0000
+vn 0.0006 0.0096 -1.0000
+vn 0.0006 0.0044 -1.0000
+vn 0.0009 0.0038 -1.0000
+vn 0.0008 0.0040 -1.0000
+vn 0.0008 0.0111 -0.9999
+vn 0.0006 0.0109 -0.9999
+vn 0.0037 0.0102 -0.9999
+vn 0.0009 0.0107 -0.9999
+vn 0.0005 0.0108 -0.9999
+vn 0.0009 0.0096 -1.0000
+g KsHauptsignal_Plane.006_Mast
+usemtl Mast
+s off
+f 13/1/1 12/2/1 11/3/1 14/4/1
+f 9/5/2 16/6/2 15/7/2 10/8/2
+f 16/9/3 13/10/3 14/11/3 15/12/3
+f 12/13/4 9/14/4 10/15/4 11/16/4
+f 21/17/4 20/18/4 19/19/4 22/20/4
+f 24/21/1 21/22/1 22/23/1 23/24/1
+f 20/25/2 17/26/2 18/27/2 19/28/2
+f 24/21/1 23/24/1 11/3/1 12/2/1
+f 17/29/5 24/30/5 12/31/5 9/32/5
+f 18/27/2 17/26/2 9/5/2 10/8/2
+f 23/33/6 18/34/6 10/35/6 11/36/6
+f 19/37/6 18/34/6 23/33/6 22/38/6
+f 11/36/6 10/35/6 15/39/6 14/40/6
+f 3/41/1 2/42/1 12/2/1 13/1/1
+f 1/43/2 4/44/2 16/6/2 9/5/2
+f 4/45/3 3/46/3 13/10/3 16/9/3
+f 2/47/4 1/48/4 9/14/4 12/13/4
+f 7/49/4 6/50/4 20/18/4 21/17/4
+f 5/51/3 8/52/3 24/53/3 17/54/3
+f 8/55/1 7/56/1 21/22/1 24/21/1
+f 6/57/2 5/58/2 17/26/2 20/25/2
+f 800/59/6 797/60/6 793/61/6 794/62/6
+f 804/63/1 806/64/1 812/65/1 813/66/1
+f 813/66/1 812/65/1 811/67/1 814/68/1
+f 808/69/2 803/70/2 816/71/2 809/72/2
+f 809/72/2 816/71/2 815/73/2 810/74/2
+f 803/75/3 804/63/3 813/66/3 816/76/3
+f 816/76/3 813/66/3 814/68/3 815/77/3
+f 806/78/4 808/79/4 809/80/4 812/81/4
+f 812/81/4 809/80/4 810/82/4 811/83/4
+f 801/84/4 802/85/4 820/86/4 821/87/4
+f 821/87/4 820/86/4 819/88/4 822/89/4
+f 807/90/3 805/91/3 824/92/3 817/93/3
+f 805/94/1 801/95/1 821/96/1 824/97/1
+f 824/97/1 821/96/1 822/98/1 823/99/1
+f 802/100/2 807/101/2 817/102/2 820/103/2
+f 820/103/2 817/102/2 818/104/2 819/105/2
+f 824/97/1 823/99/1 811/67/1 812/65/1
+f 817/106/5 824/107/5 812/108/5 809/109/5
+f 818/104/2 817/102/2 809/72/2 810/74/2
+f 823/110/6 818/111/6 810/112/6 811/113/6
+f 819/114/6 818/111/6 823/110/6 822/115/6
+f 811/113/6 810/112/6 815/116/6 814/117/6
+f 832/118/6 829/119/6 825/120/6 826/121/6
+f 836/122/1 838/123/1 844/124/1 845/125/1
+f 845/125/1 844/124/1 843/126/1 846/127/1
+f 840/128/2 835/129/2 848/130/2 841/131/2
+f 841/131/2 848/130/2 847/132/2 842/133/2
+f 835/134/3 836/135/3 845/136/3 848/137/3
+f 848/137/3 845/136/3 846/138/3 847/139/3
+f 838/140/4 840/141/4 841/142/4 844/143/4
+f 844/143/4 841/142/4 842/144/4 843/145/4
+f 833/146/4 834/147/4 852/148/4 853/149/4
+f 853/149/4 852/148/4 851/150/4 854/151/4
+f 839/152/3 837/153/3 856/154/3 849/155/3
+f 837/156/1 833/157/1 853/158/1 856/159/1
+f 856/159/1 853/158/1 854/160/1 855/161/1
+f 834/162/2 839/163/2 849/164/2 852/165/2
+f 852/165/2 849/164/2 850/166/2 851/167/2
+f 856/159/1 855/161/1 843/126/1 844/124/1
+f 849/168/5 856/169/5 844/170/5 841/171/5
+f 850/166/2 849/164/2 841/131/2 842/133/2
+f 855/172/6 850/173/6 842/174/6 843/175/6
+f 851/176/6 850/173/6 855/172/6 854/177/6
+f 843/175/6 842/174/6 847/178/6 846/179/6
+g KsHauptsignal_Plane.006_Schirm
+usemtl Schirm
+f 857/180/3 858/181/3 860/182/3 859/183/3
+f 862/184/4 861/185/4 864/186/4 863/187/4
+f 859/188/2 861/189/2 862/190/2 857/191/2
+f 860/192/6 864/193/6 861/194/6 859/195/6
+f 857/196/5 862/197/5 863/198/5 858/199/5
+f 858/200/1 863/201/1 864/202/1 860/203/1
+g KsHauptsignal_Plane.006_Lampenrahmen
+usemtl Lampenrahmen
+f 40/204/7 39/205/7 41/206/7
+f 26/207/8 88/208/8 25/209/8
+f 54/210/9 53/211/9 56/212/9
+f 58/213/10 56/212/10 57/214/10
+f 86/215/11 85/216/11 88/208/11
+f 90/217/12 89/218/12 152/219/12
+f 118/220/13 120/221/13 117/222/13
+f 122/223/14 121/224/14 120/221/14
+f 150/225/15 152/219/15 149/226/15
+f 79/227/16 81/228/16 82/229/16
+f 81/230/17 145/231/17 147/232/17
+f 111/233/18 113/234/18 49/235/18
+f 103/236/19 105/237/19 41/238/19
+f 99/239/20 35/240/20 33/241/20
+f 105/237/21 107/242/21 43/243/21
+f 147/232/22 149/244/22 85/245/22
+f 97/246/23 33/241/23 31/247/23
+f 103/236/24 39/248/24 37/249/24
+f 109/250/25 111/233/25 47/251/25
+f 35/240/26 99/239/26 101/252/26
+f 107/242/27 109/250/27 45/253/27
+f 95/254/28 31/247/28 29/255/28
+f 93/256/29 29/255/29 27/257/29
+f 113/234/30 115/258/30 51/259/30
+f 151/260/31 89/261/31 25/262/31
+f 149/244/32 151/260/32 87/263/32
+f 121/264/33 57/265/33 55/266/33
+f 115/258/34 117/267/34 53/268/34
+f 79/269/35 143/270/35 145/231/35
+f 125/271/36 127/272/36 63/273/36
+f 77/274/37 141/275/37 143/270/37
+f 75/276/38 139/277/38 141/275/38
+f 73/278/39 137/279/39 139/277/39
+f 133/280/40 135/281/40 71/282/40
+f 131/283/41 133/280/41 69/284/41
+f 129/285/42 131/283/42 67/286/42
+f 127/272/43 129/285/43 65/287/43
+f 91/288/44 27/257/44 25/262/44
+f 123/289/45 125/271/45 61/290/45
+f 123/289/46 59/291/46 57/265/46
+f 88/208/47 87/292/47 25/209/47
+f 97/293/48 95/294/48 96/295/48
+f 112/296/49 111/297/49 109/298/49
+f 48/299/50 47/300/50 49/301/50
+f 110/302/51 109/298/51 107/303/51
+f 140/304/52 139/305/52 137/306/52
+f 42/307/53 41/206/53 43/308/53
+f 106/309/54 105/310/54 103/311/54
+f 37/312/55 39/205/55 40/204/55
+f 108/313/56 107/303/56 105/314/56
+f 33/315/57 35/316/57 36/317/57
+f 31/318/58 33/315/58 34/319/58
+f 50/320/59 49/301/59 51/321/59
+f 27/322/60 29/323/60 30/324/60
+f 25/209/61 27/322/61 28/325/61
+f 53/211/62 55/326/62 56/212/62
+f 56/212/63 55/326/63 57/214/63
+f 81/228/64 83/327/64 84/328/64
+f 71/282/65 135/281/65 137/279/65
+f 83/327/66 85/216/66 86/215/66
+f 119/329/67 55/266/67 53/268/67
+f 77/330/68 79/227/68 80/331/68
+f 75/332/69 77/330/69 78/333/69
+f 114/334/70 113/335/70 111/297/70
+f 142/336/71 141/337/71 139/305/71
+f 68/338/72 67/339/72 69/340/72
+f 66/341/73 65/342/73 67/339/73
+f 64/343/74 63/344/74 65/342/74
+f 62/345/75 61/346/75 63/344/75
+f 60/347/76 59/348/76 61/346/76
+f 58/213/77 57/214/77 59/348/77
+f 85/216/78 87/292/78 88/208/78
+f 89/218/12 151/349/12 152/219/12
+f 146/350/79 145/351/79 143/352/79
+f 144/353/80 143/352/80 141/337/80
+f 116/354/81 115/355/81 113/335/81
+f 71/356/82 73/357/82 74/358/82
+f 29/323/83 31/318/83 32/359/83
+f 44/360/84 43/308/84 45/361/84
+f 138/362/85 137/306/85 135/363/85
+f 103/311/86 101/364/86 102/365/86
+f 101/364/87 99/366/87 100/367/87
+f 99/366/88 97/293/88 98/368/88
+f 52/369/89 51/321/89 53/211/89
+f 95/294/90 93/370/90 94/371/90
+f 93/370/91 91/372/91 92/373/91
+f 92/373/92 91/372/92 89/218/92
+f 120/221/13 119/374/13 117/222/13
+f 121/224/93 119/374/93 120/221/93
+f 73/357/94 75/332/94 76/375/94
+f 150/225/95 149/226/95 147/376/95
+f 148/377/96 147/376/96 145/351/96
+f 116/354/97 118/220/97 117/222/97
+f 70/378/98 69/340/98 71/379/98
+f 46/380/99 45/361/99 47/300/99
+f 35/316/100 37/312/100 38/381/100
+f 135/363/101 133/382/101 134/383/101
+f 133/382/102 131/384/102 132/385/102
+f 131/384/103 129/386/103 130/387/103
+f 129/386/104 127/388/104 128/389/104
+f 127/388/105 125/390/105 126/391/105
+f 125/390/106 123/392/106 124/393/106
+f 123/392/107 121/224/107 122/223/107
+f 152/219/15 151/349/15 149/226/15
+f 209/394/108 273/395/108 275/396/108
+f 276/397/109 275/398/109 273/399/109
+f 211/400/110 213/401/110 214/402/110
+f 249/403/111 247/404/111 248/405/111
+f 244/406/112 243/407/112 241/408/112
+f 272/409/113 271/410/113 269/411/113
+f 180/412/114 179/413/114 181/414/114
+f 229/415/115 227/416/115 228/417/115
+f 225/418/116 223/419/116 224/420/116
+f 255/421/117 257/422/117 193/423/117
+f 234/424/118 233/425/118 231/426/118
+f 157/427/119 159/428/119 160/429/119
+f 182/430/120 181/414/120 184/431/120
+f 165/432/121 167/433/121 168/434/121
+f 214/402/122 213/401/122 216/435/122
+f 221/436/123 219/437/123 220/438/123
+f 216/435/124 215/439/124 153/440/124
+f 227/441/125 163/442/125 161/443/125
+f 235/444/126 237/445/126 173/446/126
+f 201/447/127 265/448/127 267/449/127
+f 261/450/128 263/451/128 199/452/128
+f 184/431/129 183/453/129 185/454/129
+f 159/428/130 161/455/130 162/456/130
+f 168/434/131 167/433/131 169/457/131
+f 275/396/132 277/458/132 213/459/132
+f 266/460/133 265/461/133 263/462/133
+f 249/463/134 185/464/134 183/465/134
+f 231/466/135 233/467/135 169/468/135
+f 190/469/136 189/470/136 191/471/136
+f 217/472/137 279/473/137 280/474/137
+f 255/475/138 253/476/138 254/477/138
+f 186/478/139 184/431/139 185/454/139
+f 203/479/140 205/480/140 206/481/140
+f 239/482/141 241/483/141 177/484/141
+f 225/485/142 161/443/142 159/486/142
+f 172/487/143 171/488/143 173/489/143
+f 174/490/144 173/489/144 175/491/144
+f 199/452/145 263/451/145 265/448/145
+f 253/492/146 255/421/146 191/493/146
+f 163/494/147 165/432/147 166/495/147
+f 263/462/148 261/496/148 262/497/148
+f 241/483/149 243/498/149 179/499/149
+f 201/500/150 203/479/150 204/501/150
+f 198/502/151 197/503/151 199/504/151
+f 209/505/152 211/400/152 212/506/152
+f 188/507/153 187/508/153 189/470/153
+f 233/467/154 235/444/154 171/509/154
+f 196/510/155 195/511/155 197/503/155
+f 257/422/156 259/512/156 195/513/156
+f 278/514/157 280/474/157 277/515/157
+f 236/516/158 235/517/158 233/518/158
+f 250/519/159 249/403/159 248/405/159
+f 253/476/160 251/520/160 252/521/160
+f 205/522/161 269/523/161 271/524/161
+f 213/401/162 215/439/162 216/435/162
+f 154/525/93 216/435/93 153/440/93
+f 218/526/137 217/472/137 280/474/137
+f 279/527/163 217/528/163 153/529/163
+f 176/530/164 175/491/164 177/531/164
+f 181/414/165 183/453/165 184/431/165
+f 161/455/166 163/494/166 164/532/166
+f 280/474/157 279/473/157 277/515/157
+f 257/533/167 255/475/167 256/534/167
+f 274/535/168 273/399/168 271/410/168
+f 155/536/169 157/427/169 158/537/169
+f 231/426/170 229/415/170 230/538/170
+f 205/480/171 207/539/171 208/540/171
+f 220/438/172 219/437/172 217/472/172
+f 203/541/173 267/449/173 269/523/173
+f 192/542/174 191/471/174 193/543/174
+f 244/406/175 246/544/175 245/545/175
+f 170/546/176 169/457/176 171/488/176
+f 259/512/177 261/450/177 197/547/177
+f 219/548/178 155/549/178 153/529/178
+f 251/520/179 249/403/179 250/519/179
+f 207/550/180 271/524/180 273/395/180
+f 277/458/181 279/527/181 215/551/181
+f 240/552/182 239/553/182 237/554/182
+f 261/496/183 259/555/183 260/556/183
+f 223/419/184 221/436/184 222/557/184
+f 278/514/185 277/515/185 275/398/185
+f 248/405/186 247/404/186 245/545/186
+f 237/445/187 239/482/187 175/558/187
+f 246/544/186 248/405/186 245/545/186
+f 221/559/188 157/560/188 155/549/188
+f 242/561/189 241/408/189 239/553/189
+f 227/416/190 225/418/190 226/562/190
+f 259/555/191 257/533/191 258/563/191
+f 251/564/192 187/565/192 185/464/192
+f 178/566/193 177/531/193 179/413/193
+f 199/567/194 201/500/194 202/568/194
+f 243/498/195 245/569/195 181/570/195
+f 223/571/196 159/486/196 157/560/196
+f 163/442/197 227/441/197 229/572/197
+f 194/573/198 193/543/198 195/511/198
+f 207/539/199 209/505/199 210/574/199
+f 251/564/200 253/492/200 189/575/200
+f 270/576/201 269/411/201 267/577/201
+f 186/478/202 185/454/202 187/508/202
+f 247/578/203 183/465/203 181/570/203
+f 153/440/204 155/536/204 156/579/204
+f 268/580/205 267/577/205 265/461/205
+f 238/581/206 237/554/206 235/517/206
+f 231/466/207 167/582/207 165/583/207
+f 42/307/208 40/204/208 41/206/208
+f 80/331/209 79/227/209 82/229/209
+f 83/584/210 81/230/210 147/232/210
+f 47/251/211 111/233/211 49/235/211
+f 39/248/212 103/236/212 41/238/212
+f 97/246/213 99/239/213 33/241/213
+f 41/238/214 105/237/214 43/243/214
+f 83/584/215 147/232/215 85/245/215
+f 95/254/216 97/246/216 31/247/216
+f 101/252/217 103/236/217 37/249/217
+f 45/253/218 109/250/218 47/251/218
+f 37/249/219 35/240/219 101/252/219
+f 43/243/220 107/242/220 45/253/220
+f 93/256/221 95/254/221 29/255/221
+f 91/288/222 93/256/222 27/257/222
+f 49/235/223 113/234/223 51/259/223
+f 87/263/224 151/260/224 25/262/224
+f 85/245/225 149/244/225 87/263/225
+f 119/329/226 121/264/226 55/266/226
+f 51/259/227 115/258/227 53/268/227
+f 81/230/228 79/269/228 145/231/228
+f 61/290/229 125/271/229 63/273/229
+f 79/269/230 77/274/230 143/270/230
+f 77/274/231 75/276/231 141/275/231
+f 75/276/232 73/278/232 139/277/232
+f 69/284/233 133/280/233 71/282/233
+f 67/286/234 131/283/234 69/284/234
+f 65/287/235 129/285/235 67/286/235
+f 63/273/236 127/272/236 65/287/236
+f 89/261/237 91/288/237 25/262/237
+f 59/291/238 123/289/238 61/290/238
+f 121/264/239 123/289/239 57/265/239
+f 98/368/48 97/293/48 96/295/48
+f 110/302/49 112/296/49 109/298/49
+f 50/320/50 48/299/50 49/301/50
+f 108/313/240 110/302/240 107/303/240
+f 138/362/52 140/304/52 137/306/52
+f 44/360/53 42/307/53 43/308/53
+f 104/585/54 106/309/54 103/311/54
+f 38/381/55 37/312/55 40/204/55
+f 106/586/56 108/313/56 105/314/56
+f 34/319/57 33/315/57 36/317/57
+f 32/359/58 31/318/58 34/319/58
+f 52/369/59 50/320/59 51/321/59
+f 28/325/60 27/322/60 30/324/60
+f 26/207/241 25/209/241 28/325/241
+f 82/229/242 81/228/242 84/328/242
+f 73/278/243 71/282/243 137/279/243
+f 84/328/244 83/327/244 86/215/244
+f 117/267/245 119/329/245 53/268/245
+f 78/333/68 77/330/68 80/331/68
+f 76/375/246 75/332/246 78/333/246
+f 112/296/70 114/334/70 111/297/70
+f 140/304/71 142/336/71 139/305/71
+f 70/378/72 68/338/72 69/340/72
+f 68/338/73 66/341/73 67/339/73
+f 66/341/247 64/343/247 65/342/247
+f 64/343/75 62/345/75 63/344/75
+f 62/345/248 60/347/248 61/346/248
+f 60/347/249 58/213/249 59/348/249
+f 144/353/79 146/350/79 143/352/79
+f 142/336/80 144/353/80 141/337/80
+f 114/334/81 116/354/81 113/335/81
+f 72/587/82 71/356/82 74/358/82
+f 30/324/83 29/323/83 32/359/83
+f 46/380/84 44/360/84 45/361/84
+f 136/588/85 138/362/85 135/363/85
+f 104/585/86 103/311/86 102/365/86
+f 102/365/87 101/364/87 100/367/87
+f 100/367/88 99/366/88 98/368/88
+f 54/210/250 52/369/250 53/211/250
+f 96/295/90 95/294/90 94/371/90
+f 94/371/91 93/370/91 92/373/91
+f 90/217/251 92/373/251 89/218/251
+f 74/358/252 73/357/252 76/375/252
+f 148/377/95 150/225/95 147/376/95
+f 146/350/96 148/377/96 145/351/96
+f 115/355/253 116/354/253 117/222/253
+f 72/589/98 70/378/98 71/379/98
+f 48/299/99 46/380/99 47/300/99
+f 36/317/100 35/316/100 38/381/100
+f 136/588/101 135/363/101 134/383/101
+f 134/383/102 133/382/102 132/385/102
+f 132/385/103 131/384/103 130/387/103
+f 130/387/104 129/386/104 128/389/104
+f 128/389/105 127/388/105 126/391/105
+f 126/391/106 125/390/106 124/393/106
+f 124/393/107 123/392/107 122/223/107
+f 296/590/7 295/591/7 297/592/7
+f 282/593/8 344/594/8 281/595/8
+f 310/596/9 309/597/9 312/598/9
+f 314/599/10 312/598/10 313/600/10
+f 342/601/11 341/602/11 344/594/11
+f 346/603/12 345/604/12 408/605/12
+f 374/606/13 376/607/13 373/608/13
+f 378/609/14 377/610/14 376/607/14
+f 406/611/15 408/605/15 405/612/15
+f 335/613/16 337/614/16 338/615/16
+f 337/616/254 401/617/254 403/618/254
+f 367/619/18 369/620/18 305/621/18
+f 359/622/19 361/623/19 297/624/19
+f 355/625/255 291/626/255 289/627/255
+f 361/623/21 363/628/21 299/629/21
+f 403/618/22 405/630/22 341/631/22
+f 353/632/23 289/627/23 287/633/23
+f 359/622/24 295/634/24 293/635/24
+f 365/636/25 367/619/25 303/637/25
+f 291/626/26 355/625/26 357/638/26
+f 363/628/27 365/636/27 301/639/27
+f 351/640/28 287/633/28 285/641/28
+f 349/642/256 285/641/256 283/643/256
+f 369/620/30 371/644/30 307/645/30
+f 407/646/257 345/647/257 281/648/257
+f 405/630/32 407/646/32 343/649/32
+f 377/650/33 313/651/33 311/652/33
+f 371/644/258 373/653/258 309/654/258
+f 335/655/35 399/656/35 401/617/35
+f 381/657/36 383/658/36 319/659/36
+f 333/660/37 397/661/37 399/656/37
+f 331/662/38 395/663/38 397/661/38
+f 329/664/39 393/665/39 395/663/39
+f 389/666/40 391/667/40 327/668/40
+f 387/669/259 389/666/259 325/670/259
+f 385/671/42 387/669/42 323/672/42
+f 383/658/260 385/671/260 321/673/260
+f 347/674/44 283/643/44 281/648/44
+f 379/675/45 381/657/45 317/676/45
+f 379/675/46 315/677/46 313/651/46
+f 344/594/47 343/678/47 281/595/47
+f 353/679/48 351/680/48 352/681/48
+f 368/682/49 367/683/49 365/684/49
+f 304/685/50 303/686/50 305/687/50
+f 366/688/51 365/684/51 363/689/51
+f 396/690/52 395/691/52 393/692/52
+f 298/693/53 297/592/53 299/694/53
+f 362/695/54 361/696/54 359/697/54
+f 293/698/55 295/591/55 296/590/55
+f 364/699/56 363/689/56 361/700/56
+f 289/701/57 291/702/57 292/703/57
+f 287/704/58 289/701/58 290/705/58
+f 306/706/59 305/687/59 307/707/59
+f 283/708/60 285/709/60 286/710/60
+f 281/595/61 283/708/61 284/711/61
+f 309/597/62 311/712/62 312/598/62
+f 312/598/63 311/712/63 313/600/63
+f 337/614/64 339/713/64 340/714/64
+f 327/668/65 391/667/65 393/665/65
+f 339/713/66 341/602/66 342/601/66
+f 375/715/261 311/652/261 309/654/261
+f 333/716/68 335/613/68 336/717/68
+f 331/718/69 333/716/69 334/719/69
+f 370/720/70 369/721/70 367/683/70
+f 398/722/71 397/723/71 395/691/71
+f 324/724/72 323/725/72 325/726/72
+f 322/727/73 321/728/73 323/725/73
+f 320/729/74 319/730/74 321/728/74
+f 318/731/75 317/732/75 319/730/75
+f 316/733/76 315/734/76 317/732/76
+f 314/599/77 313/600/77 315/734/77
+f 341/602/78 343/678/78 344/594/78
+f 345/604/12 407/735/12 408/605/12
+f 402/736/79 401/737/79 399/738/79
+f 400/739/80 399/738/80 397/723/80
+f 372/740/81 371/741/81 369/721/81
+f 327/742/82 329/743/82 330/744/82
+f 285/709/83 287/704/83 288/745/83
+f 300/746/84 299/694/84 301/747/84
+f 394/748/85 393/692/85 391/749/85
+f 359/697/86 357/750/86 358/751/86
+f 357/750/87 355/752/87 356/753/87
+f 355/752/88 353/679/88 354/754/88
+f 308/755/89 307/707/89 309/597/89
+f 351/680/90 349/756/90 350/757/90
+f 349/756/91 347/758/91 348/759/91
+f 348/759/92 347/758/92 345/604/92
+f 376/607/13 375/760/13 373/608/13
+f 377/610/93 375/760/93 376/607/93
+f 329/743/94 331/718/94 332/761/94
+f 406/611/95 405/612/95 403/762/95
+f 404/763/96 403/762/96 401/737/96
+f 372/740/97 374/606/97 373/608/97
+f 326/764/98 325/726/98 327/765/98
+f 302/766/99 301/747/99 303/686/99
+f 291/702/100 293/698/100 294/767/100
+f 391/749/101 389/768/101 390/769/101
+f 389/768/102 387/770/102 388/771/102
+f 387/770/103 385/772/103 386/773/103
+f 385/772/104 383/774/104 384/775/104
+f 383/774/105 381/776/105 382/777/105
+f 381/776/106 379/778/106 380/779/106
+f 379/778/107 377/610/107 378/609/107
+f 408/605/15 407/735/15 405/612/15
+f 298/693/208 296/590/208 297/592/208
+f 336/717/209 335/613/209 338/615/209
+f 339/780/210 337/616/210 403/618/210
+f 303/637/262 367/619/262 305/621/262
+f 295/634/212 359/622/212 297/624/212
+f 353/632/263 355/625/263 289/627/263
+f 297/624/214 361/623/214 299/629/214
+f 339/780/215 403/618/215 341/631/215
+f 351/640/216 353/632/216 287/633/216
+f 357/638/217 359/622/217 293/635/217
+f 301/639/218 365/636/218 303/637/218
+f 293/635/264 291/626/264 357/638/264
+f 299/629/220 363/628/220 301/639/220
+f 349/642/221 351/640/221 285/641/221
+f 347/674/265 349/642/265 283/643/265
+f 305/621/266 369/620/266 307/645/266
+f 343/649/224 407/646/224 281/648/224
+f 341/631/267 405/630/267 343/649/267
+f 375/715/226 377/650/226 311/652/226
+f 307/645/227 371/644/227 309/654/227
+f 337/616/228 335/655/228 401/617/228
+f 317/676/268 381/657/268 319/659/268
+f 335/655/230 333/660/230 399/656/230
+f 333/660/231 331/662/231 397/661/231
+f 331/662/232 329/664/232 395/663/232
+f 325/670/233 389/666/233 327/668/233
+f 323/672/234 387/669/234 325/670/234
+f 321/673/269 385/671/269 323/672/269
+f 319/659/236 383/658/236 321/673/236
+f 345/647/237 347/674/237 281/648/237
+f 315/677/270 379/675/270 317/676/270
+f 377/650/239 379/675/239 313/651/239
+f 354/754/48 353/679/48 352/681/48
+f 366/688/49 368/682/49 365/684/49
+f 306/706/50 304/685/50 305/687/50
+f 364/699/240 366/688/240 363/689/240
+f 394/748/52 396/690/52 393/692/52
+f 300/746/53 298/693/53 299/694/53
+f 360/781/54 362/695/54 359/697/54
+f 294/767/55 293/698/55 296/590/55
+f 362/782/56 364/699/56 361/700/56
+f 290/705/57 289/701/57 292/703/57
+f 288/745/58 287/704/58 290/705/58
+f 308/755/59 306/706/59 307/707/59
+f 284/711/60 283/708/60 286/710/60
+f 282/593/241 281/595/241 284/711/241
+f 338/615/271 337/614/271 340/714/271
+f 329/664/243 327/668/243 393/665/243
+f 340/714/244 339/713/244 342/601/244
+f 373/653/245 375/715/245 309/654/245
+f 334/719/68 333/716/68 336/717/68
+f 332/761/246 331/718/246 334/719/246
+f 368/682/70 370/720/70 367/683/70
+f 396/690/71 398/722/71 395/691/71
+f 326/764/72 324/724/72 325/726/72
+f 324/724/73 322/727/73 323/725/73
+f 322/727/247 320/729/247 321/728/247
+f 320/729/75 318/731/75 319/730/75
+f 318/731/248 316/733/248 317/732/248
+f 316/733/249 314/599/249 315/734/249
+f 400/739/79 402/736/79 399/738/79
+f 398/722/80 400/739/80 397/723/80
+f 370/720/81 372/740/81 369/721/81
+f 328/783/82 327/742/82 330/744/82
+f 286/710/83 285/709/83 288/745/83
+f 302/766/84 300/746/84 301/747/84
+f 392/784/85 394/748/85 391/749/85
+f 360/781/86 359/697/86 358/751/86
+f 358/751/87 357/750/87 356/753/87
+f 356/753/88 355/752/88 354/754/88
+f 310/596/250 308/755/250 309/597/250
+f 352/681/90 351/680/90 350/757/90
+f 350/757/91 349/756/91 348/759/91
+f 346/603/251 348/759/251 345/604/251
+f 330/744/252 329/743/252 332/761/252
+f 404/763/95 406/611/95 403/762/95
+f 402/736/96 404/763/96 401/737/96
+f 371/741/253 372/740/253 373/608/253
+f 328/785/98 326/764/98 327/765/98
+f 304/685/99 302/766/99 303/686/99
+f 292/703/100 291/702/100 294/767/100
+f 392/784/101 391/749/101 390/769/101
+f 390/769/102 389/768/102 388/771/102
+f 388/771/103 387/770/103 386/773/103
+f 386/773/104 385/772/104 384/775/104
+f 384/775/105 383/774/105 382/777/105
+f 382/777/106 381/776/106 380/779/106
+f 380/779/107 379/778/107 378/609/107
+f 170/546/272 168/434/272 169/457/272
+f 208/540/199 207/539/199 210/574/199
+f 211/786/273 209/394/273 275/396/273
+f 175/558/274 239/482/274 177/484/274
+f 167/582/275 231/466/275 169/468/275
+f 225/485/276 227/441/276 161/443/276
+f 169/468/277 233/467/277 171/509/277
+f 211/786/278 275/396/278 213/459/278
+f 223/571/279 225/485/279 159/486/279
+f 229/572/280 231/466/280 165/583/280
+f 173/446/281 237/445/281 175/558/281
+f 165/583/282 163/442/282 229/572/282
+f 171/509/283 235/444/283 173/446/283
+f 221/559/284 223/571/284 157/560/284
+f 219/548/285 221/559/285 155/549/285
+f 177/484/286 241/483/286 179/499/286
+f 215/551/287 279/527/287 153/529/287
+f 213/459/288 277/458/288 215/551/288
+f 247/578/289 249/463/289 183/465/289
+f 179/499/290 243/498/290 181/570/290
+f 209/394/291 207/550/291 273/395/291
+f 189/575/292 253/492/292 191/493/292
+f 207/550/293 205/522/293 271/524/293
+f 205/522/294 203/541/294 269/523/294
+f 203/541/295 201/447/295 267/449/295
+f 197/547/296 261/450/296 199/452/296
+f 195/513/297 259/512/297 197/547/297
+f 193/423/298 257/422/298 195/513/298
+f 191/493/299 255/421/299 193/423/299
+f 217/528/300 219/548/300 153/529/300
+f 187/565/301 251/564/301 189/575/301
+f 249/463/302 251/564/302 185/464/302
+f 226/562/116 225/418/116 224/420/116
+f 238/581/182 240/552/182 237/554/182
+f 178/566/164 176/530/164 177/531/164
+f 236/516/206 238/581/206 235/517/206
+f 266/460/205 268/580/205 265/461/205
+f 172/487/303 170/546/303 171/488/303
+f 232/787/118 234/424/118 231/426/118
+f 166/495/121 165/432/121 168/434/121
+f 234/788/304 236/516/304 233/518/304
+f 162/456/166 161/455/166 164/532/166
+f 160/429/130 159/428/130 162/456/130
+f 180/412/193 178/566/193 179/413/193
+f 156/579/169 155/536/169 158/537/169
+f 154/525/305 153/440/305 156/579/305
+f 210/574/306 209/505/306 212/506/306
+f 201/447/307 199/452/307 265/448/307
+f 212/506/308 211/400/308 214/402/308
+f 245/569/309 247/578/309 181/570/309
+f 206/481/171 205/480/171 208/540/171
+f 204/501/310 203/479/310 206/481/310
+f 240/552/189 242/561/189 239/553/189
+f 268/580/201 270/576/201 267/577/201
+f 198/502/311 196/510/311 197/503/311
+f 196/510/198 194/573/198 195/511/198
+f 194/573/312 192/542/312 193/543/312
+f 192/542/313 190/469/313 191/471/313
+f 190/469/153 188/507/153 189/470/153
+f 188/507/314 186/478/314 187/508/314
+f 272/409/168 274/535/168 271/410/168
+f 270/576/113 272/409/113 269/411/113
+f 242/561/112 244/406/112 241/408/112
+f 200/789/315 199/567/315 202/568/315
+f 158/537/119 157/427/119 160/429/119
+f 174/490/143 172/487/143 173/489/143
+f 264/790/133 266/460/133 263/462/133
+f 232/787/170 231/426/170 230/538/170
+f 230/538/115 229/415/115 228/417/115
+f 228/417/190 227/416/190 226/562/190
+f 182/430/95 180/412/95 181/414/95
+f 224/420/184 223/419/184 222/557/184
+f 222/557/123 221/436/123 220/438/123
+f 218/526/316 220/438/316 217/472/316
+f 202/568/150 201/500/150 204/501/150
+f 276/397/185 278/514/185 275/398/185
+f 274/535/109 276/397/109 273/399/109
+f 243/407/317 244/406/317 245/545/317
+f 200/791/151 198/502/151 199/504/151
+f 176/530/144 174/490/144 175/491/144
+f 164/532/147 163/494/147 166/495/147
+f 264/790/148 263/462/148 262/497/148
+f 262/497/183 261/496/183 260/556/183
+f 260/556/191 259/555/191 258/563/191
+f 258/563/167 257/533/167 256/534/167
+f 256/534/138 255/475/138 254/477/138
+f 254/477/160 253/476/160 252/521/160
+f 252/521/179 251/520/179 250/519/179
+f 471/792/318 469/793/318 472/794/318
+f 519/795/303 520/796/303 518/797/303
+f 519/795/272 521/798/272 520/796/272
+f 413/799/109 414/800/109 416/801/109
+f 486/802/319 488/803/319 422/804/319
+f 476/805/320 474/806/320 473/807/320
+f 535/808/93 473/807/93 536/809/93
+f 521/798/131 522/810/131 520/796/131
+f 440/811/111 442/812/111 441/813/111
+f 442/814/203 506/815/203 508/816/203
+f 476/817/321 412/818/321 474/819/321
+f 490/820/194 488/821/194 487/822/194
+f 490/823/145 426/824/145 424/825/145
+f 448/826/149 446/827/149 510/828/149
+f 462/829/190 464/830/190 463/831/190
+f 486/832/140 484/833/140 483/834/140
+f 461/835/190 462/829/190 463/831/190
+f 518/836/283 454/837/283 516/838/283
+f 483/834/171 484/833/171 481/839/171
+f 511/840/164 513/841/164 512/842/164
+f 458/843/170 460/844/170 459/845/170
+f 430/846/177 428/847/177 492/848/177
+f 436/849/160 438/850/160 437/851/160
+f 480/852/152 478/853/152 477/854/152
+f 435/855/160 436/849/160 437/851/160
+f 417/856/168 415/857/168 418/858/168
+f 440/859/302 438/860/302 504/861/302
+f 466/862/196 530/863/196 532/864/196
+f 499/865/153 501/866/153 500/867/153
+f 482/868/322 418/869/322 416/870/322
+f 520/871/277 456/872/277 518/836/277
+f 531/873/119 532/874/119 529/875/119
+f 421/876/201 419/877/201 422/878/201
+f 488/803/307 490/823/307 424/825/307
+f 453/879/304 454/880/304 456/881/304
+f 460/844/115 462/829/115 461/835/115
+f 478/882/278 414/883/278 476/817/278
+f 523/884/121 524/885/121 521/798/121
+f 503/886/202 504/887/202 502/888/202
+f 456/872/154 454/837/154 518/836/154
+f 489/889/194 490/820/194 487/822/194
+f 468/890/123 470/891/123 469/793/123
+f 464/892/276 462/893/276 528/894/276
+f 484/833/171 482/895/171 481/839/171
+f 480/896/323 482/868/323 416/870/323
+f 515/897/143 517/898/143 516/899/143
+f 453/879/206 451/900/206 454/880/206
+f 502/901/301 438/860/301 500/902/301
+f 412/818/181 410/903/181 474/819/181
+f 495/904/198 496/905/198 494/906/198
+f 491/907/155 493/908/155 492/909/155
+f 455/910/118 456/911/118 458/843/118
+f 474/819/287 410/903/287 536/912/287
+f 497/913/174 498/914/174 496/905/174
+f 411/915/185 412/916/185 414/800/185
+f 492/848/296 428/847/296 490/823/296
+f 451/900/206 452/917/206 454/880/206
+f 423/918/205 421/876/205 424/919/205
+f 452/920/187 450/921/187 514/922/187
+f 434/923/138 436/849/138 435/855/138
+f 488/803/127 424/825/127 422/804/127
+f 462/893/125 526/924/125 528/894/125
+f 409/925/157 410/926/157 412/916/157
+f 484/927/161 420/928/161 418/869/161
+f 410/903/163 472/929/163 536/912/163
+f 433/930/138 434/923/138 435/855/138
+f 493/908/155 494/906/155 492/909/155
+f 533/931/169 534/932/169 531/873/169
+f 535/808/305 536/809/305 533/931/305
+f 467/933/123 468/890/123 469/793/123
+f 512/934/324 448/826/324 510/828/324
+f 429/935/191 430/936/191 431/937/191
+f 494/938/297 430/846/297 492/848/297
+f 513/841/164 514/939/164 512/842/164
+f 468/940/284 466/862/284 532/864/284
+f 419/877/113 417/856/113 420/941/113
+f 480/896/325 416/870/325 414/883/325
+f 413/799/185 411/915/185 414/800/185
+f 517/898/326 518/797/326 516/899/326
+f 446/827/327 444/942/327 508/816/327
+f 522/943/275 458/944/275 520/871/275
+f 432/945/167 434/923/167 433/930/167
+f 511/840/193 512/842/193 510/946/193
+f 432/947/156 430/846/156 494/938/156
+f 469/793/172 470/891/172 472/794/172
+f 526/924/197 462/893/197 460/948/197
+f 530/949/130 528/950/130 527/951/130
+f 487/822/150 488/821/150 485/952/150
+f 527/951/328 528/950/328 525/953/328
+f 428/954/183 430/936/183 429/935/183
+f 513/841/144 515/897/144 514/939/144
+f 525/953/147 526/955/147 523/884/147
+f 528/950/166 526/955/166 525/953/166
+f 411/915/157 409/925/157 412/916/157
+f 458/944/135 456/872/135 520/871/135
+f 507/956/120 508/957/120 505/958/120
+f 491/907/151 492/909/151 490/959/151
+f 428/847/128 426/824/128 490/823/128
+f 496/960/298 432/947/298 494/938/298
+f 463/831/116 464/830/116 465/961/116
+f 505/958/129 506/962/129 504/887/129
+f 415/857/109 413/799/109 416/801/109
+f 423/918/133 424/919/133 426/963/133
+f 526/955/147 524/885/147 523/884/147
+f 481/839/199 482/895/199 479/964/199
+f 500/902/292 436/965/292 498/966/292
+f 516/838/281 452/920/281 514/922/281
+f 507/956/95 509/967/95 508/957/95
+f 497/913/136 499/865/136 498/914/136
+f 447/968/189 448/969/189 450/970/189
+f 529/875/130 530/949/130 527/951/130
+f 478/882/273 480/896/273 414/883/273
+f 460/948/280 458/944/280 524/971/280
+f 425/972/148 426/963/148 427/973/148
+f 472/794/137 410/926/137 409/925/137
+f 485/952/310 486/832/310 483/834/310
+f 509/967/193 511/840/193 510/946/193
+f 508/957/165 506/962/165 505/958/165
+f 498/966/299 434/974/299 496/960/299
+f 477/854/308 478/853/308 475/975/308
+f 501/866/314 503/886/314 502/888/314
+f 455/976/158 453/879/158 456/881/158
+f 471/792/137 472/794/137 409/925/137
+f 457/977/170 458/843/170 459/845/170
+f 449/978/189 447/968/189 450/970/189
+f 493/908/198 495/904/198 494/906/198
+f 517/898/303 519/795/303 518/797/303
+f 465/961/184 466/979/184 467/933/184
+f 489/980/151 491/907/151 490/959/151
+f 482/868/293 484/927/293 418/869/293
+f 437/851/179 438/850/179 439/981/179
+f 439/981/159 440/811/159 441/813/159
+f 466/862/279 464/892/279 530/863/279
+f 442/814/289 440/859/289 506/815/289
+f 419/877/201 420/941/201 422/878/201
+f 415/857/168 416/801/168 418/858/168
+f 445/982/175 443/983/175 444/984/175
+f 466/979/184 468/890/184 467/933/184
+f 443/983/186 441/813/186 444/984/186
+f 430/936/191 432/945/191 431/937/191
+f 482/895/329 480/852/329 479/964/329
+f 431/937/167 432/945/167 433/930/167
+f 421/876/205 422/878/205 424/919/205
+f 514/922/330 450/921/330 512/934/330
+f 479/964/306 480/852/306 477/854/306
+f 426/963/148 428/954/148 427/973/148
+f 499/865/136 500/867/136 498/914/136
+f 484/927/294 486/802/294 420/928/294
+f 509/967/114 510/946/114 508/957/114
+f 457/977/118 455/910/118 458/843/118
+f 450/921/141 448/826/141 512/934/141
+f 444/942/309 442/814/309 508/816/309
+f 503/886/139 505/958/139 504/887/139
+f 447/968/112 445/982/112 448/969/112
+f 425/972/133 423/918/133 426/963/133
+f 510/828/331 446/827/331 508/816/331
+f 446/985/317 445/982/317 444/984/317
+f 427/973/183 428/954/183 429/935/183
+f 470/986/178 534/987/178 536/912/178
+f 524/971/282 526/924/282 460/948/282
+f 534/932/169 532/874/169 531/873/169
+f 440/859/134 504/861/134 506/815/134
+f 417/856/113 418/858/113 420/941/113
+f 441/813/186 442/812/186 444/984/186
+f 468/940/188 532/864/188 534/987/188
+f 438/860/192 502/901/192 504/861/192
+f 438/860/200 436/965/200 500/902/200
+f 536/809/204 534/932/204 533/931/204
+f 458/944/207 522/943/207 524/971/207
+f 478/853/110 476/805/110 475/975/110
+f 445/982/112 446/985/112 448/969/112
+f 414/883/332 412/818/332 476/817/332
+f 438/850/179 440/811/179 439/981/179
+f 459/845/115 460/844/115 461/835/115
+f 451/900/182 449/978/182 452/917/182
+f 464/830/116 466/979/116 465/961/116
+f 464/892/142 528/894/142 530/863/142
+f 515/897/144 516/899/144 514/939/144
+f 436/965/146 434/974/146 498/966/146
+f 470/986/285 468/940/285 534/987/285
+f 488/821/150 486/832/150 485/952/150
+f 501/866/153 502/888/153 500/867/153
+f 486/802/173 422/804/173 420/928/173
+f 449/978/182 450/970/182 452/917/182
+f 472/929/300 470/986/300 536/912/300
+f 495/904/312 497/913/312 496/905/312
+f 434/974/117 432/947/117 496/960/117
+f 532/874/119 530/949/119 529/875/119
+f 524/885/121 522/810/121 521/798/121
+f 475/975/122 476/805/122 473/807/122
+f 473/807/124 474/806/124 536/809/124
+f 454/837/126 452/920/126 516/838/126
+f 552/988/7 551/989/7 553/990/7
+f 538/991/8 600/992/8 537/993/8
+f 566/994/9 565/995/9 568/996/9
+f 570/997/10 568/996/10 569/998/10
+f 598/999/11 597/1000/11 600/992/11
+f 602/1001/12 601/1002/12 664/1003/12
+f 630/1004/13 632/1005/13 629/1006/13
+f 634/1007/14 633/1008/14 632/1005/14
+f 662/1009/15 664/1003/15 661/1010/15
+f 591/1011/16 593/1012/16 594/1013/16
+f 593/1014/17 657/1015/17 659/1016/17
+f 623/1017/18 625/1018/18 561/1019/18
+f 615/1020/19 617/1021/19 553/1022/19
+f 611/1023/20 547/1024/20 545/1025/20
+f 617/1021/21 619/1026/21 555/1027/21
+f 659/1016/333 661/1028/333 597/1029/333
+f 609/1030/23 545/1025/23 543/1031/23
+f 615/1020/24 551/1032/24 549/1033/24
+f 621/1034/25 623/1017/25 559/1035/25
+f 547/1024/334 611/1023/334 613/1036/334
+f 619/1026/27 621/1034/27 557/1037/27
+f 607/1038/28 543/1031/28 541/1039/28
+f 605/1040/29 541/1039/29 539/1041/29
+f 625/1018/30 627/1042/30 563/1043/30
+f 663/1044/31 601/1045/31 537/1046/31
+f 661/1028/335 663/1044/335 599/1047/335
+f 633/1048/33 569/1049/33 567/1050/33
+f 627/1042/34 629/1051/34 565/1052/34
+f 591/1053/35 655/1054/35 657/1015/35
+f 637/1055/36 639/1056/36 575/1057/36
+f 589/1058/37 653/1059/37 655/1054/37
+f 587/1060/38 651/1061/38 653/1059/38
+f 585/1062/39 649/1063/39 651/1061/39
+f 645/1064/40 647/1065/40 583/1066/40
+f 643/1067/259 645/1064/259 581/1068/259
+f 641/1069/42 643/1067/42 579/1070/42
+f 639/1056/43 641/1069/43 577/1071/43
+f 603/1072/44 539/1041/44 537/1046/44
+f 635/1073/45 637/1055/45 573/1074/45
+f 635/1073/336 571/1075/336 569/1049/336
+f 600/992/47 599/1076/47 537/993/47
+f 609/1077/48 607/1078/48 608/1079/48
+f 624/1080/49 623/1081/49 621/1082/49
+f 560/1083/50 559/1084/50 561/1085/50
+f 622/1086/51 621/1082/51 619/1087/51
+f 652/1088/52 651/1089/52 649/1090/52
+f 554/1091/53 553/990/53 555/1092/53
+f 618/1093/54 617/1094/54 615/1095/54
+f 549/1096/55 551/989/55 552/988/55
+f 620/1097/56 619/1087/56 617/1098/56
+f 545/1099/57 547/1100/57 548/1101/57
+f 543/1102/58 545/1099/58 546/1103/58
+f 562/1104/59 561/1085/59 563/1105/59
+f 539/1106/60 541/1107/60 542/1108/60
+f 537/993/61 539/1106/61 540/1109/61
+f 565/995/62 567/1110/62 568/996/62
+f 568/996/63 567/1110/63 569/998/63
+f 593/1012/64 595/1111/64 596/1112/64
+f 583/1066/65 647/1065/65 649/1063/65
+f 595/1111/66 597/1000/66 598/999/66
+f 631/1113/261 567/1050/261 565/1052/261
+f 589/1114/68 591/1011/68 592/1115/68
+f 587/1116/69 589/1114/69 590/1117/69
+f 626/1118/70 625/1119/70 623/1081/70
+f 654/1120/71 653/1121/71 651/1089/71
+f 580/1122/72 579/1123/72 581/1124/72
+f 578/1125/73 577/1126/73 579/1123/73
+f 576/1127/74 575/1128/74 577/1126/74
+f 574/1129/75 573/1130/75 575/1128/75
+f 572/1131/76 571/1132/76 573/1130/76
+f 570/997/77 569/998/77 571/1132/77
+f 597/1000/78 599/1076/78 600/992/78
+f 601/1002/12 663/1133/12 664/1003/12
+f 658/1134/79 657/1135/79 655/1136/79
+f 656/1137/80 655/1136/80 653/1121/80
+f 628/1138/81 627/1139/81 625/1119/81
+f 583/1140/82 585/1141/82 586/1142/82
+f 541/1107/83 543/1102/83 544/1143/83
+f 556/1144/84 555/1092/84 557/1145/84
+f 650/1146/85 649/1090/85 647/1147/85
+f 615/1095/86 613/1148/86 614/1149/86
+f 613/1148/87 611/1150/87 612/1151/87
+f 611/1150/88 609/1077/88 610/1152/88
+f 564/1153/89 563/1105/89 565/995/89
+f 607/1078/90 605/1154/90 606/1155/90
+f 605/1154/91 603/1156/91 604/1157/91
+f 604/1157/92 603/1156/92 601/1002/92
+f 632/1005/13 631/1158/13 629/1006/13
+f 633/1008/93 631/1158/93 632/1005/93
+f 585/1141/94 587/1116/94 588/1159/94
+f 662/1009/95 661/1010/95 659/1160/95
+f 660/1161/96 659/1160/96 657/1135/96
+f 628/1138/97 630/1004/97 629/1006/97
+f 582/1162/98 581/1124/98 583/1163/98
+f 558/1164/99 557/1145/99 559/1084/99
+f 547/1100/100 549/1096/100 550/1165/100
+f 647/1147/101 645/1166/101 646/1167/101
+f 645/1166/102 643/1168/102 644/1169/102
+f 643/1168/103 641/1170/103 642/1171/103
+f 641/1170/104 639/1172/104 640/1173/104
+f 639/1172/105 637/1174/105 638/1175/105
+f 637/1174/106 635/1176/106 636/1177/106
+f 635/1176/107 633/1008/107 634/1007/107
+f 664/1003/15 663/1133/15 661/1010/15
+f 554/1091/208 552/988/208 553/990/208
+f 592/1115/209 591/1011/209 594/1013/209
+f 595/1178/210 593/1014/210 659/1016/210
+f 559/1035/211 623/1017/211 561/1019/211
+f 551/1032/337 615/1020/337 553/1022/337
+f 609/1030/338 611/1023/338 545/1025/338
+f 553/1022/339 617/1021/339 555/1027/339
+f 595/1178/215 659/1016/215 597/1029/215
+f 607/1038/216 609/1030/216 543/1031/216
+f 613/1036/340 615/1020/340 549/1033/340
+f 557/1037/218 621/1034/218 559/1035/218
+f 549/1033/219 547/1024/219 613/1036/219
+f 555/1027/341 619/1026/341 557/1037/341
+f 605/1040/221 607/1038/221 541/1039/221
+f 603/1072/222 605/1040/222 539/1041/222
+f 561/1019/266 625/1018/266 563/1043/266
+f 599/1047/224 663/1044/224 537/1046/224
+f 597/1029/267 661/1028/267 599/1047/267
+f 631/1113/226 633/1048/226 567/1050/226
+f 563/1043/227 627/1042/227 565/1052/227
+f 593/1014/228 591/1053/228 657/1015/228
+f 573/1074/268 637/1055/268 575/1057/268
+f 591/1053/230 589/1058/230 655/1054/230
+f 589/1058/231 587/1060/231 653/1059/231
+f 587/1060/232 585/1062/232 651/1061/232
+f 581/1068/233 645/1064/233 583/1066/233
+f 579/1070/234 643/1067/234 581/1068/234
+f 577/1071/235 641/1069/235 579/1070/235
+f 575/1057/236 639/1056/236 577/1071/236
+f 601/1045/237 603/1072/237 537/1046/237
+f 571/1075/238 635/1073/238 573/1074/238
+f 633/1048/239 635/1073/239 569/1049/239
+f 610/1152/48 609/1077/48 608/1079/48
+f 622/1086/49 624/1080/49 621/1082/49
+f 562/1104/50 560/1083/50 561/1085/50
+f 620/1097/240 622/1086/240 619/1087/240
+f 650/1146/342 652/1088/342 649/1090/342
+f 556/1144/53 554/1091/53 555/1092/53
+f 616/1179/54 618/1093/54 615/1095/54
+f 550/1165/55 549/1096/55 552/988/55
+f 618/1180/56 620/1097/56 617/1098/56
+f 546/1103/57 545/1099/57 548/1101/57
+f 544/1143/58 543/1102/58 546/1103/58
+f 564/1153/59 562/1104/59 563/1105/59
+f 540/1109/60 539/1106/60 542/1108/60
+f 538/991/241 537/993/241 540/1109/241
+f 594/1013/271 593/1012/271 596/1112/271
+f 585/1062/243 583/1066/243 649/1063/243
+f 596/1112/244 595/1111/244 598/999/244
+f 629/1051/245 631/1113/245 565/1052/245
+f 590/1117/68 589/1114/68 592/1115/68
+f 588/1159/246 587/1116/246 590/1117/246
+f 624/1080/70 626/1118/70 623/1081/70
+f 652/1088/71 654/1120/71 651/1089/71
+f 582/1162/72 580/1122/72 581/1124/72
+f 580/1122/73 578/1125/73 579/1123/73
+f 578/1125/247 576/1127/247 577/1126/247
+f 576/1127/75 574/1129/75 575/1128/75
+f 574/1129/76 572/1131/76 573/1130/76
+f 572/1131/249 570/997/249 571/1132/249
+f 656/1137/79 658/1134/79 655/1136/79
+f 654/1120/80 656/1137/80 653/1121/80
+f 626/1118/81 628/1138/81 625/1119/81
+f 584/1181/82 583/1140/82 586/1142/82
+f 542/1108/83 541/1107/83 544/1143/83
+f 558/1164/84 556/1144/84 557/1145/84
+f 648/1182/85 650/1146/85 647/1147/85
+f 616/1179/86 615/1095/86 614/1149/86
+f 614/1149/87 613/1148/87 612/1151/87
+f 612/1151/88 611/1150/88 610/1152/88
+f 566/994/250 564/1153/250 565/995/250
+f 608/1079/90 607/1078/90 606/1155/90
+f 606/1155/91 605/1154/91 604/1157/91
+f 602/1001/251 604/1157/251 601/1002/251
+f 586/1142/94 585/1141/94 588/1159/94
+f 660/1161/95 662/1009/95 659/1160/95
+f 658/1134/96 660/1161/96 657/1135/96
+f 627/1139/253 628/1138/253 629/1006/253
+f 584/1183/98 582/1162/98 583/1163/98
+f 560/1083/99 558/1164/99 559/1084/99
+f 548/1101/100 547/1100/100 550/1165/100
+f 648/1182/101 647/1147/101 646/1167/101
+f 646/1167/102 645/1166/102 644/1169/102
+f 644/1169/103 643/1168/103 642/1171/103
+f 642/1171/104 641/1170/104 640/1173/104
+f 640/1173/105 639/1172/105 638/1175/105
+f 638/1175/106 637/1174/106 636/1177/106
+f 636/1177/107 635/1176/107 634/1007/107
+f 727/1184/318 725/1185/318 728/1186/318
+f 775/1187/303 776/1188/303 774/1189/303
+f 775/1187/272 777/1190/272 776/1188/272
+f 669/1191/109 670/1192/109 672/1193/109
+f 742/1194/319 744/1195/319 678/1196/319
+f 732/1197/162 730/1198/162 729/1199/162
+f 791/1200/93 729/1199/93 792/1201/93
+f 777/1190/131 778/1202/131 776/1188/131
+f 696/1203/111 698/1204/111 697/1205/111
+f 698/1206/343 762/1207/343 764/1208/343
+f 732/1209/288 668/1210/288 730/1211/288
+f 746/1212/194 744/1213/194 743/1214/194
+f 746/1215/145 682/1216/145 680/1217/145
+f 704/1218/344 702/1219/344 766/1220/344
+f 718/1221/190 720/1222/190 719/1223/190
+f 742/1224/140 740/1225/140 739/1226/140
+f 717/1227/190 718/1221/190 719/1223/190
+f 774/1228/345 710/1229/345 772/1230/345
+f 739/1226/171 740/1225/171 737/1231/171
+f 767/1232/164 769/1233/164 768/1234/164
+f 714/1235/170 716/1236/170 715/1237/170
+f 686/1238/346 684/1239/346 748/1240/346
+f 692/1241/160 694/1242/160 693/1243/160
+f 736/1244/152 734/1245/152 733/1246/152
+f 691/1247/160 692/1241/160 693/1243/160
+f 673/1248/168 671/1249/168 674/1250/168
+f 696/1251/302 694/1252/302 760/1253/302
+f 722/1254/196 786/1255/196 788/1256/196
+f 755/1257/153 757/1258/153 756/1259/153
+f 738/1260/347 674/1261/347 672/1262/347
+f 776/1263/348 712/1264/348 774/1228/348
+f 787/1265/119 788/1266/119 785/1267/119
+f 677/1268/201 675/1269/201 678/1270/201
+f 744/1195/349 746/1215/349 680/1217/349
+f 709/1271/304 710/1272/304 712/1273/304
+f 716/1236/115 718/1221/115 717/1227/115
+f 734/1274/350 670/1275/350 732/1209/350
+f 779/1276/121 780/1277/121 777/1190/121
+f 759/1278/202 760/1279/202 758/1280/202
+f 712/1264/351 710/1229/351 774/1228/351
+f 745/1281/194 746/1212/194 743/1214/194
+f 724/1282/123 726/1283/123 725/1185/123
+f 720/1284/352 718/1285/352 784/1286/352
+f 740/1225/171 738/1287/171 737/1231/171
+f 736/1288/291 738/1260/291 672/1262/291
+f 771/1289/143 773/1290/143 772/1291/143
+f 709/1271/206 707/1292/206 710/1272/206
+f 758/1293/353 694/1252/353 756/1294/353
+f 668/1210/354 666/1295/354 730/1211/354
+f 751/1296/198 752/1297/198 750/1298/198
+f 747/1299/155 749/1300/155 748/1301/155
+f 711/1302/118 712/1303/118 714/1235/118
+f 730/1211/355 666/1295/355 792/1304/355
+f 753/1305/174 754/1306/174 752/1297/174
+f 667/1307/185 668/1308/185 670/1192/185
+f 748/1240/296 684/1239/296 746/1215/296
+f 707/1292/206 708/1309/206 710/1272/206
+f 679/1310/205 677/1268/205 680/1311/205
+f 708/1312/187 706/1313/187 770/1314/187
+f 690/1315/138 692/1241/138 691/1247/138
+f 744/1195/356 680/1217/356 678/1196/356
+f 718/1285/357 782/1316/357 784/1286/357
+f 665/1317/157 666/1318/157 668/1308/157
+f 740/1319/161 676/1320/161 674/1261/161
+f 666/1295/358 728/1321/358 792/1304/358
+f 689/1322/138 690/1315/138 691/1247/138
+f 749/1300/155 750/1298/155 748/1301/155
+f 789/1323/169 790/1324/169 787/1265/169
+f 791/1200/305 792/1201/305 789/1323/305
+f 723/1325/123 724/1282/123 725/1185/123
+f 768/1326/324 704/1218/324 766/1220/324
+f 685/1327/191 686/1328/191 687/1329/191
+f 750/1330/297 686/1238/297 748/1240/297
+f 769/1233/164 770/1331/164 768/1234/164
+f 724/1332/359 722/1254/359 788/1256/359
+f 675/1269/113 673/1248/113 676/1333/113
+f 736/1288/108 672/1262/108 670/1275/108
+f 669/1191/185 667/1307/185 670/1192/185
+f 773/1290/326 774/1189/326 772/1291/326
+f 702/1219/195 700/1334/195 764/1208/195
+f 778/1335/275 714/1336/275 776/1263/275
+f 688/1337/167 690/1315/167 689/1322/167
+f 767/1232/193 768/1234/193 766/1338/193
+f 688/1339/156 686/1238/156 750/1330/156
+f 725/1185/172 726/1283/172 728/1186/172
+f 782/1316/197 718/1285/197 716/1340/197
+f 786/1341/130 784/1342/130 783/1343/130
+f 743/1214/150 744/1213/150 741/1344/150
+f 783/1343/166 784/1342/166 781/1345/166
+f 684/1346/183 686/1328/183 685/1327/183
+f 769/1233/144 771/1289/144 770/1331/144
+f 781/1345/147 782/1347/147 779/1276/147
+f 784/1342/166 782/1347/166 781/1345/166
+f 667/1307/157 665/1317/157 668/1308/157
+f 714/1336/135 712/1264/135 776/1263/135
+f 763/1348/120 764/1349/120 761/1350/120
+f 747/1299/151 748/1301/151 746/1351/151
+f 684/1239/128 682/1216/128 746/1215/128
+f 752/1352/360 688/1339/360 750/1330/360
+f 719/1223/116 720/1222/116 721/1353/116
+f 761/1350/129 762/1354/129 760/1279/129
+f 671/1249/109 669/1191/109 672/1193/109
+f 679/1310/133 680/1311/133 682/1355/133
+f 782/1347/147 780/1277/147 779/1276/147
+f 737/1231/199 738/1287/199 735/1356/199
+f 756/1294/292 692/1357/292 754/1358/292
+f 772/1230/361 708/1312/361 770/1314/361
+f 763/1348/95 765/1359/95 764/1349/95
+f 753/1305/136 755/1257/136 754/1306/136
+f 703/1360/189 704/1361/189 706/1362/189
+f 785/1267/130 786/1341/130 783/1343/130
+f 734/1274/362 736/1288/362 670/1275/362
+f 716/1340/280 714/1336/280 780/1363/280
+f 681/1364/148 682/1355/148 683/1365/148
+f 728/1186/137 666/1318/137 665/1317/137
+f 741/1344/310 742/1224/310 739/1226/310
+f 765/1359/193 767/1232/193 766/1338/193
+f 764/1349/165 762/1354/165 761/1350/165
+f 754/1358/299 690/1366/299 752/1352/299
+f 733/1246/308 734/1245/308 731/1367/308
+f 757/1258/314 759/1278/314 758/1280/314
+f 711/1368/304 709/1271/304 712/1273/304
+f 727/1184/137 728/1186/137 665/1317/137
+f 713/1369/170 714/1235/170 715/1237/170
+f 705/1370/189 703/1360/189 706/1362/189
+f 749/1300/198 751/1296/198 750/1298/198
+f 773/1290/303 775/1187/303 774/1189/303
+f 721/1353/184 722/1371/184 723/1325/184
+f 745/1372/151 747/1299/151 746/1351/151
+f 738/1260/293 740/1319/293 674/1261/293
+f 693/1243/179 694/1242/179 695/1373/179
+f 695/1373/159 696/1203/159 697/1205/159
+f 722/1254/279 720/1284/279 786/1255/279
+f 698/1206/363 696/1251/363 762/1207/363
+f 675/1269/201 676/1333/201 678/1270/201
+f 671/1249/168 672/1193/168 674/1250/168
+f 701/1374/175 699/1375/175 700/1376/175
+f 722/1371/184 724/1282/184 723/1325/184
+f 699/1375/186 697/1205/186 700/1376/186
+f 686/1328/191 688/1337/191 687/1329/191
+f 738/1287/329 736/1244/329 735/1356/329
+f 687/1329/167 688/1337/167 689/1322/167
+f 677/1268/205 678/1270/205 680/1311/205
+f 770/1314/364 706/1313/364 768/1326/364
+f 735/1356/306 736/1244/306 733/1246/306
+f 682/1355/148 684/1346/148 683/1365/148
+f 755/1257/136 756/1259/136 754/1306/136
+f 740/1319/294 742/1194/294 676/1320/294
+f 765/1359/114 766/1338/114 764/1349/114
+f 713/1369/118 711/1302/118 714/1235/118
+f 706/1313/365 704/1218/365 768/1326/365
+f 700/1334/366 698/1206/366 764/1208/366
+f 759/1278/139 761/1350/139 760/1279/139
+f 703/1360/112 701/1374/112 704/1361/112
+f 681/1364/133 679/1310/133 682/1355/133
+f 766/1220/331 702/1219/331 764/1208/331
+f 702/1377/317 701/1374/317 700/1376/317
+f 683/1365/183 684/1346/183 685/1327/183
+f 726/1378/367 790/1379/367 792/1304/367
+f 780/1363/368 782/1316/368 716/1340/368
+f 790/1324/169 788/1266/169 787/1265/169
+f 696/1251/134 760/1253/134 762/1207/134
+f 673/1248/113 674/1250/113 676/1333/113
+f 697/1205/186 698/1204/186 700/1376/186
+f 724/1332/188 788/1256/188 790/1379/188
+f 694/1252/192 758/1293/192 760/1253/192
+f 694/1252/369 692/1357/369 756/1294/369
+f 792/1201/204 790/1324/204 789/1323/204
+f 714/1336/207 778/1335/207 780/1363/207
+f 734/1245/110 732/1197/110 731/1367/110
+f 701/1374/112 702/1377/112 704/1361/112
+f 670/1275/132 668/1210/132 732/1209/132
+f 694/1242/179 696/1203/179 695/1373/179
+f 715/1237/115 716/1236/115 717/1227/115
+f 707/1292/182 705/1370/182 708/1309/182
+f 720/1222/116 722/1371/116 721/1353/116
+f 720/1284/370 784/1286/370 786/1255/370
+f 771/1289/144 772/1291/144 770/1331/144
+f 692/1357/146 690/1366/146 754/1358/146
+f 726/1378/285 724/1332/285 790/1379/285
+f 744/1213/150 742/1224/150 741/1344/150
+f 757/1258/153 758/1280/153 756/1259/153
+f 742/1194/173 678/1196/173 676/1320/173
+f 705/1370/182 706/1362/182 708/1309/182
+f 728/1321/300 726/1378/300 792/1304/300
+f 751/1296/312 753/1305/312 752/1297/312
+f 690/1366/117 688/1339/117 752/1352/117
+f 788/1266/119 786/1341/119 785/1267/119
+f 780/1277/121 778/1202/121 777/1190/121
+f 731/1367/122 732/1197/122 729/1199/122
+f 729/1199/124 730/1198/124 792/1201/124
+f 710/1229/371 708/1312/371 772/1230/371
+g KsHauptsignal_Plane.006_Lights
+usemtl Lights
+f 88/1380/372 28/1381/372 40/1382/372
+f 40/1382/373 44/1383/373 56/1384/373
+f 88/1380/374 64/1385/374 72/1386/374
+f 72/1386/374 76/1387/374 88/1380/374
+f 40/1382/373 28/1381/373 32/1388/373
+f 32/1388/373 34/1389/373 40/1382/373
+f 56/1384/373 44/1383/373 48/1390/373
+f 48/1390/372 52/1391/372 56/1384/372
+f 56/1384/375 58/1392/375 64/1385/375
+f 64/1385/374 68/1393/374 70/1394/374
+f 88/1380/374 76/1387/374 80/1395/374
+f 80/1395/374 84/1396/374 88/1380/374
+f 88/1380/376 26/1397/376 28/1381/376
+f 28/1381/377 30/1398/377 32/1388/377
+f 40/1382/373 34/1389/373 36/1399/373
+f 36/1399/373 38/1400/373 40/1382/373
+f 40/1382/378 42/1401/378 44/1383/378
+f 44/1383/372 46/1402/372 48/1390/372
+f 48/1390/377 50/1403/377 52/1391/377
+f 52/1391/379 54/1404/379 56/1384/379
+f 64/1385/380 58/1392/380 60/1405/380
+f 60/1405/381 62/1406/381 64/1385/381
+f 64/1385/382 66/1407/382 68/1393/382
+f 64/1385/382 70/1394/382 72/1386/382
+f 72/1386/383 74/1408/383 76/1387/383
+f 76/1387/374 78/1409/374 80/1395/374
+f 80/1395/381 82/1410/381 84/1396/381
+f 84/1396/384 86/1411/384 88/1380/384
+f 64/1385/385 88/1380/385 40/1382/385
+f 156/1412/386 158/1413/386 160/1414/386
+f 200/1415/387 204/1416/387 216/1417/387
+f 192/1418/388 186/1419/388 188/1420/388
+f 176/1421/389 180/1422/389 184/1423/389
+f 212/1424/390 214/1425/390 216/1417/390
+f 188/1420/391 190/1426/391 192/1418/391
+f 192/1418/387 196/1427/387 198/1428/387
+f 184/1423/392 172/1429/392 176/1421/392
+f 204/1416/387 206/1430/387 208/1431/387
+f 200/1415/393 202/1432/393 204/1416/393
+f 216/1417/387 192/1418/387 200/1415/387
+f 168/1433/394 162/1434/394 164/1435/394
+f 164/1435/395 166/1436/395 168/1433/395
+f 160/1414/392 162/1434/392 168/1433/392
+f 176/1421/396 178/1437/396 180/1422/396
+f 208/1431/387 210/1438/387 212/1424/387
+f 168/1433/397 170/1439/397 172/1429/397
+f 168/1433/392 172/1429/392 184/1423/392
+f 168/1433/392 156/1412/392 160/1414/392
+f 180/1422/398 182/1440/398 184/1423/398
+f 208/1431/387 212/1424/387 216/1417/387
+f 216/1417/387 204/1416/387 208/1431/387
+f 192/1418/387 194/1441/387 196/1427/387
+f 184/1423/399 186/1419/399 192/1418/399
+f 192/1418/400 198/1428/400 200/1415/400
+f 216/1417/395 156/1412/395 168/1433/395
+f 216/1417/401 154/1442/401 156/1412/401
+f 172/1429/392 174/1443/392 176/1421/392
+f 192/1418/402 216/1417/402 168/1433/402
+f 56/1384/375 64/1385/375 40/1382/375
+f 344/1444/372 284/1445/372 296/1446/372
+f 296/1446/373 300/1447/373 312/1448/373
+f 344/1444/374 320/1449/374 328/1450/374
+f 328/1450/374 332/1451/374 344/1444/374
+f 296/1446/373 284/1445/373 288/1452/373
+f 288/1452/373 290/1453/373 296/1446/373
+f 312/1448/373 300/1447/373 304/1454/373
+f 304/1454/372 308/1455/372 312/1448/372
+f 312/1448/375 314/1456/375 320/1449/375
+f 320/1449/374 324/1457/374 326/1458/374
+f 344/1444/374 332/1451/374 336/1459/374
+f 336/1459/374 340/1460/374 344/1444/374
+f 344/1444/376 282/1461/376 284/1445/376
+f 284/1445/377 286/1462/377 288/1452/377
+f 296/1446/373 290/1453/373 292/1463/373
+f 292/1463/372 294/1464/372 296/1446/372
+f 296/1446/378 298/1465/378 300/1447/378
+f 300/1447/372 302/1466/372 304/1454/372
+f 304/1454/373 306/1467/373 308/1455/373
+f 308/1455/379 310/1468/379 312/1448/379
+f 320/1449/380 314/1456/380 316/1469/380
+f 316/1469/381 318/1470/381 320/1449/381
+f 320/1449/382 322/1471/382 324/1457/382
+f 320/1449/382 326/1458/382 328/1450/382
+f 328/1450/383 330/1472/383 332/1451/383
+f 332/1451/374 334/1473/374 336/1459/374
+f 336/1459/374 338/1474/374 340/1460/374
+f 340/1460/403 342/1475/403 344/1444/403
+f 320/1449/385 344/1444/385 296/1446/385
+f 312/1448/375 320/1449/375 296/1446/375
+f 184/1423/404 192/1418/404 168/1433/404
+f 509/1476/398 507/1477/398 505/1478/398
+f 521/1479/394 527/1480/394 525/1481/394
+f 473/1482/395 533/1483/395 521/1479/395
+f 521/1479/397 519/1484/397 517/1485/397
+f 517/1485/398 515/1486/398 513/1487/398
+f 533/1483/386 531/1488/386 529/1489/386
+f 497/1490/405 495/1491/405 493/1492/405
+f 489/1493/393 487/1494/393 485/1495/393
+f 477/1496/406 475/1497/406 473/1482/406
+f 473/1482/387 497/1490/387 489/1493/387
+f 497/1490/388 503/1498/388 501/1499/388
+f 505/1478/392 517/1485/392 513/1487/392
+f 473/1482/401 535/1500/401 533/1483/401
+f 481/1501/405 477/1496/405 473/1482/405
+f 497/1490/402 473/1482/402 521/1479/402
+f 501/1499/407 499/1502/407 497/1490/407
+f 497/1490/387 493/1492/387 491/1503/387
+f 521/1479/392 517/1485/392 505/1478/392
+f 505/1478/404 497/1490/404 521/1479/404
+f 473/1482/387 485/1495/387 481/1501/387
+f 497/1490/400 491/1503/400 489/1493/400
+f 529/1489/392 527/1480/392 521/1479/392
+f 521/1479/392 533/1483/392 529/1489/392
+f 481/1501/387 479/1504/387 477/1496/387
+f 505/1478/404 503/1498/404 497/1490/404
+f 513/1487/392 511/1505/392 509/1476/392
+f 489/1493/387 485/1495/387 473/1482/387
+f 513/1487/395 509/1476/395 505/1478/395
+f 525/1481/395 523/1506/395 521/1479/395
+f 485/1495/408 483/1507/408 481/1501/408
+f 600/1508/372 540/1509/372 552/1510/372
+f 552/1510/373 556/1511/373 568/1512/373
+f 600/1508/374 576/1513/374 584/1514/374
+f 584/1514/374 588/1515/374 600/1508/374
+f 552/1510/373 540/1509/373 544/1516/373
+f 544/1516/372 546/1517/372 552/1510/372
+f 568/1512/373 556/1511/373 560/1518/373
+f 560/1518/372 564/1519/372 568/1512/372
+f 568/1512/375 570/1520/375 576/1513/375
+f 576/1513/374 580/1521/374 582/1522/374
+f 600/1508/374 588/1515/374 592/1523/374
+f 592/1523/374 596/1524/374 600/1508/374
+f 600/1508/376 538/1525/376 540/1509/376
+f 540/1509/373 542/1526/373 544/1516/373
+f 552/1510/373 546/1517/373 548/1527/373
+f 548/1527/372 550/1528/372 552/1510/372
+f 552/1510/378 554/1529/378 556/1511/378
+f 556/1511/409 558/1530/409 560/1518/409
+f 560/1518/373 562/1531/373 564/1519/373
+f 564/1519/373 566/1532/373 568/1512/373
+f 576/1513/410 570/1520/410 572/1533/410
+f 572/1533/374 574/1534/374 576/1513/374
+f 576/1513/382 578/1535/382 580/1521/382
+f 576/1513/382 582/1522/382 584/1514/382
+f 584/1514/383 586/1536/383 588/1515/383
+f 588/1515/374 590/1537/374 592/1523/374
+f 592/1523/411 594/1538/411 596/1524/411
+f 596/1524/384 598/1539/384 600/1508/384
+f 576/1513/385 600/1508/385 552/1510/385
+f 568/1512/375 576/1513/375 552/1510/375
+f 765/1540/398 763/1541/398 761/1542/398
+f 777/1543/394 783/1544/394 781/1545/394
+f 729/1546/395 789/1547/395 777/1543/395
+f 777/1543/412 775/1548/412 773/1549/412
+f 773/1549/392 771/1550/392 769/1551/392
+f 789/1547/413 787/1552/413 785/1553/413
+f 753/1554/408 751/1555/408 749/1556/408
+f 745/1557/393 743/1558/393 741/1559/393
+f 733/1560/414 731/1561/414 729/1546/414
+f 729/1546/387 753/1554/387 745/1557/387
+f 753/1554/388 759/1562/388 757/1563/388
+f 761/1542/392 773/1549/392 769/1551/392
+f 729/1546/415 791/1564/415 789/1547/415
+f 737/1565/405 733/1560/405 729/1546/405
+f 753/1554/402 729/1546/402 777/1543/402
+f 757/1563/407 755/1566/407 753/1554/407
+f 753/1554/387 749/1556/387 747/1567/387
+f 777/1543/392 773/1549/392 761/1542/392
+f 761/1542/404 753/1554/404 777/1543/404
+f 729/1546/387 741/1559/387 737/1565/387
+f 753/1554/400 747/1567/400 745/1557/400
+f 785/1553/392 783/1544/392 777/1543/392
+f 777/1543/392 789/1547/392 785/1553/392
+f 737/1565/408 735/1568/408 733/1560/408
+f 761/1542/399 759/1562/399 753/1554/399
+f 769/1551/416 767/1569/416 765/1540/416
+f 745/1557/387 741/1559/387 729/1546/387
+f 769/1551/389 765/1540/389 761/1542/389
+f 781/1545/395 779/1570/395 777/1543/395
+f 741/1559/417 739/1571/417 737/1565/417
+l 794 795
+l 796 793
+l 795 796
+l 798 799
+l 799 800
+l 797 798
+l 826 827
+l 828 825
+l 827 828
+l 830 831
+l 831 832
+l 829 830
diff --git a/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr30.obj b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr30.obj
new file mode 100644
index 0000000..e75292f
--- /dev/null
+++ b/advtrains/advtrains_signals_ks/models/advtrains_signals_ks_main_smr30.obj
@@ -0,0 +1,4293 @@
+# Blender v2.79 (sub 0) OBJ File: 'signal_ks_singlemesh_final.blend'
+# www.blender.org
+mtllib advtrains_signals_ks_main_smr30.mtl
+o KsHauptsignal_Plane.006
+v 0.221998 -0.503378 -0.380515
+v 0.170859 -0.503378 -0.406057
+v 0.196400 -0.503378 -0.457196
+v 0.247539 -0.503378 -0.431654
+v 0.171044 -0.503378 -0.278496
+v 0.145502 -0.503378 -0.227357
+v 0.094363 -0.503378 -0.252898
+v 0.119905 -0.503378 -0.304038
+v 0.221998 -0.299114 -0.380515
+v 0.221998 -0.172218 -0.380515
+v 0.170859 -0.172218 -0.406057
+v 0.170859 -0.299114 -0.406057
+v 0.196400 -0.299114 -0.457196
+v 0.196400 -0.172218 -0.457196
+v 0.247539 -0.172218 -0.431654
+v 0.247539 -0.299114 -0.431654
+v 0.171044 -0.299114 -0.278496
+v 0.171044 -0.172218 -0.278496
+v 0.145502 -0.172218 -0.227357
+v 0.145502 -0.299114 -0.227357
+v 0.094363 -0.299114 -0.252898
+v 0.094363 -0.172218 -0.252898
+v 0.119905 -0.172218 -0.304038
+v 0.119905 -0.299114 -0.304038
+v 0.140710 0.243339 -0.585226
+v 0.128663 0.242789 -0.561107
+v 0.166987 0.253858 -0.630787
+v 0.131461 0.253308 -0.559657
+v 0.171569 0.263561 -0.628450
+v 0.136043 0.263011 -0.557320
+v 0.177758 0.272074 -0.625317
+v 0.142232 0.271524 -0.554187
+v 0.185316 0.279070 -0.621507
+v 0.149790 0.278520 -0.550377
+v 0.193954 0.284280 -0.617167
+v 0.158428 0.283730 -0.546037
+v 0.203339 0.287504 -0.612463
+v 0.167812 0.286954 -0.541333
+v 0.213110 0.288619 -0.607578
+v 0.177584 0.288069 -0.536448
+v 0.222892 0.287581 -0.602697
+v 0.187366 0.287030 -0.531567
+v 0.232310 0.284430 -0.598009
+v 0.196784 0.283880 -0.526879
+v 0.241000 0.279287 -0.593694
+v 0.205474 0.278737 -0.522564
+v 0.248630 0.272350 -0.589918
+v 0.213104 0.271800 -0.518788
+v 0.254905 0.263886 -0.586826
+v 0.219379 0.263336 -0.515696
+v 0.259586 0.254219 -0.584536
+v 0.224060 0.253669 -0.513406
+v 0.239012 0.243722 -0.536127
+v 0.226966 0.243172 -0.512007
+v 0.240026 0.232316 -0.535617
+v 0.227984 0.232252 -0.511553
+v 0.238979 0.221688 -0.535962
+v 0.227076 0.221322 -0.512056
+v 0.236206 0.211344 -0.537391
+v 0.224275 0.210797 -0.513501
+v 0.231622 0.201642 -0.539723
+v 0.219692 0.201094 -0.515833
+v 0.225431 0.193129 -0.542853
+v 0.213501 0.192581 -0.518963
+v 0.217871 0.186134 -0.546660
+v 0.205941 0.185585 -0.522770
+v 0.209233 0.180924 -0.550998
+v 0.197302 0.180374 -0.527107
+v 0.199848 0.177700 -0.555699
+v 0.187916 0.177150 -0.531809
+v 0.190076 0.176585 -0.560584
+v 0.178145 0.176035 -0.536695
+v 0.180294 0.177623 -0.565466
+v 0.168362 0.177073 -0.541576
+v 0.170878 0.180774 -0.570155
+v 0.158945 0.180224 -0.546265
+v 0.162189 0.185916 -0.574472
+v 0.150256 0.185367 -0.550583
+v 0.154561 0.192853 -0.578251
+v 0.142628 0.192304 -0.554362
+v 0.148287 0.201317 -0.581347
+v 0.136354 0.200769 -0.557458
+v 0.143608 0.210983 -0.583641
+v 0.131675 0.210436 -0.559752
+v 0.140735 0.221305 -0.585032
+v 0.128772 0.220938 -0.561157
+v 0.139764 0.231924 -0.585695
+v 0.127756 0.231861 -0.561614
+v 0.138496 0.243790 -0.586326
+v 0.110128 0.243271 -0.529527
+v 0.164899 0.254782 -0.631819
+v 0.113051 0.254264 -0.528010
+v 0.169685 0.264921 -0.629376
+v 0.117837 0.264402 -0.525566
+v 0.176151 0.273816 -0.626099
+v 0.124303 0.273298 -0.522290
+v 0.184049 0.281127 -0.622117
+v 0.132201 0.280609 -0.518307
+v 0.193074 0.286572 -0.617580
+v 0.141226 0.286053 -0.513771
+v 0.202880 0.289941 -0.612665
+v 0.151032 0.289423 -0.508855
+v 0.213091 0.291105 -0.607559
+v 0.161243 0.290587 -0.503750
+v 0.223313 0.290021 -0.602459
+v 0.171465 0.289502 -0.498650
+v 0.233154 0.286728 -0.597561
+v 0.181306 0.286210 -0.493752
+v 0.242236 0.281354 -0.593054
+v 0.190388 0.280836 -0.489244
+v 0.250209 0.274105 -0.589109
+v 0.198361 0.273587 -0.485300
+v 0.256768 0.265261 -0.585880
+v 0.204920 0.264742 -0.482070
+v 0.261660 0.255160 -0.583490
+v 0.209812 0.254641 -0.479680
+v 0.241218 0.244190 -0.535019
+v 0.212850 0.243672 -0.478221
+v 0.242260 0.232775 -0.534499
+v 0.213915 0.232256 -0.477748
+v 0.241222 0.221351 -0.534850
+v 0.212969 0.220833 -0.478281
+v 0.238300 0.210359 -0.536368
+v 0.210046 0.209840 -0.479798
+v 0.233513 0.200220 -0.538811
+v 0.205260 0.199702 -0.482242
+v 0.227047 0.191324 -0.542088
+v 0.198794 0.190806 -0.485519
+v 0.219150 0.184013 -0.546071
+v 0.190896 0.183495 -0.489501
+v 0.210124 0.178569 -0.550607
+v 0.181871 0.178051 -0.494038
+v 0.200318 0.175200 -0.555522
+v 0.172065 0.174682 -0.498953
+v 0.190108 0.174035 -0.560628
+v 0.161854 0.173517 -0.504059
+v 0.179886 0.175120 -0.565728
+v 0.151632 0.174602 -0.509159
+v 0.170045 0.178413 -0.570626
+v 0.141791 0.177894 -0.514057
+v 0.160963 0.183787 -0.575133
+v 0.132709 0.183268 -0.518564
+v 0.152989 0.191035 -0.579078
+v 0.124736 0.190517 -0.522509
+v 0.146430 0.199880 -0.582307
+v 0.118177 0.199362 -0.525738
+v 0.141538 0.209981 -0.584697
+v 0.113285 0.209463 -0.528128
+v 0.138501 0.220950 -0.586157
+v 0.110247 0.220432 -0.529588
+v 0.137526 0.232366 -0.586811
+v 0.109182 0.231848 -0.530060
+v 0.348476 0.506097 -0.481456
+v 0.336429 0.505869 -0.457337
+v 0.373101 0.510448 -0.527843
+v 0.337574 0.510220 -0.456713
+v 0.374984 0.514461 -0.526854
+v 0.339458 0.514233 -0.455724
+v 0.377534 0.517982 -0.525538
+v 0.342008 0.517755 -0.454408
+v 0.380652 0.520876 -0.523946
+v 0.345126 0.520648 -0.452816
+v 0.384219 0.523031 -0.522138
+v 0.348693 0.522803 -0.451008
+v 0.388097 0.524364 -0.520185
+v 0.352571 0.524137 -0.449055
+v 0.392137 0.524825 -0.518162
+v 0.356611 0.524598 -0.447032
+v 0.396185 0.524396 -0.516145
+v 0.360658 0.524168 -0.445015
+v 0.400083 0.523093 -0.514214
+v 0.364557 0.522865 -0.443084
+v 0.403684 0.520966 -0.512441
+v 0.368158 0.520738 -0.441311
+v 0.406848 0.518097 -0.510896
+v 0.371322 0.517869 -0.439765
+v 0.409453 0.514596 -0.509636
+v 0.373927 0.514368 -0.438506
+v 0.411401 0.510597 -0.508712
+v 0.375875 0.510370 -0.437582
+v 0.389135 0.506255 -0.461147
+v 0.377089 0.506028 -0.437028
+v 0.389554 0.501537 -0.460935
+v 0.377523 0.501511 -0.436866
+v 0.389079 0.497142 -0.460994
+v 0.377159 0.496990 -0.437097
+v 0.387942 0.492863 -0.461606
+v 0.376011 0.492637 -0.437716
+v 0.386056 0.488850 -0.462591
+v 0.374125 0.488624 -0.438701
+v 0.383505 0.485329 -0.463903
+v 0.371573 0.485102 -0.440013
+v 0.380385 0.482436 -0.465492
+v 0.368454 0.482209 -0.441602
+v 0.376817 0.480281 -0.467297
+v 0.364886 0.480054 -0.443407
+v 0.372939 0.478947 -0.469248
+v 0.361007 0.478720 -0.445359
+v 0.368898 0.478486 -0.471271
+v 0.356967 0.478259 -0.447382
+v 0.364851 0.478915 -0.473288
+v 0.352919 0.478688 -0.449399
+v 0.360953 0.480219 -0.475221
+v 0.349021 0.479992 -0.451332
+v 0.357354 0.482346 -0.476996
+v 0.345421 0.482119 -0.453107
+v 0.354191 0.485215 -0.478545
+v 0.342259 0.484988 -0.454655
+v 0.351588 0.488716 -0.479808
+v 0.339655 0.488489 -0.455918
+v 0.349643 0.492714 -0.480736
+v 0.337710 0.492488 -0.456847
+v 0.348444 0.496983 -0.481291
+v 0.336499 0.496832 -0.457407
+v 0.348084 0.501376 -0.481649
+v 0.336067 0.501349 -0.457572
+v 0.347559 0.506283 -0.481909
+v 0.319191 0.506069 -0.425110
+v 0.372234 0.510830 -0.528265
+v 0.320386 0.510615 -0.424456
+v 0.374201 0.515023 -0.527229
+v 0.322353 0.514809 -0.423420
+v 0.376865 0.518703 -0.525852
+v 0.325017 0.518489 -0.422043
+v 0.380123 0.521727 -0.524187
+v 0.328275 0.521512 -0.420377
+v 0.383849 0.523979 -0.522297
+v 0.332001 0.523764 -0.418488
+v 0.387901 0.525372 -0.520256
+v 0.336053 0.525158 -0.416446
+v 0.392123 0.525854 -0.518141
+v 0.340275 0.525640 -0.414331
+v 0.396352 0.525405 -0.516034
+v 0.344504 0.525191 -0.412225
+v 0.400427 0.524043 -0.514017
+v 0.348578 0.523829 -0.410207
+v 0.404190 0.521821 -0.512165
+v 0.352342 0.521606 -0.408356
+v 0.407496 0.518822 -0.510552
+v 0.355648 0.518608 -0.406742
+v 0.410220 0.515164 -0.509238
+v 0.358372 0.514950 -0.405428
+v 0.412256 0.510986 -0.508274
+v 0.360408 0.510772 -0.404465
+v 0.390046 0.506449 -0.460687
+v 0.361678 0.506235 -0.403888
+v 0.390477 0.501727 -0.460471
+v 0.362133 0.501513 -0.403721
+v 0.390009 0.497002 -0.460538
+v 0.361755 0.496788 -0.403969
+v 0.388814 0.492455 -0.461193
+v 0.360560 0.492241 -0.404624
+v 0.386846 0.488262 -0.462229
+v 0.358593 0.488048 -0.405660
+v 0.384183 0.484583 -0.463606
+v 0.355929 0.484368 -0.407037
+v 0.380925 0.481559 -0.465271
+v 0.352672 0.481344 -0.408702
+v 0.377199 0.479307 -0.467161
+v 0.348945 0.479092 -0.410592
+v 0.373147 0.477913 -0.469202
+v 0.344893 0.477699 -0.412633
+v 0.368925 0.477432 -0.471317
+v 0.340672 0.477217 -0.414748
+v 0.364696 0.477880 -0.473424
+v 0.336442 0.477666 -0.416855
+v 0.360621 0.479242 -0.475442
+v 0.332368 0.479028 -0.418872
+v 0.356858 0.481465 -0.477293
+v 0.328605 0.481251 -0.420724
+v 0.353551 0.484463 -0.478906
+v 0.325298 0.484249 -0.422337
+v 0.350828 0.488121 -0.480220
+v 0.322574 0.487907 -0.423651
+v 0.348792 0.492299 -0.481184
+v 0.320538 0.492085 -0.424615
+v 0.347522 0.496836 -0.481761
+v 0.319268 0.496622 -0.425192
+v 0.347158 0.501558 -0.482109
+v 0.318813 0.501344 -0.425359
+v 0.319634 0.243339 -0.495861
+v 0.307588 0.242789 -0.471742
+v 0.345912 0.253858 -0.541422
+v 0.310386 0.253308 -0.470292
+v 0.350494 0.263561 -0.539086
+v 0.314967 0.263011 -0.467956
+v 0.356682 0.272074 -0.535952
+v 0.321156 0.271524 -0.464822
+v 0.364241 0.279070 -0.532142
+v 0.328715 0.278520 -0.461012
+v 0.372878 0.284280 -0.527802
+v 0.337352 0.283730 -0.456672
+v 0.382263 0.287504 -0.523099
+v 0.346737 0.286954 -0.451969
+v 0.392034 0.288619 -0.518213
+v 0.356508 0.288069 -0.447083
+v 0.401817 0.287581 -0.513332
+v 0.366291 0.287030 -0.442202
+v 0.411234 0.284430 -0.508645
+v 0.375708 0.283880 -0.437515
+v 0.419925 0.279287 -0.504330
+v 0.384399 0.278737 -0.433200
+v 0.427554 0.272350 -0.500554
+v 0.392028 0.271800 -0.429423
+v 0.433830 0.263886 -0.497461
+v 0.398304 0.263336 -0.426331
+v 0.438511 0.254219 -0.495172
+v 0.402985 0.253669 -0.424042
+v 0.417937 0.243722 -0.446762
+v 0.405890 0.243172 -0.422643
+v 0.418951 0.232316 -0.446252
+v 0.406909 0.232252 -0.422188
+v 0.417904 0.221688 -0.446598
+v 0.406001 0.221322 -0.422692
+v 0.415131 0.211344 -0.448026
+v 0.403200 0.210797 -0.424136
+v 0.410547 0.201642 -0.450359
+v 0.398616 0.201094 -0.426469
+v 0.404356 0.193129 -0.453489
+v 0.392425 0.192581 -0.429598
+v 0.396796 0.186134 -0.457296
+v 0.384866 0.185585 -0.433405
+v 0.388157 0.180924 -0.461633
+v 0.376227 0.180374 -0.437743
+v 0.378772 0.177700 -0.466335
+v 0.366841 0.177150 -0.442445
+v 0.369001 0.176585 -0.471220
+v 0.357069 0.176035 -0.447330
+v 0.359219 0.177623 -0.476101
+v 0.347287 0.177073 -0.452212
+v 0.349803 0.180774 -0.480790
+v 0.337870 0.180224 -0.456901
+v 0.341113 0.185916 -0.485107
+v 0.329180 0.185368 -0.461218
+v 0.333485 0.192853 -0.488886
+v 0.321552 0.192304 -0.464997
+v 0.327211 0.201317 -0.491982
+v 0.315278 0.200769 -0.468093
+v 0.322533 0.210983 -0.494276
+v 0.310600 0.210436 -0.470387
+v 0.319660 0.221305 -0.495668
+v 0.307696 0.220938 -0.471792
+v 0.318689 0.231924 -0.496330
+v 0.306681 0.231861 -0.472249
+v 0.317421 0.243790 -0.496962
+v 0.289053 0.243271 -0.440163
+v 0.343823 0.254782 -0.542455
+v 0.291975 0.254264 -0.438645
+v 0.348610 0.264921 -0.540011
+v 0.296762 0.264402 -0.436202
+v 0.355076 0.273816 -0.536735
+v 0.303228 0.273298 -0.432925
+v 0.362973 0.281127 -0.532752
+v 0.311125 0.280609 -0.428943
+v 0.371999 0.286572 -0.528216
+v 0.320151 0.286053 -0.424406
+v 0.381805 0.289941 -0.523300
+v 0.329957 0.289423 -0.419491
+v 0.392015 0.291105 -0.518195
+v 0.340167 0.290587 -0.414385
+v 0.402238 0.290021 -0.513095
+v 0.350390 0.289502 -0.409285
+v 0.412079 0.286728 -0.508197
+v 0.360231 0.286210 -0.404387
+v 0.421161 0.281354 -0.503689
+v 0.369312 0.280836 -0.399880
+v 0.429134 0.274105 -0.499745
+v 0.377286 0.273587 -0.395935
+v 0.435693 0.265261 -0.496515
+v 0.383845 0.264742 -0.392706
+v 0.440585 0.255160 -0.494125
+v 0.388737 0.254641 -0.390316
+v 0.420143 0.244190 -0.445655
+v 0.391774 0.243672 -0.388856
+v 0.421184 0.232775 -0.445134
+v 0.392840 0.232256 -0.388384
+v 0.420147 0.221351 -0.445486
+v 0.391894 0.220833 -0.388917
+v 0.417225 0.210359 -0.447003
+v 0.388971 0.209840 -0.390434
+v 0.412438 0.200220 -0.449447
+v 0.384184 0.199702 -0.392878
+v 0.405972 0.191324 -0.452723
+v 0.377718 0.190806 -0.396154
+v 0.398074 0.184014 -0.456706
+v 0.369821 0.183495 -0.400137
+v 0.389049 0.178569 -0.461242
+v 0.360795 0.178051 -0.404673
+v 0.379243 0.175200 -0.466158
+v 0.350989 0.174682 -0.409589
+v 0.369032 0.174035 -0.471264
+v 0.340779 0.173517 -0.414694
+v 0.358810 0.175120 -0.476363
+v 0.330557 0.174602 -0.419794
+v 0.348969 0.178413 -0.481261
+v 0.320716 0.177894 -0.424692
+v 0.339887 0.183787 -0.485769
+v 0.311634 0.183268 -0.429200
+v 0.331914 0.191035 -0.489713
+v 0.303660 0.190517 -0.433144
+v 0.325355 0.199880 -0.492943
+v 0.297101 0.199362 -0.436374
+v 0.320463 0.209981 -0.495333
+v 0.292209 0.209463 -0.438764
+v 0.317426 0.220950 -0.496792
+v 0.289172 0.220432 -0.440223
+v 0.316450 0.232366 -0.497446
+v 0.288106 0.231848 -0.440696
+v 0.318813 -0.005892 -0.425359
+v 0.347158 -0.005677 -0.482109
+v 0.319268 -0.010613 -0.425192
+v 0.347522 -0.010399 -0.481761
+v 0.320538 -0.015150 -0.424615
+v 0.348792 -0.014936 -0.481184
+v 0.322574 -0.019328 -0.423651
+v 0.350828 -0.019114 -0.480220
+v 0.325298 -0.022987 -0.422337
+v 0.353551 -0.022772 -0.478906
+v 0.328605 -0.025985 -0.420724
+v 0.356858 -0.025771 -0.477293
+v 0.332368 -0.028208 -0.418872
+v 0.360621 -0.027993 -0.475442
+v 0.336442 -0.029570 -0.416855
+v 0.364696 -0.029355 -0.473424
+v 0.340672 -0.030018 -0.414748
+v 0.368925 -0.029804 -0.471317
+v 0.344893 -0.029537 -0.412633
+v 0.373147 -0.029322 -0.469202
+v 0.348945 -0.028143 -0.410592
+v 0.377199 -0.027929 -0.467161
+v 0.352672 -0.025891 -0.408702
+v 0.380925 -0.025677 -0.465271
+v 0.355929 -0.022867 -0.407037
+v 0.384183 -0.022653 -0.463606
+v 0.358593 -0.019188 -0.405660
+v 0.386846 -0.018973 -0.462229
+v 0.360560 -0.014994 -0.404624
+v 0.388814 -0.014780 -0.461193
+v 0.361755 -0.010448 -0.403969
+v 0.390009 -0.010233 -0.460538
+v 0.362133 -0.005723 -0.403721
+v 0.390477 -0.005508 -0.460471
+v 0.361678 -0.001001 -0.403888
+v 0.390046 -0.000787 -0.460687
+v 0.360408 0.003536 -0.404465
+v 0.412256 0.003751 -0.508274
+v 0.358372 0.007714 -0.405428
+v 0.410220 0.007929 -0.509238
+v 0.355648 0.011373 -0.406742
+v 0.407496 0.011587 -0.510552
+v 0.352342 0.014371 -0.408356
+v 0.404190 0.014585 -0.512165
+v 0.348578 0.016593 -0.410207
+v 0.400427 0.016808 -0.514017
+v 0.344504 0.017955 -0.412225
+v 0.396352 0.018170 -0.516034
+v 0.340275 0.018404 -0.414331
+v 0.392123 0.018618 -0.518141
+v 0.336053 0.017922 -0.416446
+v 0.387901 0.018137 -0.520256
+v 0.332001 0.016529 -0.418488
+v 0.383849 0.016743 -0.522297
+v 0.328275 0.014277 -0.420377
+v 0.380123 0.014491 -0.524187
+v 0.325017 0.011253 -0.422043
+v 0.376865 0.011467 -0.525852
+v 0.322353 0.007574 -0.423420
+v 0.374201 0.007788 -0.527229
+v 0.320386 0.003380 -0.424456
+v 0.372234 0.003594 -0.528265
+v 0.319191 -0.001167 -0.425110
+v 0.347559 -0.000952 -0.481909
+v 0.336067 -0.005886 -0.457572
+v 0.348084 -0.005860 -0.481649
+v 0.336499 -0.010404 -0.457407
+v 0.348444 -0.010252 -0.481291
+v 0.337710 -0.014748 -0.456847
+v 0.349643 -0.014522 -0.480736
+v 0.339655 -0.018746 -0.455918
+v 0.351588 -0.018520 -0.479808
+v 0.342259 -0.022247 -0.454655
+v 0.354191 -0.022021 -0.478545
+v 0.345421 -0.025117 -0.453107
+v 0.357354 -0.024890 -0.476996
+v 0.349021 -0.027244 -0.451332
+v 0.360953 -0.027017 -0.475221
+v 0.352919 -0.028547 -0.449399
+v 0.364851 -0.028320 -0.473288
+v 0.356967 -0.028977 -0.447382
+v 0.368898 -0.028749 -0.471271
+v 0.361007 -0.028516 -0.445359
+v 0.372939 -0.028288 -0.469248
+v 0.364886 -0.027182 -0.443407
+v 0.376817 -0.026955 -0.467297
+v 0.368454 -0.025027 -0.441602
+v 0.380385 -0.024800 -0.465492
+v 0.371573 -0.022133 -0.440013
+v 0.383505 -0.021906 -0.463903
+v 0.374125 -0.018612 -0.438701
+v 0.386056 -0.018385 -0.462591
+v 0.376011 -0.014598 -0.437716
+v 0.387942 -0.014372 -0.461606
+v 0.377159 -0.010245 -0.437097
+v 0.389079 -0.010094 -0.460994
+v 0.377523 -0.005724 -0.436866
+v 0.389554 -0.005698 -0.460935
+v 0.377089 -0.001208 -0.437028
+v 0.389135 -0.000980 -0.461147
+v 0.375875 0.003134 -0.437582
+v 0.411401 0.003362 -0.508712
+v 0.373927 0.007132 -0.438506
+v 0.409453 0.007360 -0.509636
+v 0.371322 0.010633 -0.439765
+v 0.406848 0.010861 -0.510896
+v 0.368158 0.013503 -0.441311
+v 0.403684 0.013730 -0.512441
+v 0.364557 0.015630 -0.443084
+v 0.400083 0.015857 -0.514214
+v 0.360658 0.016933 -0.445015
+v 0.396185 0.017161 -0.516145
+v 0.356611 0.017362 -0.447032
+v 0.392137 0.017590 -0.518162
+v 0.352571 0.016901 -0.449055
+v 0.388097 0.017129 -0.520185
+v 0.348693 0.015568 -0.451008
+v 0.384219 0.015795 -0.522138
+v 0.345126 0.013413 -0.452816
+v 0.380652 0.013640 -0.523946
+v 0.342008 0.010519 -0.454408
+v 0.377534 0.010747 -0.525538
+v 0.339458 0.006998 -0.455724
+v 0.374984 0.007226 -0.526854
+v 0.337574 0.002985 -0.456713
+v 0.373101 0.003212 -0.527843
+v 0.336429 -0.001366 -0.457337
+v 0.348476 -0.001139 -0.481456
+v 0.230172 0.400585 -0.540544
+v 0.218126 0.400035 -0.516424
+v 0.256450 0.411104 -0.586105
+v 0.220924 0.410554 -0.514975
+v 0.261031 0.420807 -0.583768
+v 0.225505 0.420257 -0.512638
+v 0.267220 0.429320 -0.580635
+v 0.231694 0.428770 -0.509505
+v 0.274779 0.436316 -0.576825
+v 0.239253 0.435766 -0.505695
+v 0.283416 0.441526 -0.572484
+v 0.247890 0.440976 -0.501354
+v 0.292801 0.444750 -0.567781
+v 0.257275 0.444201 -0.496651
+v 0.302572 0.445865 -0.562895
+v 0.267046 0.445315 -0.491765
+v 0.312355 0.444827 -0.558015
+v 0.276828 0.444276 -0.486885
+v 0.321772 0.441676 -0.553327
+v 0.286246 0.441126 -0.482197
+v 0.330462 0.436533 -0.549012
+v 0.294936 0.435983 -0.477882
+v 0.338092 0.429597 -0.545236
+v 0.302566 0.429046 -0.474106
+v 0.344368 0.421132 -0.542144
+v 0.308842 0.420582 -0.471014
+v 0.349049 0.411466 -0.539854
+v 0.313522 0.410915 -0.468724
+v 0.328474 0.400968 -0.491444
+v 0.316428 0.400418 -0.467325
+v 0.329489 0.389562 -0.490934
+v 0.317447 0.389498 -0.466871
+v 0.328442 0.378934 -0.491280
+v 0.316539 0.378568 -0.467374
+v 0.325668 0.368590 -0.492709
+v 0.313738 0.368043 -0.468819
+v 0.321084 0.358888 -0.495041
+v 0.309154 0.358340 -0.471151
+v 0.314894 0.350376 -0.498171
+v 0.302963 0.349827 -0.474281
+v 0.307334 0.343380 -0.501978
+v 0.295403 0.342831 -0.478087
+v 0.298695 0.338170 -0.506315
+v 0.286764 0.337620 -0.482425
+v 0.289310 0.334946 -0.511017
+v 0.277379 0.334396 -0.487127
+v 0.279539 0.333831 -0.515902
+v 0.267607 0.333281 -0.492013
+v 0.269757 0.334869 -0.520783
+v 0.257824 0.334319 -0.496894
+v 0.260340 0.338020 -0.525472
+v 0.248408 0.337471 -0.501583
+v 0.251651 0.343162 -0.529790
+v 0.239718 0.342614 -0.505901
+v 0.244023 0.350099 -0.533569
+v 0.232090 0.349550 -0.509680
+v 0.237749 0.358563 -0.536665
+v 0.225816 0.358015 -0.512776
+v 0.233071 0.368229 -0.538959
+v 0.221138 0.367682 -0.515069
+v 0.230198 0.378551 -0.540350
+v 0.218234 0.378184 -0.516474
+v 0.229226 0.389171 -0.541012
+v 0.217218 0.389107 -0.516932
+v 0.227959 0.401036 -0.541644
+v 0.199590 0.400517 -0.484845
+v 0.254361 0.412028 -0.587137
+v 0.202513 0.411510 -0.483328
+v 0.259148 0.422167 -0.584693
+v 0.207300 0.421649 -0.480884
+v 0.265614 0.431063 -0.581417
+v 0.213765 0.430544 -0.477608
+v 0.273511 0.438373 -0.577434
+v 0.221663 0.437855 -0.473625
+v 0.282536 0.443818 -0.572898
+v 0.230688 0.443299 -0.469089
+v 0.292343 0.447187 -0.567983
+v 0.240495 0.446669 -0.464173
+v 0.302553 0.448351 -0.562877
+v 0.250705 0.447833 -0.459067
+v 0.312775 0.447267 -0.557777
+v 0.260927 0.446748 -0.453968
+v 0.322616 0.443974 -0.552879
+v 0.270768 0.443456 -0.449070
+v 0.331698 0.438600 -0.548371
+v 0.279850 0.438082 -0.444562
+v 0.339672 0.431351 -0.544427
+v 0.287824 0.430833 -0.440618
+v 0.346230 0.422507 -0.541198
+v 0.294382 0.421988 -0.437388
+v 0.351123 0.412406 -0.538807
+v 0.299275 0.411887 -0.434998
+v 0.330680 0.401436 -0.490337
+v 0.302312 0.400918 -0.433538
+v 0.331722 0.390021 -0.489817
+v 0.303378 0.389503 -0.433066
+v 0.330685 0.378597 -0.490168
+v 0.302431 0.378079 -0.433599
+v 0.327762 0.367605 -0.491685
+v 0.299509 0.367086 -0.435116
+v 0.322976 0.357466 -0.494129
+v 0.294722 0.356948 -0.437560
+v 0.316510 0.348570 -0.497405
+v 0.288256 0.348052 -0.440836
+v 0.308612 0.341260 -0.501388
+v 0.280358 0.340741 -0.444819
+v 0.299587 0.335815 -0.505925
+v 0.271333 0.335297 -0.449355
+v 0.289781 0.332446 -0.510840
+v 0.261527 0.331928 -0.454271
+v 0.279570 0.331281 -0.515946
+v 0.251316 0.330763 -0.459377
+v 0.269348 0.332366 -0.521046
+v 0.241094 0.331848 -0.464477
+v 0.259507 0.335659 -0.525943
+v 0.231253 0.335141 -0.469374
+v 0.250425 0.341033 -0.530451
+v 0.222171 0.340515 -0.473882
+v 0.242451 0.348281 -0.534396
+v 0.214198 0.347763 -0.477826
+v 0.235893 0.357126 -0.537625
+v 0.207639 0.356608 -0.481056
+v 0.231001 0.367227 -0.540015
+v 0.202747 0.366709 -0.483446
+v 0.227963 0.378196 -0.541474
+v 0.199710 0.377678 -0.484906
+v 0.226988 0.389612 -0.542129
+v 0.198644 0.389094 -0.485378
+v 0.229351 0.094108 -0.470041
+v 0.257695 0.094323 -0.526792
+v 0.229806 0.089387 -0.469874
+v 0.258060 0.089601 -0.526443
+v 0.231076 0.084850 -0.469297
+v 0.259329 0.085064 -0.525866
+v 0.233112 0.080672 -0.468333
+v 0.261365 0.080886 -0.524903
+v 0.235835 0.077013 -0.467019
+v 0.264089 0.077228 -0.523589
+v 0.239142 0.074015 -0.465406
+v 0.267396 0.074229 -0.521975
+v 0.242905 0.071792 -0.463555
+v 0.271159 0.072007 -0.520124
+v 0.246980 0.070430 -0.461537
+v 0.275234 0.070645 -0.518106
+v 0.251209 0.069982 -0.459430
+v 0.279463 0.070196 -0.515999
+v 0.255431 0.070463 -0.457316
+v 0.283685 0.070678 -0.513885
+v 0.259483 0.071857 -0.455274
+v 0.287737 0.072071 -0.511843
+v 0.263209 0.074109 -0.453384
+v 0.291463 0.074323 -0.509953
+v 0.266467 0.077133 -0.451719
+v 0.294721 0.077347 -0.508288
+v 0.269130 0.080812 -0.450342
+v 0.297384 0.081027 -0.506911
+v 0.271098 0.085006 -0.449306
+v 0.299351 0.085220 -0.505875
+v 0.272293 0.089552 -0.448651
+v 0.300547 0.089767 -0.505221
+v 0.272670 0.094278 -0.448403
+v 0.301015 0.094492 -0.505154
+v 0.272216 0.098999 -0.448570
+v 0.300584 0.099214 -0.505369
+v 0.270946 0.103536 -0.449147
+v 0.322794 0.103751 -0.552956
+v 0.268910 0.107714 -0.450111
+v 0.320758 0.107929 -0.553920
+v 0.266186 0.111373 -0.451424
+v 0.318034 0.111587 -0.555234
+v 0.262879 0.114371 -0.453038
+v 0.314727 0.114585 -0.556848
+v 0.259116 0.116594 -0.454889
+v 0.310964 0.116808 -0.558699
+v 0.255042 0.117955 -0.456907
+v 0.306890 0.118170 -0.560717
+v 0.250812 0.118404 -0.459014
+v 0.302660 0.118618 -0.562823
+v 0.246590 0.117922 -0.461128
+v 0.298439 0.118137 -0.564938
+v 0.242539 0.116529 -0.463170
+v 0.294387 0.116743 -0.566979
+v 0.238812 0.114277 -0.465060
+v 0.290660 0.114491 -0.568869
+v 0.235555 0.111253 -0.466725
+v 0.287403 0.111467 -0.570535
+v 0.232891 0.107574 -0.468102
+v 0.284739 0.107788 -0.571911
+v 0.230924 0.103380 -0.469138
+v 0.282772 0.103594 -0.572947
+v 0.229729 0.098833 -0.469793
+v 0.258097 0.099048 -0.526591
+v 0.246605 0.094114 -0.502255
+v 0.258622 0.094140 -0.526331
+v 0.247036 0.089596 -0.502089
+v 0.258982 0.089748 -0.525974
+v 0.248248 0.085252 -0.501529
+v 0.260180 0.085478 -0.525419
+v 0.250193 0.081254 -0.500600
+v 0.262125 0.081480 -0.524490
+v 0.252797 0.077753 -0.499338
+v 0.264729 0.077979 -0.523227
+v 0.255959 0.074883 -0.497789
+v 0.267891 0.075110 -0.521678
+v 0.259559 0.072756 -0.496014
+v 0.271491 0.072983 -0.519903
+v 0.263457 0.071453 -0.494081
+v 0.275389 0.071680 -0.517970
+v 0.267504 0.071023 -0.492064
+v 0.279436 0.071251 -0.515953
+v 0.271545 0.071484 -0.490041
+v 0.283476 0.071712 -0.513931
+v 0.275424 0.072818 -0.488089
+v 0.287355 0.073045 -0.511979
+v 0.278991 0.074973 -0.486284
+v 0.290923 0.075200 -0.510174
+v 0.282111 0.077867 -0.484695
+v 0.294042 0.078094 -0.508585
+v 0.284663 0.081388 -0.483383
+v 0.296594 0.081615 -0.507273
+v 0.286549 0.085402 -0.482398
+v 0.298480 0.085628 -0.506288
+v 0.287697 0.089755 -0.481779
+v 0.299617 0.089906 -0.505677
+v 0.288060 0.094276 -0.481548
+v 0.300091 0.094302 -0.505617
+v 0.287626 0.098792 -0.481710
+v 0.299673 0.099020 -0.505829
+v 0.286412 0.103134 -0.482264
+v 0.321938 0.103362 -0.553394
+v 0.284465 0.107132 -0.483189
+v 0.319991 0.107360 -0.554319
+v 0.281859 0.110633 -0.484448
+v 0.317385 0.110861 -0.555578
+v 0.278695 0.113503 -0.485993
+v 0.314222 0.113730 -0.557124
+v 0.275095 0.115630 -0.487766
+v 0.310621 0.115857 -0.558896
+v 0.271196 0.116933 -0.489698
+v 0.306722 0.117161 -0.560828
+v 0.267149 0.117363 -0.491714
+v 0.302675 0.117590 -0.562844
+v 0.263108 0.116902 -0.493738
+v 0.298634 0.117129 -0.564868
+v 0.259230 0.115568 -0.495690
+v 0.294757 0.115795 -0.566820
+v 0.255664 0.113413 -0.497498
+v 0.291190 0.113640 -0.568628
+v 0.252546 0.110519 -0.499090
+v 0.288072 0.110747 -0.570220
+v 0.249996 0.106998 -0.500406
+v 0.285522 0.107226 -0.571536
+v 0.248112 0.102985 -0.501395
+v 0.283638 0.103212 -0.572525
+v 0.246967 0.098634 -0.502019
+v 0.259014 0.098861 -0.526139
+v 0.221998 -0.168051 -0.380515
+v 0.170859 -0.168051 -0.406057
+v 0.196400 -0.168051 -0.457196
+v 0.247539 -0.168051 -0.431654
+v 0.171044 -0.168051 -0.278496
+v 0.145502 -0.168051 -0.227357
+v 0.094363 -0.168051 -0.252898
+v 0.119905 -0.168051 -0.304038
+v 0.094363 -0.168051 -0.252898
+v 0.145502 -0.168051 -0.227357
+v 0.247539 -0.168051 -0.431654
+v 0.196400 -0.168051 -0.457196
+v 0.119905 -0.168051 -0.304038
+v 0.170859 -0.168051 -0.406057
+v 0.171044 -0.168051 -0.278496
+v 0.221998 -0.168051 -0.380515
+v 0.221998 0.037812 -0.380515
+v 0.221998 0.165702 -0.380515
+v 0.170859 0.165702 -0.406057
+v 0.170859 0.037812 -0.406057
+v 0.196400 0.037812 -0.457196
+v 0.196400 0.165702 -0.457196
+v 0.247539 0.165702 -0.431654
+v 0.247539 0.037812 -0.431654
+v 0.171044 0.037812 -0.278496
+v 0.171044 0.165702 -0.278496
+v 0.145502 0.165702 -0.227357
+v 0.145502 0.037812 -0.227357
+v 0.094363 0.037812 -0.252898
+v 0.094363 0.165702 -0.252898
+v 0.119905 0.165702 -0.304038
+v 0.119905 0.037812 -0.304038
+v 0.221998 0.166622 -0.380515
+v 0.170859 0.166622 -0.406057
+v 0.196400 0.166622 -0.457196
+v 0.247539 0.166622 -0.431654
+v 0.171044 0.166622 -0.278496
+v 0.145502 0.166622 -0.227357
+v 0.094363 0.166622 -0.252898
+v 0.119905 0.166622 -0.304038
+v 0.094363 0.166622 -0.252898
+v 0.145502 0.166622 -0.227357
+v 0.247539 0.166622 -0.431654
+v 0.196400 0.166622 -0.457196
+v 0.119905 0.166622 -0.304038
+v 0.170859 0.166622 -0.406057
+v 0.171044 0.166622 -0.278496
+v 0.221998 0.166622 -0.380515
+v 0.221998 0.370885 -0.380515
+v 0.221998 0.497782 -0.380515
+v 0.170859 0.497782 -0.406057
+v 0.170859 0.370885 -0.406057
+v 0.196400 0.370885 -0.457196
+v 0.196400 0.497782 -0.457196
+v 0.247539 0.497782 -0.431654
+v 0.247539 0.370885 -0.431654
+v 0.171044 0.370885 -0.278496
+v 0.171044 0.497782 -0.278496
+v 0.145502 0.497782 -0.227357
+v 0.145502 0.370885 -0.227357
+v 0.094363 0.370885 -0.252898
+v 0.094363 0.497782 -0.252898
+v 0.119905 0.497782 -0.304038
+v 0.119905 0.370885 -0.304038
+v 0.486059 -0.145166 -0.370328
+v 0.038748 -0.145166 -0.593739
+v 0.486059 0.603749 -0.370327
+v 0.038748 0.603749 -0.593739
+v 0.464872 0.603749 -0.327906
+v 0.464872 -0.145166 -0.327906
+v 0.017561 -0.145166 -0.551317
+v 0.017560 0.603749 -0.551317
+vt 0.285559 0.095797
+vt 0.214079 0.095797
+vt 0.214079 0.000000
+vt 0.285559 0.000000
+vt 0.357039 0.095797
+vt 0.285559 0.095797
+vt 0.285559 0.000000
+vt 0.357039 0.000000
+vt 0.642599 0.095797
+vt 0.571118 0.095797
+vt 0.571118 0.000000
+vt 0.642598 0.000000
+vt 0.714079 0.904203
+vt 0.785559 0.904203
+vt 0.785559 1.000000
+vt 0.714079 1.000000
+vt 0.642599 0.904203
+vt 0.714079 0.904203
+vt 0.714079 1.000000
+vt 0.642599 1.000000
+vt 0.071480 0.095797
+vt 0.000000 0.095797
+vt 0.000000 0.000000
+vt 0.071480 0.000000
+vt 0.571118 0.095797
+vt 0.499638 0.095797
+vt 0.499638 0.000000
+vt 0.571118 0.000000
+vt 0.857040 0.394495
+vt 0.928520 0.394495
+vt 0.928520 0.480583
+vt 0.857040 0.480583
+vt 0.857040 0.129242
+vt 0.785559 0.129242
+vt 0.785559 0.043154
+vt 0.857040 0.043154
+vt 0.785559 0.172396
+vt 0.857040 0.172396
+vt 0.785559 0.000000
+vt 0.857040 0.000000
+vt 0.285559 0.250000
+vt 0.214079 0.250000
+vt 0.357039 0.250000
+vt 0.285559 0.250000
+vt 0.642599 0.250000
+vt 0.571118 0.250000
+vt 0.714079 0.750000
+vt 0.785559 0.750000
+vt 0.642599 0.750000
+vt 0.714079 0.750000
+vt 0.928520 0.154203
+vt 0.857040 0.154203
+vt 0.857040 0.000000
+vt 0.928520 0.000000
+vt 0.071480 0.250000
+vt 0.000000 0.250000
+vt 0.571118 0.250000
+vt 0.499638 0.250000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.615085 0.501950
+vt 0.538102 0.501950
+vt 0.538102 0.192341
+vt 0.615085 0.192341
+vt 0.538102 0.000000
+vt 0.615085 0.000000
+vt 0.076983 0.501950
+vt 0.000000 0.501950
+vt 0.000000 0.192341
+vt 0.076983 0.192341
+vt 0.000000 0.000000
+vt 0.076983 0.000000
+vt 0.692068 0.501950
+vt 0.692068 0.192341
+vt 0.692068 0.000000
+vt 0.769051 0.501950
+vt 0.692068 0.501950
+vt 0.692068 0.192341
+vt 0.769051 0.192341
+vt 0.692068 0.000000
+vt 0.769051 0.000000
+vt 0.846034 0.501950
+vt 0.769051 0.501950
+vt 0.769051 0.192341
+vt 0.846034 0.192341
+vt 0.769051 0.000000
+vt 0.846034 0.000000
+vt 0.923017 0.996502
+vt 0.846034 0.996502
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.384526 0.501950
+vt 0.307543 0.501950
+vt 0.307542 0.192341
+vt 0.384525 0.192341
+vt 0.307542 0.000000
+vt 0.384525 0.000000
+vt 0.307542 0.501950
+vt 0.230559 0.501950
+vt 0.230559 0.192341
+vt 0.307542 0.192341
+vt 0.230559 0.000000
+vt 0.307542 0.000000
+vt 0.923017 0.478709
+vt 1.000000 0.478709
+vt 1.000000 0.650215
+vt 0.923017 0.650215
+vt 0.923017 0.600923
+vt 0.846034 0.600923
+vt 0.846034 0.429417
+vt 0.923017 0.429417
+vt 0.846034 0.686893
+vt 0.923017 0.686893
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.615085 1.000000
+vt 0.538102 1.000000
+vt 0.538102 0.692796
+vt 0.615085 0.692796
+vt 0.538102 0.501950
+vt 0.615085 0.501950
+vt 0.076983 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.692797
+vt 0.076983 0.692797
+vt 0.000000 0.501950
+vt 0.076983 0.501950
+vt 0.769051 1.000000
+vt 0.692068 1.000000
+vt 0.692068 0.692796
+vt 0.769051 0.692796
+vt 0.692068 0.501950
+vt 0.769051 0.501950
+vt 0.615085 0.501950
+vt 0.692068 0.501950
+vt 0.692068 0.809153
+vt 0.615085 0.809153
+vt 0.692068 1.000000
+vt 0.615085 1.000000
+vt 0.846034 1.000000
+vt 0.769051 1.000000
+vt 0.769051 0.692796
+vt 0.846034 0.692796
+vt 0.769051 0.501950
+vt 0.846034 0.501950
+vt 1.000000 0.307203
+vt 0.923017 0.307203
+vt 0.923017 0.000000
+vt 1.000000 0.000000
+vt 0.384526 1.000000
+vt 0.307543 1.000000
+vt 0.307542 0.692797
+vt 0.384525 0.692797
+vt 0.307542 0.501950
+vt 0.384525 0.501950
+vt 0.307542 1.000000
+vt 0.230559 1.000000
+vt 0.230559 0.692797
+vt 0.307542 0.692796
+vt 0.230559 0.501950
+vt 0.307542 0.501950
+vt 0.923017 0.307203
+vt 1.000000 0.307203
+vt 1.000000 0.478709
+vt 0.923017 0.478709
+vt 0.923017 0.257476
+vt 0.846034 0.257476
+vt 0.846034 0.085970
+vt 0.923017 0.085970
+vt 0.846034 0.343447
+vt 0.923017 0.343447
+vt 0.846034 0.000000
+vt 0.923017 0.000000
+vt 0.875462 0.748915
+vt 0.437731 0.748915
+vt 0.437731 0.000000
+vt 0.875462 0.000000
+vt 0.437731 0.000000
+vt 0.437731 0.748915
+vt 0.000000 0.748915
+vt 0.000000 0.000000
+vt 0.958487 0.748915
+vt 0.916975 0.748915
+vt 0.916975 0.000000
+vt 0.958487 0.000000
+vt 0.958487 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.958487 0.500000
+vt 1.000000 1.000000
+vt 0.958487 1.000000
+vt 0.958487 0.500000
+vt 1.000000 0.500000
+vt 0.875462 0.000000
+vt 0.916974 0.000000
+vt 0.916975 0.748915
+vt 0.875462 0.748915
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.371443 0.812167
+vt 0.371352 0.783117
+vt 0.443163 0.783546
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.319278 0.869069
+vt 0.006467 0.407437
+vt 0.176492 0.407399
+vt 0.176430 0.438254
+vt 0.442897 0.340661
+vt 0.229109 0.340661
+vt 0.370467 0.312068
+vt 0.319524 0.069087
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.856681 0.436209
+vt 0.834553 0.458608
+vt 0.830124 0.453224
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.229049 0.665457
+vt 0.228992 0.635930
+vt 0.442780 0.635930
+vt 0.442967 0.311134
+vt 0.443056 0.281620
+vt 0.228890 0.547350
+vt 0.228883 0.517823
+vt 0.442670 0.517822
+vt 0.443060 0.754024
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.370709 0.754396
+vt 0.370472 0.723575
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.792953 0.086670
+vt 0.789700 0.092175
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.687628 0.489885
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.370705 0.281246
+vt 0.371348 0.252525
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.228889 0.488295
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.176359 0.530816
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.371495 0.164423
+vt 0.177644 0.253134
+vt 0.177399 0.283987
+vt 0.006828 0.284020
+vt 0.176549 0.654233
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.443160 0.252098
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.442698 0.458768
+vt 0.228910 0.458769
+vt 0.228944 0.429242
+vt 0.442732 0.429241
+vt 0.228990 0.399716
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.228912 0.576877
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.371029 0.959797
+vt 0.443079 0.931196
+vt 0.442853 0.074922
+vt 0.371043 0.075847
+vt 0.370712 0.046322
+vt 0.371495 0.841694
+vt 0.443254 0.813086
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.763884 0.080481
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.808610 0.476251
+vt 0.805300 0.470133
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.006827 0.746834
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.632640 0.461897
+vt 0.442971 0.724510
+vt 0.006929 0.253167
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.442700 0.576876
+vt 0.176474 0.623379
+vt 0.006524 0.654271
+vt 0.006543 0.376583
+vt 0.229113 0.694984
+vt 0.442837 0.665456
+vt 0.007520 0.068042
+vt 0.371492 0.871219
+vt 0.443302 0.872141
+vt 0.689480 0.483245
+vt 0.443305 0.163503
+vt 0.371427 0.134897
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.442678 0.488295
+vt 0.777761 0.481894
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.636826 0.456466
+vt 0.579568 0.357437
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.007122 0.191458
+vt 0.812355 0.108585
+vt 0.582798 0.148853
+vt 0.589057 0.151745
+vt 0.007276 0.870250
+vt 0.007319 0.129750
+vt 0.006448 0.623417
+vt 0.886228 0.380492
+vt 0.879533 0.378395
+vt 0.442833 0.370188
+vt 0.370694 0.989321
+vt 0.442838 0.960722
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.599888 0.122511
+vt 0.676401 0.072253
+vt 0.443237 0.133976
+vt 0.443305 0.842613
+vt 0.867982 0.406513
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.892437 0.317355
+vt 0.442901 0.694984
+vt 0.006361 0.469146
+vt 0.007499 0.931958
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.006929 0.253167
+vt 0.007025 0.222313
+vt 0.177644 0.253134
+vt 0.442678 0.488295
+vt 0.228889 0.488295
+vt 0.228910 0.458769
+vt 0.442670 0.517822
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.689480 0.483245
+vt 0.718747 0.488548
+vt 0.687628 0.489885
+vt 0.371352 0.783117
+vt 0.370709 0.754396
+vt 0.443060 0.754024
+vt 0.442971 0.724510
+vt 0.370472 0.723575
+vt 0.228883 0.517823
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.892437 0.317355
+vt 0.885704 0.319257
+vt 0.879631 0.287703
+vt 0.586362 0.385333
+vt 0.579817 0.387126
+vt 0.579568 0.357437
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.748545 0.488099
+vt 0.749318 0.494983
+vt 0.718195 0.495436
+vt 0.836176 0.125250
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.319423 0.099941
+vt 0.319322 0.130795
+vt 0.007319 0.129750
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.007419 0.098896
+vt 0.763884 0.080481
+vt 0.765981 0.074365
+vt 0.789700 0.092175
+vt 0.443302 0.872141
+vt 0.442833 0.370188
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.319626 0.038233
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.808610 0.476251
+vt 0.779839 0.488518
+vt 0.777761 0.481894
+vt 0.176640 0.685087
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.371495 0.841694
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.006614 0.685125
+vt 0.006467 0.407437
+vt 0.006543 0.376583
+vt 0.176492 0.407399
+vt 0.892437 0.349226
+vt 0.886228 0.380492
+vt 0.885423 0.348954
+vt 0.599888 0.122511
+vt 0.605204 0.126737
+vt 0.589057 0.151745
+vt 0.443305 0.193031
+vt 0.443252 0.222558
+vt 0.371495 0.193949
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.610260 0.440534
+vt 0.735929 0.074111
+vt 0.736753 0.067631
+vt 0.442837 0.665456
+vt 0.229049 0.665457
+vt 0.442780 0.635930
+vt 0.006361 0.469146
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.598317 0.411848
+vt 0.592437 0.415287
+vt 0.442678 0.547349
+vt 0.228890 0.547350
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.371442 0.223476
+vt 0.442504 0.990249
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.621946 0.100560
+vt 0.647824 0.083609
+vt 0.626230 0.105756
+vt 0.371492 0.871219
+vt 0.615392 0.436018
+vt 0.442732 0.429241
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.007499 0.931958
+vt 0.879533 0.378395
+vt 0.867982 0.406513
+vt 0.572791 0.357181
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.371280 0.105372
+vt 0.442853 0.074922
+vt 0.443090 0.104449
+vt 0.371043 0.075847
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.578089 0.326242
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.319502 0.930776
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.792953 0.086670
+vt 0.816609 0.103895
+vt 0.812355 0.108585
+vt 0.176549 0.654233
+vt 0.650942 0.089526
+vt 0.006828 0.284020
+vt 0.177399 0.283987
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.571207 0.326153
+vt 0.006524 0.654271
+vt 0.442901 0.694984
+vt 0.229113 0.694984
+vt 0.007122 0.191458
+vt 0.831035 0.128981
+vt 0.006390 0.592562
+vt 0.176415 0.592525
+vt 0.006448 0.623417
+vt 0.805300 0.470133
+vt 0.228990 0.399716
+vt 0.582798 0.148853
+vt 0.176430 0.438254
+vt 0.886223 0.285996
+vt 0.706979 0.073452
+vt 0.706468 0.066881
+vt 0.176474 0.623379
+vt 0.229109 0.340661
+vt 0.834553 0.458608
+vt 0.676401 0.072253
+vt 0.228992 0.635930
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.443079 0.931196
+vt 0.442700 0.576876
+vt 0.176377 0.561671
+vt 0.228912 0.576877
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.370712 0.046322
+vt 0.830124 0.453224
+vt 0.007220 0.160604
+vt 0.370705 0.281246
+vt 0.176359 0.530816
+vt 0.443305 0.842613
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.442897 0.340661
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.319390 0.899923
+vt 0.678244 0.078632
+vt 0.006334 0.530854
+vt 0.006351 0.561708
+vt 0.856681 0.436209
+vt 0.443163 0.783546
+vt 0.007728 0.993666
+vt 0.007623 0.037188
+vt 0.007387 0.901104
+vt 0.319224 0.161649
+vt 0.442522 0.045396
+vt 0.006827 0.746834
+vt 0.007165 0.839396
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.319168 0.838215
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.442670 0.517822
+vt 0.228883 0.517823
+vt 0.228889 0.488295
+vt 0.442971 0.724510
+vt 0.443060 0.754024
+vt 0.370472 0.723575
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.443163 0.783546
+vt 0.371352 0.783117
+vt 0.006929 0.253167
+vt 0.177644 0.253134
+vt 0.006828 0.284020
+vt 0.007055 0.808541
+vt 0.006941 0.777687
+vt 0.177771 0.808498
+vt 0.006827 0.746834
+vt 0.176852 0.746796
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.371492 0.871219
+vt 0.371495 0.841694
+vt 0.443305 0.842613
+vt 0.615392 0.436018
+vt 0.610260 0.440534
+vt 0.592437 0.415287
+vt 0.816609 0.103895
+vt 0.836176 0.125250
+vt 0.831035 0.128981
+vt 0.706468 0.066881
+vt 0.736753 0.067631
+vt 0.735929 0.074111
+vt 0.647824 0.083609
+vt 0.650942 0.089526
+vt 0.626230 0.105756
+vt 0.765981 0.074365
+vt 0.763884 0.080481
+vt 0.579817 0.387126
+vt 0.586362 0.385333
+vt 0.621946 0.100560
+vt 0.605204 0.126737
+vt 0.706979 0.073452
+vt 0.678244 0.078632
+vt 0.792953 0.086670
+vt 0.812355 0.108585
+vt 0.676401 0.072253
+vt 0.789700 0.092175
+vt 0.599888 0.122511
+vt 0.589057 0.151745
+vt 0.582798 0.148853
+vt 0.579868 0.178984
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.572791 0.357181
+vt 0.571207 0.326153
+vt 0.578089 0.326242
+vt 0.579568 0.357437
+vt 0.892437 0.349226
+vt 0.885423 0.348954
+vt 0.885704 0.319257
+vt 0.886223 0.285996
+vt 0.879631 0.287703
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.874138 0.409852
+vt 0.856681 0.436209
+vt 0.851292 0.431762
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.689480 0.483245
+vt 0.687628 0.489885
+vt 0.718747 0.488548
+vt 0.718195 0.495436
+vt 0.779839 0.488518
+vt 0.749318 0.494983
+vt 0.748545 0.488099
+vt 0.808610 0.476251
+vt 0.777761 0.481894
+vt 0.834553 0.458608
+vt 0.805300 0.470133
+vt 0.830124 0.453224
+vt 0.573209 0.178195
+vt 0.886228 0.380492
+vt 0.867982 0.406513
+vt 0.879533 0.378395
+vt 0.370709 0.754396
+vt 0.319322 0.130795
+vt 0.319224 0.161649
+vt 0.007220 0.160604
+vt 0.007387 0.901104
+vt 0.319390 0.899923
+vt 0.319502 0.930776
+vt 0.442778 0.399714
+vt 0.228990 0.399716
+vt 0.229046 0.370189
+vt 0.007499 0.931958
+vt 0.319616 0.961631
+vt 0.006361 0.469146
+vt 0.176387 0.469108
+vt 0.176362 0.499962
+vt 0.442678 0.488295
+vt 0.228910 0.458769
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.319626 0.038233
+vt 0.228890 0.547350
+vt 0.007613 0.962812
+vt 0.319730 0.992485
+vt 0.228946 0.606403
+vt 0.228912 0.576877
+vt 0.442700 0.576876
+vt 0.228992 0.635930
+vt 0.442734 0.606402
+vt 0.442833 0.370188
+vt 0.229109 0.340661
+vt 0.229113 0.694984
+vt 0.229049 0.665457
+vt 0.442837 0.665456
+vt 0.442901 0.694984
+vt 0.370705 0.281246
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.892437 0.317355
+vt 0.371421 0.900745
+vt 0.443302 0.872141
+vt 0.371269 0.930272
+vt 0.443231 0.901668
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.006405 0.438291
+vt 0.176430 0.438254
+vt 0.443090 0.104449
+vt 0.371280 0.105372
+vt 0.371043 0.075847
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.443305 0.193031
+vt 0.371495 0.193949
+vt 0.443252 0.222558
+vt 0.371442 0.223476
+vt 0.177399 0.283987
+vt 0.006543 0.376583
+vt 0.176568 0.376545
+vt 0.176492 0.407399
+vt 0.006467 0.407437
+vt 0.007165 0.839396
+vt 0.319168 0.838215
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.442780 0.635930
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.006337 0.500000
+vt 0.176359 0.530816
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.319423 0.099941
+vt 0.007419 0.098896
+vt 0.007319 0.129750
+vt 0.442897 0.340661
+vt 0.319126 0.192504
+vt 0.007122 0.191458
+vt 0.319029 0.223358
+vt 0.007025 0.222313
+vt 0.177512 0.777645
+vt 0.443079 0.931196
+vt 0.176656 0.345691
+vt 0.006631 0.345729
+vt 0.442853 0.074922
+vt 0.370712 0.046322
+vt 0.442732 0.429241
+vt 0.442678 0.547349
+vt 0.176377 0.561671
+vt 0.006351 0.561708
+vt 0.176415 0.592525
+vt 0.006390 0.592562
+vt 0.176474 0.623379
+vt 0.006448 0.623417
+vt 0.176549 0.654233
+vt 0.006524 0.654271
+vt 0.176640 0.685087
+vt 0.006614 0.685125
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.598317 0.411848
+vt 0.007623 0.037188
+vt 0.007728 0.993666
+vt 0.442504 0.990249
+vt 0.006334 0.530854
+vt 0.442522 0.045396
+vt 0.006929 0.253167
+vt 0.007025 0.222313
+vt 0.177644 0.253134
+vt 0.442678 0.488295
+vt 0.228889 0.488295
+vt 0.228910 0.458769
+vt 0.442670 0.517822
+vt 0.006631 0.345729
+vt 0.176656 0.345691
+vt 0.176568 0.376545
+vt 0.689480 0.483245
+vt 0.718747 0.488548
+vt 0.687628 0.489885
+vt 0.371352 0.783117
+vt 0.370709 0.754396
+vt 0.443060 0.754024
+vt 0.442971 0.724510
+vt 0.370472 0.723575
+vt 0.228883 0.517823
+vt 0.176852 0.746796
+vt 0.177512 0.777645
+vt 0.006941 0.777687
+vt 0.892437 0.317355
+vt 0.885704 0.319257
+vt 0.879631 0.287703
+vt 0.586362 0.385333
+vt 0.579817 0.387126
+vt 0.579568 0.357437
+vt 0.370694 0.989321
+vt 0.371029 0.959797
+vt 0.442838 0.960722
+vt 0.748545 0.488099
+vt 0.749318 0.494983
+vt 0.718195 0.495436
+vt 0.836176 0.125250
+vt 0.850517 0.149568
+vt 0.844628 0.151667
+vt 0.319423 0.099941
+vt 0.319322 0.130795
+vt 0.007319 0.129750
+vt 0.371269 0.930272
+vt 0.371421 0.900745
+vt 0.443231 0.901668
+vt 0.007419 0.098896
+vt 0.763884 0.080481
+vt 0.765981 0.074365
+vt 0.789700 0.092175
+vt 0.443302 0.872141
+vt 0.442833 0.370188
+vt 0.442778 0.399714
+vt 0.229046 0.370189
+vt 0.319626 0.038233
+vt 0.319524 0.069087
+vt 0.007520 0.068042
+vt 0.808610 0.476251
+vt 0.779839 0.488518
+vt 0.777761 0.481894
+vt 0.176640 0.685087
+vt 0.176742 0.715941
+vt 0.006716 0.715979
+vt 0.371495 0.841694
+vt 0.371443 0.812167
+vt 0.443254 0.813086
+vt 0.006614 0.685125
+vt 0.006467 0.407437
+vt 0.006543 0.376583
+vt 0.176492 0.407399
+vt 0.892437 0.349226
+vt 0.886228 0.380492
+vt 0.885423 0.348954
+vt 0.599888 0.122511
+vt 0.605204 0.126737
+vt 0.589057 0.151745
+vt 0.443305 0.193031
+vt 0.443252 0.222558
+vt 0.371495 0.193949
+vt 0.636826 0.456466
+vt 0.632640 0.461897
+vt 0.610260 0.440534
+vt 0.735929 0.074111
+vt 0.736753 0.067631
+vt 0.442837 0.665456
+vt 0.229049 0.665457
+vt 0.442780 0.635930
+vt 0.006361 0.469146
+vt 0.006405 0.438291
+vt 0.176387 0.469108
+vt 0.007613 0.962812
+vt 0.319616 0.961631
+vt 0.319730 0.992485
+vt 0.598317 0.411848
+vt 0.592437 0.415287
+vt 0.442678 0.547349
+vt 0.228890 0.547350
+vt 0.443160 0.252098
+vt 0.371348 0.252525
+vt 0.371442 0.223476
+vt 0.442504 0.990249
+vt 0.319126 0.192504
+vt 0.319029 0.223358
+vt 0.621946 0.100560
+vt 0.647824 0.083609
+vt 0.626230 0.105756
+vt 0.371492 0.871219
+vt 0.615392 0.436018
+vt 0.442732 0.429241
+vt 0.442698 0.458768
+vt 0.228944 0.429242
+vt 0.007499 0.931958
+vt 0.879533 0.378395
+vt 0.867982 0.406513
+vt 0.572791 0.357181
+vt 0.443237 0.133976
+vt 0.371427 0.134897
+vt 0.371280 0.105372
+vt 0.442853 0.074922
+vt 0.443090 0.104449
+vt 0.371043 0.075847
+vt 0.007727 0.006334
+vt 0.319730 0.007378
+vt 0.578089 0.326242
+vt 0.443305 0.163503
+vt 0.371495 0.164423
+vt 0.006727 0.314875
+vt 0.176753 0.314837
+vt 0.319502 0.930776
+vt 0.006337 0.500000
+vt 0.176362 0.499962
+vt 0.792953 0.086670
+vt 0.816609 0.103895
+vt 0.812355 0.108585
+vt 0.176549 0.654233
+vt 0.650942 0.089526
+vt 0.006828 0.284020
+vt 0.177399 0.283987
+vt 0.661830 0.472412
+vt 0.658752 0.478560
+vt 0.571207 0.326153
+vt 0.006524 0.654271
+vt 0.442901 0.694984
+vt 0.229113 0.694984
+vt 0.007122 0.191458
+vt 0.831035 0.128981
+vt 0.006390 0.592562
+vt 0.176415 0.592525
+vt 0.006448 0.623417
+vt 0.805300 0.470133
+vt 0.228990 0.399716
+vt 0.582798 0.148853
+vt 0.176430 0.438254
+vt 0.886223 0.285996
+vt 0.706979 0.073452
+vt 0.706468 0.066881
+vt 0.176474 0.623379
+vt 0.229109 0.340661
+vt 0.834553 0.458608
+vt 0.676401 0.072253
+vt 0.228992 0.635930
+vt 0.228946 0.606403
+vt 0.442734 0.606402
+vt 0.443079 0.931196
+vt 0.442700 0.576876
+vt 0.176377 0.561671
+vt 0.228912 0.576877
+vt 0.442967 0.311134
+vt 0.370467 0.312068
+vt 0.443056 0.281620
+vt 0.370712 0.046322
+vt 0.830124 0.453224
+vt 0.007220 0.160604
+vt 0.370705 0.281246
+vt 0.176359 0.530816
+vt 0.443305 0.842613
+vt 0.874138 0.409852
+vt 0.851292 0.431762
+vt 0.442897 0.340661
+vt 0.007276 0.870250
+vt 0.319278 0.869069
+vt 0.319390 0.899923
+vt 0.678244 0.078632
+vt 0.006334 0.530854
+vt 0.006351 0.561708
+vt 0.856681 0.436209
+vt 0.443163 0.783546
+vt 0.007728 0.993666
+vt 0.007623 0.037188
+vt 0.007387 0.901104
+vt 0.319224 0.161649
+vt 0.442522 0.045396
+vt 0.006827 0.746834
+vt 0.007165 0.839396
+vt 0.007055 0.808541
+vt 0.177771 0.808498
+vt 0.319168 0.838215
+vt 0.573209 0.178195
+vt 0.579868 0.178984
+vt 0.874125 0.609201
+vt 0.817898 0.626255
+vt 0.670298 0.547363
+vt 0.653238 0.491123
+vt 0.732120 0.343530
+vt 0.846854 0.332224
+vt 0.935969 0.405357
+vt 0.953029 0.461597
+vt 0.759412 0.620495
+vt 0.732132 0.609195
+vt 0.658998 0.432637
+vt 0.686702 0.380807
+vt 0.759394 0.332230
+vt 0.898684 0.359926
+vt 0.919564 0.380805
+vt 0.947269 0.520085
+vt 0.919563 0.571916
+vt 0.846857 0.620495
+vt 0.788371 0.626255
+vt 0.707581 0.592792
+vt 0.686702 0.571913
+vt 0.658999 0.520082
+vt 0.653238 0.461596
+vt 0.670298 0.405358
+vt 0.707581 0.359928
+vt 0.788366 0.326464
+vt 0.817893 0.326463
+vt 0.874134 0.343522
+vt 0.947270 0.432638
+vt 0.953029 0.491125
+vt 0.935968 0.547365
+vt 0.898673 0.592803
+vt 0.214996 0.906316
+vt 0.198460 0.906317
+vt 0.182243 0.903091
+vt 0.281116 0.782613
+vt 0.290669 0.814108
+vt 0.246483 0.896766
+vt 0.231211 0.741659
+vt 0.182233 0.741662
+vt 0.198458 0.738433
+vt 0.126012 0.797890
+vt 0.141526 0.768865
+vt 0.166960 0.747990
+vt 0.271928 0.875886
+vt 0.260230 0.887583
+vt 0.214993 0.738433
+vt 0.260236 0.757172
+vt 0.271928 0.768865
+vt 0.122786 0.830643
+vt 0.290669 0.830644
+vt 0.287443 0.846861
+vt 0.287444 0.797891
+vt 0.132340 0.862137
+vt 0.166967 0.896763
+vt 0.153218 0.887577
+vt 0.141526 0.875885
+vt 0.132339 0.782614
+vt 0.281115 0.862138
+vt 0.126012 0.846860
+vt 0.153218 0.757173
+vt 0.246487 0.747986
+vt 0.231212 0.903091
+vt 0.122786 0.814107
+vt 0.305766 0.603342
+vt 0.249539 0.620395
+vt 0.101939 0.541503
+vt 0.084879 0.485264
+vt 0.163760 0.337671
+vt 0.278494 0.326364
+vt 0.367610 0.399497
+vt 0.384670 0.455738
+vt 0.191052 0.614636
+vt 0.163773 0.603336
+vt 0.090639 0.426777
+vt 0.118343 0.374948
+vt 0.191035 0.326370
+vt 0.330325 0.354067
+vt 0.351205 0.374946
+vt 0.378909 0.514226
+vt 0.351204 0.566056
+vt 0.278498 0.614635
+vt 0.220011 0.620396
+vt 0.139222 0.586933
+vt 0.118343 0.566054
+vt 0.090640 0.514223
+vt 0.084879 0.455737
+vt 0.101938 0.399499
+vt 0.139222 0.354069
+vt 0.220007 0.320605
+vt 0.249534 0.320604
+vt 0.305774 0.337663
+vt 0.378910 0.426778
+vt 0.384670 0.485266
+vt 0.367609 0.541505
+vt 0.330314 0.586943
+vt 0.103870 0.076834
+vt 0.115562 0.065142
+vt 0.129303 0.055959
+vt 0.094683 0.170106
+vt 0.129310 0.204732
+vt 0.115562 0.195546
+vt 0.208826 0.204735
+vt 0.177339 0.214285
+vt 0.088356 0.154828
+vt 0.085130 0.138611
+vt 0.085130 0.122076
+vt 0.088355 0.105859
+vt 0.160804 0.214285
+vt 0.144587 0.211060
+vt 0.193554 0.049628
+vt 0.208831 0.055955
+vt 0.222579 0.065141
+vt 0.243459 0.090582
+vt 0.249787 0.105860
+vt 0.253013 0.122077
+vt 0.234272 0.183855
+vt 0.222573 0.195552
+vt 0.144577 0.049631
+vt 0.160801 0.046402
+vt 0.193556 0.211059
+vt 0.249787 0.154830
+vt 0.177337 0.046402
+vt 0.234272 0.076833
+vt 0.243459 0.170107
+vt 0.094683 0.090583
+vt 0.103870 0.183854
+vt 0.253013 0.138613
+vt 0.606547 0.945139
+vt 0.550320 0.962192
+vt 0.402720 0.883300
+vt 0.385660 0.827061
+vt 0.464542 0.679467
+vt 0.579275 0.668161
+vt 0.668391 0.741294
+vt 0.685451 0.797535
+vt 0.491833 0.956433
+vt 0.464554 0.945133
+vt 0.391420 0.768574
+vt 0.419124 0.716744
+vt 0.491816 0.668167
+vt 0.631106 0.695864
+vt 0.651986 0.716743
+vt 0.679690 0.856022
+vt 0.651985 0.907853
+vt 0.579279 0.956432
+vt 0.520792 0.962193
+vt 0.440003 0.928729
+vt 0.419124 0.907851
+vt 0.391421 0.856020
+vt 0.385660 0.797533
+vt 0.402719 0.741295
+vt 0.440003 0.695865
+vt 0.520788 0.662401
+vt 0.550315 0.662401
+vt 0.606555 0.679459
+vt 0.679692 0.768575
+vt 0.685451 0.827063
+vt 0.668390 0.883302
+vt 0.631095 0.928740
+vt 0.443713 0.231131
+vt 0.455405 0.219439
+vt 0.469147 0.210256
+vt 0.434527 0.324402
+vt 0.469154 0.359029
+vt 0.455406 0.349843
+vt 0.548670 0.359032
+vt 0.517183 0.368582
+vt 0.428200 0.309125
+vt 0.424973 0.292908
+vt 0.424973 0.276373
+vt 0.428199 0.260156
+vt 0.500648 0.368582
+vt 0.484431 0.365357
+vt 0.533398 0.203925
+vt 0.548675 0.210252
+vt 0.562423 0.219438
+vt 0.583303 0.244879
+vt 0.589631 0.260156
+vt 0.592857 0.276374
+vt 0.574115 0.338152
+vt 0.562417 0.349849
+vt 0.484421 0.203928
+vt 0.500645 0.200699
+vt 0.533400 0.365356
+vt 0.589630 0.309127
+vt 0.517180 0.200699
+vt 0.574116 0.231130
+vt 0.583302 0.324403
+vt 0.434527 0.244880
+vt 0.443713 0.338151
+vt 0.592857 0.292910
+vn -0.8946 0.0000 -0.4468
+vn 0.8946 0.0000 0.4468
+vn 0.4468 0.0000 -0.8946
+vn -0.4468 0.0000 0.8946
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn -0.0815 -0.9955 -0.0484
+vn 0.8915 -0.0946 0.4431
+vn -0.8891 -0.1015 -0.4464
+vn -0.8918 0.0944 -0.4426
+vn 0.8888 0.1014 0.4469
+vn -0.8910 0.0945 -0.4441
+vn 0.8896 0.1015 0.4453
+vn 0.8910 -0.0945 0.4441
+vn -0.8896 -0.1015 -0.4453
+vn 0.6837 0.6370 0.3561
+vn 0.4539 0.0090 -0.8910
+vn 0.4489 0.0066 -0.8935
+vn 0.4472 0.0100 -0.8944
+vn 0.4446 0.0090 -0.8957
+vn 0.4481 0.0095 -0.8939
+vn 0.4488 0.0054 -0.8936
+vn 0.4442 0.0081 -0.8959
+vn 0.4463 0.0101 -0.8948
+vn 0.4489 0.0076 -0.8935
+vn 0.4455 0.0094 -0.8952
+vn 0.4487 0.0087 -0.8936
+vn 0.4440 0.0070 -0.8960
+vn 0.4443 0.0059 -0.8958
+vn 0.4484 0.0057 -0.8938
+vn 0.4452 0.0002 -0.8954
+vn 0.4441 -0.0134 -0.8959
+vn 0.4424 -0.0144 -0.8967
+vn 0.2580 -0.9600 -0.1084
+vn 0.4547 0.0120 -0.8906
+vn 0.4389 0.0119 -0.8985
+vn 0.4544 0.0151 -0.8907
+vn 0.4530 0.0179 -0.8913
+vn 0.4508 0.0199 -0.8924
+vn 0.4453 0.0208 -0.8952
+vn 0.4426 0.0198 -0.8965
+vn 0.4404 0.0178 -0.8976